mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
187 lines
5.8 KiB
JavaScript
187 lines
5.8 KiB
JavaScript
(() => {
|
|
const {
|
|
getBodyDataset,
|
|
isUpgradeMode,
|
|
getLockedDatabase
|
|
} = window.InstallerStepsContext || {};
|
|
|
|
const INSTALL_LOCK_KEY = 'appwrite-install-lock';
|
|
const INSTALL_ID_KEY = 'appwrite-install-id';
|
|
const INSTALL_LOCK_LOCAL_KEY = 'appwrite-install-lock-backup';
|
|
const INSTALL_ID_LOCAL_KEY = 'appwrite-install-id-backup';
|
|
|
|
const formState = {
|
|
appDomain: null,
|
|
database: null,
|
|
httpPort: null,
|
|
httpsPort: null,
|
|
emailCertificates: null,
|
|
opensslKey: null,
|
|
assistantOpenAIKey: null,
|
|
accountEmail: null,
|
|
accountPassword: null
|
|
};
|
|
|
|
const dispatchStateChange = (key) => {
|
|
if (!key || typeof document === 'undefined') return;
|
|
try {
|
|
document.dispatchEvent(new CustomEvent('installer:state-change', {
|
|
detail: { key, value: formState[key] }
|
|
}));
|
|
} catch (error) {}
|
|
};
|
|
|
|
const setStateIfEmpty = (key, value) => {
|
|
if (value === null || value === undefined || value === '') return;
|
|
if (formState[key] === null || formState[key] === undefined || formState[key] === '') {
|
|
formState[key] = value;
|
|
}
|
|
};
|
|
|
|
const applyBodyDefaults = () => {
|
|
const data = getBodyDataset?.() ?? {};
|
|
setStateIfEmpty('appDomain', data.defaultAppDomain);
|
|
setStateIfEmpty('httpPort', data.defaultHttpPort);
|
|
setStateIfEmpty('httpsPort', data.defaultHttpsPort);
|
|
setStateIfEmpty('emailCertificates', data.defaultEmailCertificates);
|
|
setStateIfEmpty('opensslKey', data.defaultSecretKey);
|
|
setStateIfEmpty('assistantOpenAIKey', data.defaultAssistantOpenaiKey);
|
|
if (data.lockedDatabase) {
|
|
formState.database = data.lockedDatabase;
|
|
}
|
|
if (!isUpgradeMode?.()) {
|
|
setStateIfEmpty('database', data.defaultDatabase);
|
|
}
|
|
};
|
|
|
|
const getInstallLock = () => {
|
|
try {
|
|
const raw = sessionStorage.getItem(INSTALL_LOCK_KEY);
|
|
if (raw) {
|
|
const parsed = JSON.parse(raw);
|
|
if (parsed && typeof parsed === 'object') return parsed;
|
|
}
|
|
} catch (error) {}
|
|
|
|
try {
|
|
const raw = localStorage.getItem(INSTALL_LOCK_LOCAL_KEY);
|
|
if (raw) {
|
|
const parsed = JSON.parse(raw);
|
|
if (parsed && typeof parsed === 'object') {
|
|
sessionStorage.setItem(INSTALL_LOCK_KEY, raw);
|
|
return parsed;
|
|
}
|
|
}
|
|
} catch (error) {}
|
|
|
|
return null;
|
|
};
|
|
|
|
const setInstallLock = (installId, payload) => {
|
|
const sanitizedPayload = payload ? { ...payload } : null;
|
|
if (sanitizedPayload) {
|
|
delete sanitizedPayload.opensslKey;
|
|
delete sanitizedPayload.accountPassword;
|
|
delete sanitizedPayload.assistantOpenAIKey;
|
|
}
|
|
const lock = {
|
|
installId,
|
|
payload: sanitizedPayload,
|
|
startedAt: Date.now()
|
|
};
|
|
try {
|
|
sessionStorage.setItem(INSTALL_LOCK_KEY, JSON.stringify(lock));
|
|
} catch (error) {}
|
|
try {
|
|
localStorage.setItem(INSTALL_LOCK_LOCAL_KEY, JSON.stringify(lock));
|
|
} catch (error) {}
|
|
if (document.body) {
|
|
document.body.dataset.installLocked = 'true';
|
|
}
|
|
return lock;
|
|
};
|
|
|
|
const clearInstallLock = () => {
|
|
try {
|
|
sessionStorage.removeItem(INSTALL_LOCK_KEY);
|
|
} catch (error) {}
|
|
try {
|
|
localStorage.removeItem(INSTALL_LOCK_LOCAL_KEY);
|
|
} catch (error) {}
|
|
if (document.body) {
|
|
delete document.body.dataset.installLocked;
|
|
}
|
|
};
|
|
|
|
const isInstallLocked = () => {
|
|
return Boolean(getInstallLock());
|
|
};
|
|
|
|
const syncInstallLockFlag = () => {
|
|
if (!document.body) return;
|
|
if (isInstallLocked()) {
|
|
document.body.dataset.installLocked = 'true';
|
|
} else {
|
|
delete document.body.dataset.installLocked;
|
|
}
|
|
};
|
|
|
|
const applyLockPayload = () => {
|
|
const lock = getInstallLock();
|
|
if (!lock || !lock.payload) return;
|
|
const payload = lock.payload;
|
|
setStateIfEmpty('appDomain', payload.appDomain);
|
|
setStateIfEmpty('database', payload.database);
|
|
setStateIfEmpty('httpPort', payload.httpPort);
|
|
setStateIfEmpty('httpsPort', payload.httpsPort);
|
|
setStateIfEmpty('emailCertificates', payload.emailCertificates);
|
|
setStateIfEmpty('accountEmail', payload.accountEmail);
|
|
};
|
|
|
|
const getStoredInstallId = () => {
|
|
try {
|
|
const val = sessionStorage.getItem(INSTALL_ID_KEY);
|
|
if (val) return val;
|
|
} catch (error) {}
|
|
try {
|
|
return localStorage.getItem(INSTALL_ID_LOCAL_KEY);
|
|
} catch (error) {}
|
|
return null;
|
|
};
|
|
|
|
const storeInstallId = (installId) => {
|
|
try {
|
|
sessionStorage.setItem(INSTALL_ID_KEY, installId);
|
|
} catch (error) {}
|
|
try {
|
|
localStorage.setItem(INSTALL_ID_LOCAL_KEY, installId);
|
|
} catch (error) {}
|
|
};
|
|
|
|
const clearInstallId = () => {
|
|
try {
|
|
sessionStorage.removeItem(INSTALL_ID_KEY);
|
|
} catch (error) {}
|
|
try {
|
|
localStorage.removeItem(INSTALL_ID_LOCAL_KEY);
|
|
} catch (error) {}
|
|
};
|
|
|
|
window.InstallerStepsState = {
|
|
formState,
|
|
dispatchStateChange,
|
|
setStateIfEmpty,
|
|
applyBodyDefaults,
|
|
applyLockPayload,
|
|
getInstallLock,
|
|
setInstallLock,
|
|
clearInstallLock,
|
|
isInstallLocked,
|
|
syncInstallLockFlag,
|
|
getStoredInstallId,
|
|
storeInstallId,
|
|
clearInstallId,
|
|
getLockedDatabase: getLockedDatabase || (() => '')
|
|
};
|
|
})();
|