Skip to content
This repository has been archived by the owner on Dec 16, 2024. It is now read-only.

Commit

Permalink
Merge pull request #42 from TransbankDevelopers/chore/prepare-release…
Browse files Browse the repository at this point in the history
…-4.0.0

prepare release 4.0.0
  • Loading branch information
Matiasnickolas authored May 3, 2024
2 parents df205ab + 374c19a commit 6418306
Show file tree
Hide file tree
Showing 18 changed files with 659 additions and 206 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## [4.0.0] - 23-04-2024

Funciona con la versión 4.0.0 del [SDK Web](https://github.com/TransbankDevelopers/transbank-pos-sdk-web-js/releases)

### Changed

- Ahora el agente usa https, por lo que es necesario utilizar certificados para su funcionamiento. Puedes ver la guía para generarlos en [este documento](docs/Generacion-certificado.md).

## [3.1.4] - 24-09-2021

### Fixed
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ Solo se debe descargar y ejecutar para iniciar este servicio en el computador do

## ¿Cómo usar?
Descarga el ejecutable desde la [sección de releases](https://github.com/TransbankDevelopers/transbank-pos-sdk-web-client-nodejs/releases) y ejecutalo.
Una vez iniciada la aplicación por primera vez, se configurará automáticamente para arrancar al iniciar el computador.
Una vez iniciada la aplicación por primera vez, se configurará automáticamente para arrancar al iniciar el computador.

Ten en cuenta que desde la versión 4.0.0 del agente debes usar certificados para su ejecución. Para generarlos puedes revisar el manual [Generación de certificados para localhost](docs/Generacion-certificado.md).


# Inicio automático
Expand Down
Empty file added crt/.gitkeep
Empty file.
115 changes: 115 additions & 0 deletions docs/Generacion-certificado.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Certificados para localhost

Este archivo contiene las instrucciones para generar tu propio certificado autofirmado de localhost que se utilizará en la instalación del agente.
Para generar los archivos necesarios, debes disponer de una terminal y **OpenSSL** instalado. Los archivos de ejemplo de este manual se han generado con **OpenSSL 3.2.0**.

## Generar certificado root

Se debe primero generar un certificado root, que es el que se utilizará para firmar el resto de archivos que vamos a utilizar. Para ello debes ejecutar los siguientes comandos en tu terminal:

``` bash
#!/bin/bash
openssl genrsa -des3 -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 7300 -out rootCA.pem
```

Esto generará 2 archivos: **rootCA.key** y **rootCA.pem**

Se debe definir una clave y la información adicional que solicita para crear el certificado el certificado.

Es importante definir correctamente el **CN** del certificado, para este caso **localhost**.

Ejemplo de ejecución del comando:

``` bash
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 7300 -out rootCA.pem
Enter pass phrase for rootCA.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CL
State or Province Name (full name) [Some-State]:State
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Continuum
Organizational Unit Name (eg, section) []:TransbankDevelopers
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:[email protected]
```

## Agregar el certificado a la lista de confianza

Se debe agregar el certificado generado a la lista de confianza del equipo donde se vaya a utilizar.
Por ejemplo, para Windows y Chrome se puede realizar de la siguiente manera:

Ir a configuración del navegador -> privacidad y seguridad -> seguridad -> gestionar los certificados del dispositivo -> entidades de certificación raíz de confianza.

Desde ahí debes importar el certificado que creaste anteriormente (**rootCA.pem**).

Luego de importarlo, podrás verificar que existe en tu lista de certificados uno nuevo emitido por **localhost**.

## Crear certificado de dominio

Para crear nuestro certificado de dominio, utilizaremos 2 archivos de configuración que podremos modificar con cualquier editor de texto.

Crearemos primero un archivo llamado **server.csr.cnf**, que deberá tener la siguiente estructura:

```
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=CL
ST=Santiago
L=Santiago
O=Organization
OU=OrganizationUnit
[email protected]
CN = localhost
```

Personalizamos la sección **dn** con la información que utilizamos para la creación del primer certificado.

El segundo archivo a generar se llamará **v3.ext**.

Debe contener esta información:

```
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
```

Ahora podemos ejecutar estos comandos para crear el certificado de dominio para localhost.

```bash
#!/bin/bash
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout localhost.key -config server.csr.cnf
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out localhost.crt -days 825 -sha256 -extfile v3.ext
```

Como resultado de ejecutar ambos comandos, se habrán generado los archivos **localhost.key** y **localhost.crt**.

## Instalar certificado
Luego de haber generado ambos certificados, se deben instalar para el funcionamiento del agente. Para esto deberás copiarlos a la carpeta **'resources/crt'** de tu instalación del agente para POS.
Al iniciar el agente, si se han copiado correctamente se desplegará el siguiente mensaje:

![alt text](image.png)

Desde cualquier navegador podremos comprobar que el agente es reconocido como una conexión segura, accediendo al puerto que expone en el mensaje anterior a través de [https://localhost:8090](https://localhost:8090)

![alt text](image-1.png)

Si intentas iniciar el agente sin estos certificados obtendrás este error de ejecución:

![alt text](image-2.png)
Binary file added docs/image-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/image-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 14 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "transbank-pos-sdk-web-agent",
"productName": "Transbank POS Agent",
"version": "3.1.4",
"version": "4.0.0",
"description": "Agente para SDK Web de POS integrado",
"main": ".webpack/main",
"scripts": {
Expand All @@ -21,7 +21,10 @@
"forge": {
"packagerConfig": {
"icon": "src/assets/icons/icon",
"extraResource": "src/assets/trayIcons"
"extraResource": [
"src/assets/trayIcons",
"crt/"
]
},
"makers": [
{
Expand Down Expand Up @@ -89,11 +92,19 @@
},
"dependencies": {
"auto-launch": "^5.0.6",
"body-parser": "^1.20.2",
"cookie-parser": "^1.4.6",
"cors": "^2.8.5",
"csurf": "^1.11.0",
"electron-squirrel-startup": "^1.0.0",
"express": "4.17.3",
"fs": "^0.0.1-security",
"helmet": "^7.0.0",
"hpp": "^0.2.3",
"https": "^1.0.0",
"socket.io": "^2.5.0",
"spacetime": "^6.16.3",
"transbank-pos-sdk": "^2.1.2",
"transbank-pos-sdk": "^3.0.0",
"vue": "^2.6.14",
"vue-loader": "^15.9.8",
"vue-template-compiler": "^2.6.14"
Expand Down
33 changes: 29 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { app, BrowserWindow, ipcMain, Tray, Menu, nativeImage} from 'electron';
const AutoLaunch = require('auto-launch');
import { app, BrowserWindow, ipcMain, Tray, Menu, nativeImage, dialog, shell} from 'electron';
import path from 'path'
import pos from './pos'
import windowManager from "./classes/window-manager"
import {checkCertExists, getCrtPath} from './server/utils/certutils'

ipcMain.handle('connect-to-pos', (event, ...args) => {
pos.autoconnect().then((port) => {
if (port) {
Expand All @@ -12,7 +15,6 @@ ipcMain.handle('connect-to-pos', (event, ...args) => {
import Server from './server/app';
const server = new Server();

var AutoLaunch = require('auto-launch');
var autoLauncher = new AutoLaunch({
name: "MyApp"
});
Expand Down Expand Up @@ -56,7 +58,7 @@ const createWindow = (): BrowserWindow => {
width: 450,
icon: path.join(__dirname, '../../src/assets/icons/AppIcon.icns'),
webPreferences: {
nodeIntegration: true,
nodeIntegration: true
}
});

Expand Down Expand Up @@ -90,10 +92,33 @@ const createWindow = (): BrowserWindow => {

};

const handleStart = () => {

if ( checkCertExists() ) {
return createWindow();
}
const openPathOption = 0;
const selectedOption = dialog.showMessageBoxSync({
type: 'error',
title: 'Error de certificados',
message: `No se han encontrado los archivos de certificados. Debes copiarlos a la carpeta de destino e iniciar el agente nuevamente.`,
buttons: ['Abrir carpeta', 'Cerrar agente'],
cancelId: 1
});

if ( selectedOption == openPathOption ) {
shell.openPath(getCrtPath());
}

app.quit();

};


// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow);
app.on('ready', handleStart);

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
Expand Down
4 changes: 2 additions & 2 deletions src/pos.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { POS } from 'transbank-pos-sdk';
import { POSIntegrado } from "transbank-pos-sdk";

const pos = new POS();
const pos = new POSIntegrado();
pos.setDebug(true);

export default pos;
2 changes: 1 addition & 1 deletion src/renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ console.log('👋 This message is being logged by "renderer.js", included via we

new Vue({
el: '#app',
render: (h) => h(App),
render: (h) => h(App)
})
document.title = `Agente POS v${version} - Transbank`

Expand Down
Loading

0 comments on commit 6418306

Please sign in to comment.