import moment from "moment"; import { Connection } from "typeorm"; import { BaseRepository, Encryptor } from "@leal.api/api_utils"; import { ResponseModel, UsuarioRefreshToken } from "@leal.api/api_models"; import { IRefreshTokenRepository } from "../interfaces"; import { LoginViewModel, LoginModel } from "../models"; export class RefreshTokenRepository extends BaseRepository implements IRefreshTokenRepository { encryptor: Encryptor; constructor(connection: Connection) { super(connection, UsuarioRefreshToken); this.encryptor = new Encryptor(); } async refresh_token( uid: string, refresh_token: string ): Promise> { try { let tokenExist = await this.repo.findOne({ uid: uid, refreshToken: refresh_token }); console.log("refresh_token:tokenExist:", JSON.stringify(tokenExist)); if (tokenExist) { let rToken = ( moment().unix() + this.encryptor.md5(uid + "-" + moment().unix()) ).toString(); try { let tokenExist = await this.repo.findOne({ uid: uid, refreshToken: refresh_token }); console.log("refresh_token:tokenExist:", JSON.stringify(tokenExist)); if (tokenExist) { let rToken = ( moment().unix() + this.encryptor.md5(uid + "-" + moment().unix()) ).toString(); try { await this.update(tokenExist.id, { refreshToken: rToken, fecha: new Date() }); } catch (error) { console.log("refresh_token.update:error:", error); } //TODO: create "Plain Object" let tokenData = JSON.parse( JSON.stringify(new LoginModel("", refresh_token)) ); let authToken = this.encryptor.createToken(tokenData); let loginViewModel = new LoginViewModel(authToken, rToken, uid); return new ResponseModel( 100, loginViewModel, undefined ); } else { return new ResponseModel( 102, undefined, "No se encontraron resultados" ); } } catch (error) { console.log("refresh_token.update:error:", error); } //TODO: create "Plain Object" let tokenData = JSON.parse( JSON.stringify(new LoginModel("", refresh_token)) ); let authToken = this.encryptor.createToken(tokenData); let loginViewModel = new LoginViewModel(authToken, rToken, uid); return new ResponseModel( 100, loginViewModel, undefined ); } else { return new ResponseModel( 102, undefined, "No se encontraron resultados" ); } } catch (error) { console.log("refresh_token.catch:error:", error); return new ResponseModel(105, undefined, error); } } async update_or_insert_refresh_token( uid: string, refresh_token: string ): Promise> { try { let tokenExist = await this.repo.findOne({ uid: uid }); console.log( "update_or_insert_refresh_token:tokenExist:", JSON.stringify(tokenExist) ); if (tokenExist) { try { let tokenExist = await this.repo.findOne({ uid: uid }); console.log( "update_or_insert_refresh_token:tokenExist:", JSON.stringify(tokenExist) ); if (tokenExist) { try { await this.update(tokenExist.id, { refreshToken: refresh_token, fecha: new Date() }); } catch (error) { console.log("RefreshToken.update:error:", JSON.stringify(error)); } } else { try { await this.create( new UsuarioRefreshToken(uid, refresh_token, new Date(), 0) ); } catch (error) { console.log("RefreshToken.create:error:", JSON.stringify(error)); } } //TODO: create "Plain Object" let tokenData = JSON.parse( JSON.stringify(new LoginModel("", refresh_token)) ); let authToken = this.encryptor.createToken(tokenData); let loginViewModel = new LoginViewModel( authToken, refresh_token, uid ); return new ResponseModel(100, loginViewModel); } catch (error) { console.log("RefreshToken.update:error:", JSON.stringify(error)); } } else { try { await this.create( new UsuarioRefreshToken(uid, refresh_token, new Date(), 0) ); } catch (error) { console.log("RefreshToken.create:error:", JSON.stringify(error)); } } //TODO: create "Plain Object" let tokenData = JSON.parse( JSON.stringify(new LoginModel("", refresh_token)) ); let authToken = this.encryptor.createToken(tokenData); let loginViewModel = new LoginViewModel(authToken, refresh_token, uid); return new ResponseModel(100, loginViewModel); } catch (error) { console.log("update_or_insert_refresh_token:catch:error:", error); return new ResponseModel(105, undefined, error); } } }