Files
privacy.sexy/src/presentation/electron/main/Update/ManualUpdater/Installer.ts
undergroundwires 4765752ee3 Improve security and reliability of macOS updates
This commit introduces several improvements to the macOS update process,
primarily focusing on enhancing security and reliability:

- Add data integrity checks to ensure downloaded updates haven't been
  tampered with.
- Optimize update progress logging in `streamWithProgress` by limiting
  amount of logs during the download process.
- Improve resource management by ensuring proper closure of file
  read/write streams.
- Add retry logic with exponential back-off during file access to handle
  occassionally seen file system preparation delays on macOS.
- Improve decision-making based on user responses.
- Improve clarity and informativeness of log messages.
- Update error dialogs for better user guidance when updates fail to
  download, unexpected errors occur or the installer can't be opened.
- Add handling for unexpected errors during the update process.
- Move to asynchronous functions for more efficient operation.
- Move to scoped imports for better code clarity.
- Update `Readable` stream type to a more modern variant in Node.
- Refactor `ManualUpdater` for improved separation of concerns.
- Document the secure update process, and log directory locations.
- Rename files to more accurately reflect their purpose.
- Add `.DS_Store` in `.gitignore` to avoid unintended files in commits.
2023-12-04 18:28:43 +01:00

17 lines
594 B
TypeScript

import { app, shell } from 'electron';
import { ElectronLogger } from '@/infrastructure/Log/ElectronLogger';
import { retryFileSystemAccess } from './RetryFileSystemAccess';
export async function startInstallation(filePath: string): Promise<boolean> {
return retryFileSystemAccess(async () => {
ElectronLogger.info(`Attempting to open the installer at: ${filePath}.`);
const error = await shell.openPath(filePath);
if (!error) {
app.quit();
return true;
}
ElectronLogger.error(`Failed to open the installer at ${filePath}.`, error);
return false;
});
}