Avoid Electron initialization in plain Node tests
This commit is contained in:
+1
-1
@@ -141,7 +141,7 @@ c2c9e4ba251d93a530a52b2d0079787680261c314083bb99d2356fc177719613 2434
|
|||||||
c8780510ff6e77a16e9c4a88c3c981a0d9d1a4dff8eafd16afdeefbb4b03aac9 1064 SECURITY.md
|
c8780510ff6e77a16e9c4a88c3c981a0d9d1a4dff8eafd16afdeefbb4b03aac9 1064 SECURITY.md
|
||||||
619515f524cb89960370ffcbd3fafd3c0e178b95f69c5868b1dd44777f23ec1e 2081 setup-windows.ps1
|
619515f524cb89960370ffcbd3fafd3c0e178b95f69c5868b1dd44777f23ec1e 2081 setup-windows.ps1
|
||||||
dd613d04b366f2cd071a1685a414016a5fb008082ed1b4cb8b24b79c100f640a 2412 src/main/audit-service.cjs
|
dd613d04b366f2cd071a1685a414016a5fb008082ed1b4cb8b24b79c100f640a 2412 src/main/audit-service.cjs
|
||||||
b8c3a41b9a49bc1c0387813737247bf86c940d525131f00da7192a5b8c99aa8d 34144 src/main/config-store.cjs
|
e3af59fafa497d032541979bea5fe2b98187b1ced619c567d15ae79ee0904c1f 34629 src/main/config-store.cjs
|
||||||
2fb04b1494b39f5d7c0720fa5fd298cd46fa85dc1b696d77657592347fcf1819 2731 src/main/configuration-backup.cjs
|
2fb04b1494b39f5d7c0720fa5fd298cd46fa85dc1b696d77657592347fcf1819 2731 src/main/configuration-backup.cjs
|
||||||
86e9fc2eda66b4b563f6c4bbb87d3e8514340d484fb503b73137e63b6b05c3c9 14597 src/main/deploy-key-lifecycle-service.cjs
|
86e9fc2eda66b4b563f6c4bbb87d3e8514340d484fb503b73137e63b6b05c3c9 14597 src/main/deploy-key-lifecycle-service.cjs
|
||||||
7cbfe51973d6607203cb197652ed7f296a3f6b6b644df876957117866a47d802 2159 src/main/deployment-identity.cjs
|
7cbfe51973d6607203cb197652ed7f296a3f6b6b644df876957117866a47d802 2159 src/main/deployment-identity.cjs
|
||||||
|
|||||||
@@ -3,9 +3,21 @@
|
|||||||
const fs = require('node:fs/promises');
|
const fs = require('node:fs/promises');
|
||||||
const path = require('node:path');
|
const path = require('node:path');
|
||||||
const crypto = require('node:crypto');
|
const crypto = require('node:crypto');
|
||||||
const { safeStorage } = require('electron');
|
|
||||||
const { normalizeBaseUrl, assertHttpUrl, assertWorkflowFileName, assertBranchName, assertEnvironmentName, assertCloneRemote, assertRepositoryRelativePath, assertRepositoryRelativePaths } = require('../shared/validation.cjs');
|
const { normalizeBaseUrl, assertHttpUrl, assertWorkflowFileName, assertBranchName, assertEnvironmentName, assertCloneRemote, assertRepositoryRelativePath, assertRepositoryRelativePaths } = require('../shared/validation.cjs');
|
||||||
|
|
||||||
|
let cachedSafeStorage;
|
||||||
|
|
||||||
|
function getSafeStorage() {
|
||||||
|
if (cachedSafeStorage !== undefined) return cachedSafeStorage;
|
||||||
|
try {
|
||||||
|
const electron = require('electron');
|
||||||
|
cachedSafeStorage = electron && typeof electron === 'object' ? electron.safeStorage || null : null;
|
||||||
|
} catch {
|
||||||
|
cachedSafeStorage = null;
|
||||||
|
}
|
||||||
|
return cachedSafeStorage;
|
||||||
|
}
|
||||||
|
|
||||||
const DEFAULT_CONFIG = {
|
const DEFAULT_CONFIG = {
|
||||||
schemaVersion: 13,
|
schemaVersion: 13,
|
||||||
setupComplete: false,
|
setupComplete: false,
|
||||||
@@ -215,6 +227,7 @@ class ConfigStore {
|
|||||||
return { persistent: true, preserved: false };
|
return { persistent: true, preserved: false };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const safeStorage = getSafeStorage();
|
||||||
if (safeStorage?.isEncryptionAvailable?.()) {
|
if (safeStorage?.isEncryptionAvailable?.()) {
|
||||||
this.data.gitea.encryptedToken = safeStorage.encryptString(value).toString('base64');
|
this.data.gitea.encryptedToken = safeStorage.encryptString(value).toString('base64');
|
||||||
this.sessionToken = null;
|
this.sessionToken = null;
|
||||||
@@ -230,6 +243,7 @@ class ConfigStore {
|
|||||||
if (this.sessionToken) return this.sessionToken;
|
if (this.sessionToken) return this.sessionToken;
|
||||||
if (!this.data.gitea.encryptedToken) return '';
|
if (!this.data.gitea.encryptedToken) return '';
|
||||||
try {
|
try {
|
||||||
|
const safeStorage = getSafeStorage();
|
||||||
return safeStorage?.decryptString?.(Buffer.from(this.data.gitea.encryptedToken, 'base64')) || '';
|
return safeStorage?.decryptString?.(Buffer.from(this.data.gitea.encryptedToken, 'base64')) || '';
|
||||||
} catch {
|
} catch {
|
||||||
return '';
|
return '';
|
||||||
@@ -240,6 +254,7 @@ class ConfigStore {
|
|||||||
encryptSecret(value) {
|
encryptSecret(value) {
|
||||||
const text = String(value || '');
|
const text = String(value || '');
|
||||||
if (!text) return null;
|
if (!text) return null;
|
||||||
|
const safeStorage = getSafeStorage();
|
||||||
if (!safeStorage?.isEncryptionAvailable?.()) {
|
if (!safeStorage?.isEncryptionAvailable?.()) {
|
||||||
const error = new Error('Secure credential storage is unavailable. ForgeFlow will not persist server passwords or key passphrases.');
|
const error = new Error('Secure credential storage is unavailable. ForgeFlow will not persist server passwords or key passphrases.');
|
||||||
error.code = 'SECURE_STORAGE_UNAVAILABLE';
|
error.code = 'SECURE_STORAGE_UNAVAILABLE';
|
||||||
@@ -250,7 +265,10 @@ class ConfigStore {
|
|||||||
|
|
||||||
decryptSecret(value) {
|
decryptSecret(value) {
|
||||||
if (!value) return '';
|
if (!value) return '';
|
||||||
try { return safeStorage?.decryptString?.(Buffer.from(value, 'base64')) || ''; }
|
try {
|
||||||
|
const safeStorage = getSafeStorage();
|
||||||
|
return safeStorage?.decryptString?.(Buffer.from(value, 'base64')) || '';
|
||||||
|
}
|
||||||
catch { return ''; }
|
catch { return ''; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user