1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2020-11-23 11:25:38 -05:00
parent a614eb955f
commit c2e74918d5
2 changed files with 20 additions and 20 deletions

View File

@ -48,7 +48,7 @@ export class LensExtension {
* folder name. * folder name.
*/ */
async getExtensionFileFolder(): Promise<string> { async getExtensionFileFolder(): Promise<string> {
return filesystemProvisionerStore.requestDirectory(this.id) return filesystemProvisionerStore.requestDirectory(this.id);
} }
get description() { get description() {

View File

@ -1,18 +1,18 @@
import { randomBytes } from "crypto" import { randomBytes } from "crypto";
import { SHA256 } from "crypto-js" import { SHA256 } from "crypto-js";
import { app } from "electron" import { app } from "electron";
import fse from "fs-extra" import fse from "fs-extra";
import { action, observable, toJS } from "mobx" import { action, observable, toJS } from "mobx";
import path from "path" import path from "path";
import { BaseStore } from "../common/base-store" import { BaseStore } from "../common/base-store";
import { LensExtensionId } from "../extensions/lens-extension" import { LensExtensionId } from "../extensions/lens-extension";
interface FSProvisionModel { interface FSProvisionModel {
extensions: Record<string, string>; // extension names to paths extensions: Record<string, string>; // extension names to paths
} }
export class FilesystemProvisionerStore extends BaseStore<FSProvisionModel> { export class FilesystemProvisionerStore extends BaseStore<FSProvisionModel> {
@observable registeredExtensions = observable.map<LensExtensionId, string>() @observable registeredExtensions = observable.map<LensExtensionId, string>();
private constructor() { private constructor() {
super({ super({
@ -29,20 +29,20 @@ export class FilesystemProvisionerStore extends BaseStore<FSProvisionModel> {
*/ */
async requestDirectory(extensionName: string): Promise<string> { async requestDirectory(extensionName: string): Promise<string> {
if (!this.registeredExtensions.has(extensionName)) { if (!this.registeredExtensions.has(extensionName)) {
const salt = randomBytes(32).toString("hex") const salt = randomBytes(32).toString("hex");
const hashedName = SHA256(`${extensionName}/${salt}`).toString() const hashedName = SHA256(`${extensionName}/${salt}`).toString();
const dirPath = path.resolve(app.getPath("userData"), "extension_data", hashedName) const dirPath = path.resolve(app.getPath("userData"), "extension_data", hashedName);
this.registeredExtensions.set(extensionName, dirPath) this.registeredExtensions.set(extensionName, dirPath);
} }
const dirPath = this.registeredExtensions.get(extensionName) const dirPath = this.registeredExtensions.get(extensionName);
await fse.ensureDir(dirPath) await fse.ensureDir(dirPath);
return dirPath return dirPath;
} }
@action @action
protected fromStore({ extensions }: FSProvisionModel = { extensions: {} }): void { protected fromStore({ extensions }: FSProvisionModel = { extensions: {} }): void {
this.registeredExtensions.merge(extensions) this.registeredExtensions.merge(extensions);
} }
toJSON(): FSProvisionModel { toJSON(): FSProvisionModel {
@ -50,8 +50,8 @@ export class FilesystemProvisionerStore extends BaseStore<FSProvisionModel> {
extensions: this.registeredExtensions.toJSON(), extensions: this.registeredExtensions.toJSON(),
}, { }, {
recurseEverything: true recurseEverything: true
}) });
} }
} }
export const filesystemProvisionerStore = FilesystemProvisionerStore.getInstance<FilesystemProvisionerStore>() export const filesystemProvisionerStore = FilesystemProvisionerStore.getInstance<FilesystemProvisionerStore>();