Ajuste deeplink
This commit is contained in:
@@ -5,6 +5,7 @@ const pie = require("puppeteer-in-electron")
|
||||
const puppeteer = require("puppeteer-core");
|
||||
const path = require('path');
|
||||
const https = require('https');
|
||||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
||||
const axios = require('axios');
|
||||
const $ = require('jquery');
|
||||
const fs = require('fs');
|
||||
@@ -51,8 +52,6 @@ app.disableHardwareAcceleration();
|
||||
|
||||
pie.initialize(app);
|
||||
|
||||
const agent = new HttpsProxyAgent(CONFIG.PROXY);
|
||||
|
||||
const setupLogging = async () => {
|
||||
console.log(">> Iniciando configuracion de logs..");
|
||||
if (!fs.existsSync(logsDir)) {
|
||||
@@ -91,6 +90,7 @@ const setupLogging = async () => {
|
||||
|
||||
async function getOkanToken() {
|
||||
try {
|
||||
const agent = new HttpsProxyAgent(CONFIG.PROXY);
|
||||
const responseOkan = await axios.post(CONFIG.ENDPOINT_OKAN_TOKEN, { user: process.env.USUARIO }, {
|
||||
headers: { 'Authorization': CONFIG.TOKEN_OKAN_USER },
|
||||
httpsAgent: agent
|
||||
@@ -121,15 +121,28 @@ const processArguments = async () => {
|
||||
let url_okan = argv['_'];
|
||||
let code_okan_str = url_okan.toString();
|
||||
|
||||
// Handle OKAN code from URL or direct argument
|
||||
if (argv['_'] && !argv.dev) {
|
||||
console.log(code_okan_str);
|
||||
|
||||
// Handle OKAN code from URL or direct argument
|
||||
if (code_okan_str != '' && !argv.dev) {
|
||||
console.log('sika desde okan');
|
||||
let code_okan = code_okan_str.split('&')[0].replace('rpaclaro:///?code=', '');
|
||||
let user_okan = code_okan_str.split('&')[1].replace('user=', '');
|
||||
process.env.OKAN = code_okan;
|
||||
process.env.USUARIO = user_okan;
|
||||
from_okan = true;
|
||||
} else if (code_okan_str == '' && argv['$0'] && argv['$0'].includes('RpaClaro.exe')) {
|
||||
console.log('sika desde exe');
|
||||
await dialog.showMessageBox({
|
||||
type: 'error',
|
||||
defaultId: 0,
|
||||
title: 'Error de acceso',
|
||||
message: 'Debes abrir RpaClaro desde Okan',
|
||||
});
|
||||
app.quit();
|
||||
return null;
|
||||
} else {
|
||||
console.log('sika desde cli');
|
||||
process.env.OKAN = argv.code;
|
||||
process.env.USUARIO = argv.user;
|
||||
}
|
||||
@@ -151,14 +164,35 @@ const processArguments = async () => {
|
||||
};
|
||||
|
||||
const setupProtocolClient = async () => {
|
||||
if (process.defaultApp) {
|
||||
if (process.argv.length >= 2) {
|
||||
app.setAsDefaultProtocolClient('RpaClaro', process.execPath, [path.resolve(process.argv[1])])
|
||||
// Get the path to the packaged executable
|
||||
const exePath = process.env.PORTABLE_EXECUTABLE_FILE || app.getPath('exe');
|
||||
|
||||
try {
|
||||
// For development environment
|
||||
if (process.defaultApp) {
|
||||
if (process.argv.length >= 2) {
|
||||
app.setAsDefaultProtocolClient('RpaClaro', process.execPath, [path.resolve(process.argv[1])]);
|
||||
}
|
||||
} else {
|
||||
// For packaged executable
|
||||
// Remove any existing protocol registration first
|
||||
app.removeAsDefaultProtocolClient('RpaClaro');
|
||||
|
||||
// Register the protocol with the packaged exe path
|
||||
const success = app.setAsDefaultProtocolClient('RpaClaro', exePath);
|
||||
|
||||
if (!success) {
|
||||
throw new Error('Failed to register protocol handler');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
app.setAsDefaultProtocolClient('RpaClaro')
|
||||
|
||||
console.log('>> Protocol configuration established successfully');
|
||||
console.log('>> Executable path:', exePath);
|
||||
} catch (error) {
|
||||
console.error('>> Error setting up protocol client:', error);
|
||||
// Attempt to register without arguments as fallback
|
||||
app.setAsDefaultProtocolClient('RpaClaro');
|
||||
}
|
||||
console.log('>> Configuracion de protocolos establecida.');
|
||||
}
|
||||
|
||||
const copyFilesFromRR = () => {
|
||||
@@ -187,7 +221,12 @@ const copyFilesFromRR = () => {
|
||||
|
||||
async function getOkanToken() {
|
||||
try {
|
||||
const responseOkan = await axios.post(CONFIG.ENDPOINT_OKAN_TOKEN, { user: process.env.USUARIO }, { headers: { 'Authorization': CONFIG.TOKEN_OKAN_USER } });
|
||||
const agent = new HttpsProxyAgent(CONFIG.PROXY);
|
||||
|
||||
const responseOkan = await axios.post(CONFIG.ENDPOINT_OKAN_TOKEN, { user: '45957768' }, {
|
||||
headers: { 'Authorization': CONFIG.TOKEN_OKAN_USER },
|
||||
httpsAgent: agent
|
||||
});
|
||||
if (responseOkan.data.cod == '0') {
|
||||
console.log('>> Token de Okan obtenido.');
|
||||
return responseOkan.data.data;
|
||||
@@ -212,7 +251,12 @@ async function getProfile(token) {
|
||||
const token_okan = 'Bearer ' + token;
|
||||
|
||||
try {
|
||||
const responseGetProfile = await axios.get(CONFIG.ENDPOINT_GET_PROFILE, { headers: { 'Authorization': token_okan } });
|
||||
const agent_two = new HttpsProxyAgent(CONFIG.PROXY);
|
||||
|
||||
const responseGetProfile = await axios.get(CONFIG.ENDPOINT_GET_PROFILE, {
|
||||
headers: { 'Authorization': token_okan },
|
||||
httpsAgent: agent_two
|
||||
});
|
||||
if (responseGetProfile.data.cod == '0') {
|
||||
documento = responseGetProfile.data.data.document_number;
|
||||
profile = responseGetProfile.data.data.profile.id;
|
||||
@@ -226,59 +270,87 @@ async function getProfile(token) {
|
||||
|
||||
async function getApps(data_apps_user) {
|
||||
try {
|
||||
const agent_three = new HttpsProxyAgent(CONFIG.PROXY);
|
||||
|
||||
const urlAplicativos = CONFIG.ENDPOINT_GET_APPS + `${documento}/${profile}`;
|
||||
const responseAplicativos = await axios.get(urlAplicativos, { headers: { "Accept": "*/*", "Content-Type": "application/json" } });
|
||||
// First attempt with proxy
|
||||
try {
|
||||
const urlAplicativos = CONFIG.ENDPOINT_GET_APPS + `${documento}/${profile}`;
|
||||
const responseAplicativos = await axios.get(urlAplicativos, {
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
httpsAgent: agent_three,
|
||||
timeout: 30000
|
||||
});
|
||||
|
||||
var apps_okan = [];
|
||||
if (responseAplicativos.data['cod'] == '0') {
|
||||
|
||||
const new_apps = responseAplicativos.data['data']
|
||||
.filter(element => element['nombre_app'].startsWith('RPA'))
|
||||
.sort((a, b) => a.nombre_app.localeCompare(b.nombre_app));
|
||||
|
||||
console.log('>> Aplicativos Okan: ' + new_apps.length);
|
||||
|
||||
// Process each app from new_apps
|
||||
for (const app of new_apps) {
|
||||
let code = app.url.replace('rpaclaro://?code=', '');
|
||||
code = code.replace('RpaClaro://?code=', '');
|
||||
code = code.replace('&user={user}', '');
|
||||
let appExists = data_apps_user.desk?.some(deskApp => deskApp.code === code) || data_apps_user.web?.some(webApp => webApp.code === code);
|
||||
|
||||
const appInfo = {
|
||||
nombre_app: app.nombre_app,
|
||||
code_app: code,
|
||||
logo: app.logo,
|
||||
status: appExists,
|
||||
status_integrado: appExists ? 'integrado' : 'no_integrado',
|
||||
};
|
||||
|
||||
apps_okan.push(appInfo);
|
||||
|
||||
// Generate HTML for all apps at once using map and join
|
||||
appHtml = apps_okan.map(app => `
|
||||
<div class="col-3 col-md-3 col-xl-3 shortcut app_click ${app.status_integrado}"
|
||||
name_app="${app.nombre_app}"
|
||||
integrado="${app.status}"
|
||||
code="${app.code_app}">
|
||||
<div class="card border-none text-center">
|
||||
<div class="card-body hp-knowledge-basic-card">
|
||||
<img src="${app.logo}" class="logo">
|
||||
<h5>${app.nombre_app}</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`).join('');
|
||||
if (responseAplicativos.data['cod'] == '0') {
|
||||
return processAppsResponse(responseAplicativos.data, data_apps_user);
|
||||
}
|
||||
} catch (proxyError) {
|
||||
console.log('>> Attempting without proxy after proxy error:', proxyError.message);
|
||||
|
||||
return appHtml;
|
||||
// Second attempt without proxy
|
||||
const urlAplicativos = CONFIG.ENDPOINT_GET_APPS + `${documento}/${profile}`;
|
||||
const responseAplicativos = await axios.get(urlAplicativos, {
|
||||
headers: {
|
||||
"Accept": "*/*",
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
timeout: 30000
|
||||
});
|
||||
|
||||
if (responseAplicativos.data['cod'] == '0') {
|
||||
return processAppsResponse(responseAplicativos.data, data_apps_user);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('>> Error al obtener aplicaciones:' + e);
|
||||
console.log('>> Error al obtener aplicaciones: ' + e);
|
||||
}
|
||||
}
|
||||
|
||||
// Helper function to process the apps response
|
||||
function processAppsResponse(responseData, data_apps_user) {
|
||||
var apps_okan = [];
|
||||
const new_apps = responseData['data']
|
||||
.filter(element => element['nombre_app'].startsWith('RPA'))
|
||||
.sort((a, b) => a.nombre_app.localeCompare(b.nombre_app));
|
||||
|
||||
console.log('>> Aplicativos Okan: ' + new_apps.length);
|
||||
|
||||
// Process each app from new_apps
|
||||
for (const app of new_apps) {
|
||||
let code = app.url.replace('rpaclaro://?code=', '');
|
||||
code = code.replace('RpaClaro://?code=', '');
|
||||
code = code.replace('&user={user}', '');
|
||||
let appExists = data_apps_user.desk?.some(deskApp => deskApp.code === code) ||
|
||||
data_apps_user.web?.some(webApp => webApp.code === code);
|
||||
|
||||
apps_okan.push({
|
||||
nombre_app: app.nombre_app,
|
||||
code_app: code,
|
||||
logo: app.logo,
|
||||
status: appExists,
|
||||
status_integrado: appExists ? 'integrado' : 'no_integrado',
|
||||
});
|
||||
}
|
||||
|
||||
// Generate HTML for all apps
|
||||
return apps_okan.map(app => `
|
||||
<div class="col-3 col-md-3 col-xl-3 shortcut app_click ${app.status_integrado}"
|
||||
name_app="${app.nombre_app}"
|
||||
integrado="${app.status}"
|
||||
code="${app.code_app}">
|
||||
<div class="card border-none text-center">
|
||||
<div class="card-body hp-knowledge-basic-card">
|
||||
<img src="${app.logo}" class="logo">
|
||||
<h5>${app.nombre_app}</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
async function getNetworkInfo() {
|
||||
const interfaces = os.networkInterfaces();
|
||||
let ipAddress = '';
|
||||
@@ -302,6 +374,7 @@ async function getNetworkInfo() {
|
||||
|
||||
async function getUserData(token) {
|
||||
try {
|
||||
const agent_four = new HttpsProxyAgent(CONFIG.PROXY);
|
||||
const networkInfo = await getNetworkInfo();
|
||||
console.log('>> Usuario: ' + process.env.USUARIO);
|
||||
console.log('>> IP: ' + networkInfo.ip);
|
||||
@@ -323,7 +396,8 @@ async function getUserData(token) {
|
||||
});
|
||||
|
||||
const response = await axios.post(CONFIG.ENDPOINT_URL_APPS, bodyContent, {
|
||||
headers: headersList
|
||||
headers: headersList,
|
||||
httpsAgent: agent_four
|
||||
});
|
||||
return response.data.apps;
|
||||
} catch (error) {
|
||||
@@ -335,98 +409,110 @@ async function createMainWindow(appsOkan) {
|
||||
mainWindow = new BrowserWindow({
|
||||
width: 1200,
|
||||
height: 650,
|
||||
show: false,
|
||||
show: true,
|
||||
// frame: false, // Remove window frame/menu
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
contextIsolation: false
|
||||
},
|
||||
});
|
||||
|
||||
mainWindow.loadFile('./views/main/index.html');
|
||||
const webContents = mainWindow.webContents;
|
||||
webContents.setMaxListeners(50);
|
||||
await mainWindow.loadFile('./views/main/index.html');
|
||||
const menuTemplate = [
|
||||
{
|
||||
label: 'Archivo',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Recargar',
|
||||
accelerator: 'Ctrl+Shift+R',
|
||||
icon: __dirname + '/views/assets/icons/reload.png', // Ruta al icono
|
||||
click: () => {
|
||||
mainWindow.webContents.reloadIgnoringCache();
|
||||
}
|
||||
},
|
||||
{ type: 'separator' }, // Separador en el menú
|
||||
{
|
||||
label: 'Salir',
|
||||
accelerator: 'Ctrl+Q',
|
||||
icon: __dirname + '/views/assets/icons/exit.png', // Ruta al icono
|
||||
click: () => {
|
||||
app.quit();
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Ayuda',
|
||||
submenu: [
|
||||
// {
|
||||
// label: 'Mostrar DevTools',
|
||||
// accelerator: 'Ctrl+Shift+L',
|
||||
// icon: __dirname + '/views/assets/icons/screenshot.png', // Ruta al icono
|
||||
// click: () => {
|
||||
|
||||
webContents.on('did-stop-loading', () => {
|
||||
console.log('>> Vista main cargada');
|
||||
});
|
||||
// mainWindow.openDevTools();
|
||||
// }
|
||||
// },
|
||||
// { type: 'separator' },
|
||||
{
|
||||
label: 'Acerca de',
|
||||
accelerator: 'Ctrl+Shift+A',
|
||||
icon: __dirname + '/views/assets/icons/reload.png', // Ruta al icono
|
||||
click: () => {
|
||||
const { version } = require('./package.json'); // Obtener la versión desde package.json
|
||||
dialog.showMessageBox({
|
||||
type: 'info',
|
||||
title: 'Acerca de Mi Aplicación',
|
||||
message: `Versión ${version}`,
|
||||
});
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
const menu = Menu.buildFromTemplate(menuTemplate);
|
||||
mainWindow.setMenu(menu);
|
||||
mainWindow.maximize();
|
||||
|
||||
if (process.env.MODE == 'dev') {
|
||||
mainWindow.show();
|
||||
mainWindow.openDevTools();
|
||||
// mainWindow.setKiosk(true);
|
||||
}
|
||||
// const webContents = mainWindow.webContents;
|
||||
// webContents.setMaxListeners(50);
|
||||
|
||||
mainWindow.webContents.send('set-version', app_version);
|
||||
mainWindow.webContents.send('set-userpc', process.env.USUARIO);
|
||||
try {
|
||||
mainWindow.webContents.send('data-apps', appsOkan);
|
||||
} catch (e) {
|
||||
console.log('>> Error al enviar datos:' + e);
|
||||
}
|
||||
|
||||
|
||||
// webContents.on('did-stop-loading', () => {
|
||||
// console.log('>> Vista main cargada');
|
||||
// });
|
||||
|
||||
|
||||
|
||||
mainWindow.on('ready-to-show', () => {
|
||||
mainWindow.webContents.send('set-version', app_version);
|
||||
mainWindow.webContents.send('set-userpc', process.env.USUARIO);
|
||||
try {
|
||||
mainWindow.webContents.send('data-apps', appsOkan);
|
||||
} catch (e) {
|
||||
console.log('>> Error al enviar datos:' + e);
|
||||
}
|
||||
|
||||
const menuTemplate = [
|
||||
{
|
||||
label: 'Archivo',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Recargar',
|
||||
accelerator: 'Ctrl+Shift+R',
|
||||
icon: __dirname + '/views/assets/icons/reload.png', // Ruta al icono
|
||||
click: () => {
|
||||
mainWindow.webContents.reloadIgnoringCache();
|
||||
}
|
||||
},
|
||||
{ type: 'separator' }, // Separador en el menú
|
||||
{
|
||||
label: 'Salir',
|
||||
accelerator: 'Ctrl+Q',
|
||||
icon: __dirname + '/views/assets/icons/exit.png', // Ruta al icono
|
||||
click: () => {
|
||||
app.quit();
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Ayuda',
|
||||
submenu: [
|
||||
// {
|
||||
// label: 'Mostrar DevTools',
|
||||
// accelerator: 'Ctrl+Shift+L',
|
||||
// icon: __dirname + '/views/assets/icons/screenshot.png', // Ruta al icono
|
||||
// click: () => {
|
||||
|
||||
// mainWindow.openDevTools();
|
||||
// }
|
||||
// },
|
||||
// { type: 'separator' },
|
||||
{
|
||||
label: 'Acerca de',
|
||||
accelerator: 'Ctrl+Shift+A',
|
||||
icon: __dirname + '/views/assets/icons/reload.png', // Ruta al icono
|
||||
click: () => {
|
||||
const { version } = require('./package.json'); // Obtener la versión desde package.json
|
||||
dialog.showMessageBox({
|
||||
type: 'info',
|
||||
title: 'Acerca de Mi Aplicación',
|
||||
message: `Versión ${version}`,
|
||||
});
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
const menu = Menu.buildFromTemplate(menuTemplate);
|
||||
mainWindow.show();
|
||||
mainWindow.setMenu(menu);
|
||||
mainWindow.maximize();
|
||||
// mainWindow.show();
|
||||
// mainWindow.setMenu(menu);
|
||||
// mainWindow.maximize();
|
||||
});
|
||||
|
||||
mainWindow.on('closed', function () {
|
||||
mainWindow = null;
|
||||
app.quit();
|
||||
});
|
||||
|
||||
mainWindow.show();
|
||||
|
||||
return mainWindow;
|
||||
}
|
||||
|
||||
async function createNewWindow() {
|
||||
@@ -451,30 +537,38 @@ async function createNewWindow() {
|
||||
|
||||
windowNew.setMenu(null);
|
||||
|
||||
windowNew.loadURL('https://google.com');
|
||||
windowNew.loadURL('https://apps.okan.tools');
|
||||
|
||||
return 'test';
|
||||
|
||||
}
|
||||
|
||||
const mainIni = async () => {
|
||||
await setupProtocolClient();
|
||||
await setupLogging();
|
||||
await processArguments();
|
||||
await setupProtocolClient();
|
||||
copyFilesFromRR();
|
||||
let getOkanTokenVal = await getOkanToken();
|
||||
console.log('Okan token: ' + getOkanTokenVal);
|
||||
await getProfile(getOkanTokenVal);
|
||||
userDataApps = await getUserData(getOkanTokenVal);
|
||||
console.log('>> Aplicaciones:' + userDataApps);
|
||||
appsOkan = await getApps(userDataApps);
|
||||
console.log('>> Html generado');
|
||||
|
||||
await createMainWindow(appsOkan);
|
||||
let mainWindowInstance = await createMainWindow(appsOkan);
|
||||
console.log(mainWindowInstance);
|
||||
await createNewWindow();
|
||||
// mainWindow.webContents.on('did-finish-load', async () => {
|
||||
console.log('termino de cargar');
|
||||
// try {
|
||||
await rpa(process.env.OKAN);
|
||||
// if(from_okan){
|
||||
// console.log('>> Iniciando RPA desde Okan');
|
||||
// console.log('>> Codigo:'+ process.env.OKAN);
|
||||
// await rpa(process.env.OKAN);
|
||||
// } catch(e) {
|
||||
// console.log('oka error: '+e);
|
||||
// }
|
||||
// });
|
||||
|
||||
|
||||
};
|
||||
|
||||
async function rpa(data_code) {
|
||||
@@ -536,12 +630,28 @@ async function rpa(data_code) {
|
||||
windowNew.setIgnoreMouseEvents(false);
|
||||
}
|
||||
|
||||
await new Promise(resolve => {
|
||||
windowNew.webContents.on('did-finish-load', resolve);
|
||||
});
|
||||
try {
|
||||
await Promise.race([
|
||||
new Promise(resolve => {
|
||||
windowNew.webContents.on('did-finish-load', resolve);
|
||||
}),
|
||||
new Promise((_, reject) =>
|
||||
setTimeout(() => reject(new Error('Timeout loading page')), 30000)
|
||||
)
|
||||
]);
|
||||
|
||||
page = await pie.getPage(browser, windowNew);
|
||||
console.log('>> URL cargada: ' + page.url());
|
||||
page = await pie.getPage(browser, windowNew);
|
||||
if (!page) {
|
||||
throw new Error('Failed to get page');
|
||||
}
|
||||
console.log('>> URL cargada: ' + page.url());
|
||||
} catch (error) {
|
||||
console.log('>> Error al cargar la página:', error.message);
|
||||
if (windowNew && !windowNew.isDestroyed()) {
|
||||
windowNew.close();
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`>> Tipo: ${type}`);
|
||||
@@ -1167,28 +1277,28 @@ if (!gotTheLock) {
|
||||
process.env.MODE = 'prod';
|
||||
let url_okan = argv[3];
|
||||
let code_okan_str = url_okan.toString();
|
||||
|
||||
|
||||
// Handle OKAN code from URL or direct argument
|
||||
if (argv[3] && !argv.dev) {
|
||||
|
||||
|
||||
let code_okan = code_okan_str.split('&')[0].replace('rpaclaro:///?code=', '');
|
||||
let user_okan = code_okan_str.split('&')[1].replace('user=', '');
|
||||
process.env.OKAN = code_okan;
|
||||
process.env.USUARIO = user_okan;
|
||||
console.log('>> Sgundos instancia code: '+process.env.OKAN);
|
||||
console.log('>> Sgundos instancia code: ' + process.env.OKAN);
|
||||
await rpa(process.env.OKAN);
|
||||
} else {
|
||||
process.env.OKAN = argv.code;
|
||||
process.env.USUARIO = argv.user;
|
||||
}
|
||||
|
||||
|
||||
// Set environment mode
|
||||
if (argv.dev) {
|
||||
process.env.MODE = 'dev';
|
||||
} else {
|
||||
process.env.MODE = 'prod';
|
||||
}
|
||||
|
||||
|
||||
console.log('>> Iniciando RpaClaro..');
|
||||
console.log('_____________________________');
|
||||
console.log('RPA CLARO');
|
||||
@@ -1234,7 +1344,7 @@ ipcMain.on('show-help', () => {
|
||||
dialog.showMessageBox({
|
||||
type: 'info',
|
||||
title: 'Acerca de Mi Aplicación',
|
||||
message: `Versión `+app.getVersion(),
|
||||
message: `Versión ` + app.getVersion(),
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user