Basic GitHub integration flow

This commit is contained in:
Will Chen
2025-04-14 18:12:43 -07:00
parent 3ceb3e23c6
commit 7ad83a2bdc
9 changed files with 633 additions and 26 deletions

View File

@@ -2,7 +2,7 @@ import fs from "node:fs";
import path from "node:path";
import { getUserDataPath } from "../paths/paths";
import { UserSettingsSchema, type UserSettings } from "../lib/schemas";
import { safeStorage } from "electron";
const DEFAULT_SETTINGS: UserSettings = {
selectedModel: {
name: "auto",
@@ -10,6 +10,9 @@ const DEFAULT_SETTINGS: UserSettings = {
},
providerSettings: {},
runtimeMode: "unset",
githubSettings: {
secrets: null,
},
};
const SETTINGS_FILE = "user-settings.json";
@@ -31,6 +34,13 @@ export function readSettings(): UserSettings {
...DEFAULT_SETTINGS,
...rawSettings,
});
if (validatedSettings.githubSettings?.secrets) {
const accessToken = validatedSettings.githubSettings.secrets.accessToken;
validatedSettings.githubSettings.secrets = {
accessToken: accessToken ? decrypt(accessToken) : null,
};
}
return validatedSettings;
} catch (error) {
console.error("Error reading settings:", error);
@@ -45,8 +55,28 @@ export function writeSettings(settings: Partial<UserSettings>): void {
const newSettings = { ...currentSettings, ...settings };
// Validate before writing
const validatedSettings = UserSettingsSchema.parse(newSettings);
if (validatedSettings.githubSettings?.secrets) {
const accessToken = validatedSettings.githubSettings.secrets.accessToken;
validatedSettings.githubSettings.secrets = {
accessToken: accessToken ? encrypt(accessToken) : null,
};
}
fs.writeFileSync(filePath, JSON.stringify(validatedSettings, null, 2));
} catch (error) {
console.error("Error writing settings:", error);
}
}
export function encrypt(data: string): string {
if (safeStorage.isEncryptionAvailable()) {
return safeStorage.encryptString(data).toString("base64");
}
return data;
}
export function decrypt(data: string): string {
if (safeStorage.isEncryptionAvailable()) {
return safeStorage.decryptString(Buffer.from(data, "base64"));
}
return data;
}