Refactorizacion para permitir la inyeccion de dependencias en el
servicio de HTTP
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
// PEM ?
|
||||
|
||||
/**
|
||||
* TODO:
|
||||
* Está demasiado acoplado a objenious, hay que sacar un servicio jwt general para
|
||||
@@ -10,7 +8,9 @@ import { env } from "#config/env/index.js";
|
||||
import fs from "fs"
|
||||
|
||||
import {
|
||||
JWTToken
|
||||
JWTToken,
|
||||
JWTHeader,
|
||||
IJWTService
|
||||
} from "sim-shared/domain/JWT.js"
|
||||
import axios, { AxiosError } from "axios";
|
||||
|
||||
@@ -32,15 +32,6 @@ type TokensRequestResponse = {
|
||||
"scope": string
|
||||
}
|
||||
|
||||
type AuthHeaders = {
|
||||
content_type: string,
|
||||
sub: string,
|
||||
iss: string,
|
||||
aud: string,
|
||||
jti: string,
|
||||
iat: number,
|
||||
exp: number,
|
||||
}
|
||||
|
||||
const PRIVATE_KEY_PATH = env.OBJ_PEM_PATH
|
||||
|
||||
@@ -64,7 +55,7 @@ const DEFAULT_HEADERS = {
|
||||
}
|
||||
|
||||
function addIATHeaders(authHeaders: Object) {
|
||||
const headers = <AuthHeaders>{
|
||||
const headers = <JWTHeader>{
|
||||
...authHeaders,
|
||||
sub: env.OBJ_CLIENT_ID,
|
||||
iss: env.OBJ_CLIENT_ID,
|
||||
@@ -76,6 +67,7 @@ function addIATHeaders(authHeaders: Object) {
|
||||
return headers
|
||||
}
|
||||
|
||||
export type ObjeniousTokenBody = any
|
||||
|
||||
/**
|
||||
* El servicio gestiona un par de tokens auth - refresh para las
|
||||
@@ -85,10 +77,10 @@ function addIATHeaders(authHeaders: Object) {
|
||||
* Debe tener un cliente HTTP propio para que no le afecten los
|
||||
* interceptores, sino puede haber bucles de refresco de token
|
||||
*/
|
||||
export class JWTService {
|
||||
export class JWTService implements IJWTService<ObjeniousTokenBody> {
|
||||
public isRefreshing: boolean = false;
|
||||
public authToken: JWTToken<{}> | undefined
|
||||
private refreshToken?: JWTToken<{}>
|
||||
public authToken: JWTToken<ObjeniousTokenBody> | undefined;
|
||||
private refreshToken?: JWTToken<ObjeniousTokenBody> | undefined;
|
||||
|
||||
constructor(args?: {
|
||||
token?: string // si se partiese de un token existente,
|
||||
@@ -122,7 +114,7 @@ export class JWTService {
|
||||
return token
|
||||
}
|
||||
|
||||
public async getNewTokens() {
|
||||
public async getNewAuthToken() {
|
||||
const bodyWithtoken = {
|
||||
...DEFAULT_BODY,
|
||||
client_assertion: this.buildJwtBody()
|
||||
@@ -139,8 +131,8 @@ export class JWTService {
|
||||
let res;
|
||||
try {
|
||||
res = (await req).data as TokensRequestResponse;
|
||||
this.authToken = new JWTToken(res.access_token)
|
||||
this.refreshToken = new JWTToken(res.refresh_token)
|
||||
this.authToken = new JWTToken<ObjeniousTokenBody>(res.access_token)
|
||||
this.refreshToken = new JWTToken<ObjeniousTokenBody>(res.refresh_token)
|
||||
return this.authToken
|
||||
} catch (e) {
|
||||
const errorString = "No se ha podido conseguir el token de acceso de OBJENIOUS"
|
||||
@@ -163,7 +155,7 @@ export class JWTService {
|
||||
}
|
||||
|
||||
// Caso 3: Ningún token es valido
|
||||
await this.getNewTokens()
|
||||
await this.getNewAuthToken()
|
||||
|
||||
if (this.authToken == undefined) throw new Error("Error obteniendo tokens de auth")
|
||||
|
||||
@@ -190,8 +182,8 @@ export class JWTService {
|
||||
let res;
|
||||
try {
|
||||
res = (await req).data as TokensRequestResponse;
|
||||
this.authToken = new JWTToken(res.access_token)
|
||||
this.refreshToken = new JWTToken(res.refresh_token)
|
||||
this.authToken = new JWTToken<ObjeniousTokenBody>(res.access_token)
|
||||
this.refreshToken = new JWTToken<ObjeniousTokenBody>(res.refresh_token)
|
||||
return this.authToken
|
||||
} catch (e) {
|
||||
const errorString = "No se ha podido conseguir el token de acceso de OBJENIOUS"
|
||||
|
||||
Reference in New Issue
Block a user