/
amesk
/
gitlab-analyzer
Обзор
Документация
Войти
/
amesk
/
gitlab-analyzer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.js
185 строк
5 KB
amesk
Added Logout button
05 фев 2025, 17:31
05 фев 2025, 17:31
04df88f
Код
Авторство
О чём код?
const { app, BrowserWindow, shell, ipcMain, Menu } = require('electron'); const path = require('path'); const { updateLabel, getOpenIssues, setupApiToken } = require('./gitlab'); // Импорт функций для работы с GitLab const os = require('os'); const fs = require('fs'); // Получение домашней директории пользователя const homeDir = os.homedir(); // Формирование полного пути к файлу .gitlab-analyzer const configPath = path.join(homeDir, '.gitlab-analyzer'); function loadToken() { try { const data = fs.readFileSync(configPath, 'utf8'); const token = data.trim(); setupApiToken(token); // Вызываем функцию для подключения к API return token; // Возвращаем содержимое файла без лишних пробелов } catch (err) { return null; // Возвращаем null, если файл не найден или произошла ошибка } } // GITLAB_URL = require('./gitlab'); // Импорт функций для работы с GitLab GITLAB_TOKEN = loadToken(); function saveToken(token) { fs.writeFile(configPath, token, (err) => { if (err) throw err; console.log('The token has been saved!'); }); } let mainWindow; function createWindow() { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: false, // Отключаем nodeIntegration для безопасности contextIsolation: true, // Включаем изоляцию контекста preload: path.join(__dirname, 'preload.js'), // Указываем путь к preload.js }, }); mainWindow.loadFile('index.html'); // Обработчик для открытия внешних ссылок ipcMain.on('open-external-link', (event, url) => { shell.openExternal(url); // Открываем ссылку в браузере по умолчанию }); // Обработчик для открытия окна справки ipcMain.on('open-help-window', () => { const helpWindow = new BrowserWindow({ width: 600, height: 400, webPreferences: { nodeIntegration: false, contextIsolation: true, preload: path.join(__dirname, 'preload.js'), }, }); helpWindow.loadFile('help.html'); helpWindow.setMenu(null); }); // Обработчик для получения открытых задач ipcMain.handle('get-open-issues', async (event, projectId) => { const result = await getOpenIssues(projectId); return result; }); // Обработчик для обновления метки ipcMain.handle('update-label', async (event, projectId, issueId, label, action) => { const result = await updateLabel(projectId, issueId, label, action); return result; }); } app.on('ready', () => { createWindow(); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } }); const template = [ { label: 'File', submenu: [ { role: 'quit' } ] }, { label: 'Edit', submenu: [ { role: 'undo' }, { role: 'redo' }, { type: 'separator' }, { role: 'cut' }, { role: 'copy' }, { role: 'paste' }, { role: 'delete' }, { role: 'selectAll' } ] }, { label: 'View', submenu: [ { role: 'reload' }, { role: 'forcereload' }, { role: 'toggledevtools' }, { type: 'separator' }, { role: 'resetzoom' }, { role: 'zoomin' }, { role: 'zoomout' }, { type: 'separator' }, { role: 'togglefullscreen' } ] }, { label: 'Window', submenu: [ { role: 'minimize' }, { role: 'close' } ] } ]; const menu = Menu.buildFromTemplate(template); Menu.setApplicationMenu(menu); // Обработчик для загрузки токена ipcMain.handle('load-token', async () => { console.log('load-token called'); token = loadToken(); //if (token) { mainWindow.webContents.send('token-loaded', { message: token }); // return token; }); // Обработчик для сохранения токена ipcMain.on('save-token', (event, token) => { console.log('save-token called'); saveToken(token); setupApiToken(token); mainWindow.webContents.send('token-loaded', { message: token }); }); // Обработчик для выхода (Logout) ipcMain.handle('logout', async () => { try { // Удаляем файл с токеном if (fs.existsSync(configPath)) { fs.unlinkSync(configPath); console.log('Token file deleted.'); } // Сбрасываем токен в null setupApiToken(null); // Отправляем событие в index.html с token=null mainWindow.webContents.send('token-loaded', { message: null }); return { success: true }; } catch (error) { console.error('Error during logout:', error); return { success: false, error: error.message }; } });