Ensure auth device token is saved to a file so it persists upgrades and reinstalls (#3640)

* ensure auth device token is saved to a file so it persists upgrades and reinstalls
#3639

* write file on check log in

* write file on check log in

* clean up
This commit is contained in:
Kurt Hutten
2024-08-27 05:59:25 +10:00
committed by GitHub
parent 972dca8743
commit f6bb10170d
3 changed files with 80 additions and 7 deletions

View File

@ -13,6 +13,7 @@ import {
PROJECT_FOLDER,
PROJECT_SETTINGS_FILE_NAME,
SETTINGS_FILE_NAME,
TOKEN_FILE_NAME,
} from './constants'
import { DeepPartial } from './types'
import { ProjectConfiguration } from 'wasm-lib/kcl/bindings/ProjectConfiguration'
@ -396,6 +397,23 @@ const getAppSettingsFilePath = async () => {
}
return window.electron.path.join(fullPath, SETTINGS_FILE_NAME)
}
const getTokenFilePath = async () => {
const isTestEnv = window.electron.process.env.IS_PLAYWRIGHT === 'true'
const testSettingsPath = window.electron.process.env.TEST_SETTINGS_FILE_KEY
const appConfig = await window.electron.getPath('appData')
const fullPath = isTestEnv
? testSettingsPath
: window.electron.path.join(appConfig, getAppFolderName())
try {
await window.electron.stat(fullPath)
} catch (e) {
// File/path doesn't exist
if (e === 'ENOENT') {
await window.electron.mkdir(fullPath, { recursive: true })
}
}
return window.electron.path.join(fullPath, TOKEN_FILE_NAME)
}
const getProjectSettingsFilePath = async (projectPath: string) => {
try {
@ -475,6 +493,34 @@ export const writeAppSettingsFile = async (tomlStr: string) => {
return window.electron.writeFile(appSettingsFilePath, tomlStr)
}
export const readTokenFile = async () => {
let settingsPath = await getTokenFilePath()
if (window.electron.exists(settingsPath)) {
const token: string = await window.electron.readFile(settingsPath)
if (!token) return ''
return token
}
return ''
}
export const writeTokenFile = async (token: string) => {
const tokenFilePath = await getTokenFilePath()
if (err(token)) return Promise.reject(token)
return window.electron.writeFile(tokenFilePath, token)
}
let appStateStore: Project | undefined = undefined
export const getState = async (): Promise<Project | undefined> => {
return Promise.resolve(appStateStore)
}
export const setState = async (state: Project | undefined): Promise<void> => {
appStateStore = state
}
export const getUser = async (
token: string,
hostname: string