import moment from "moment"; import { Connection } from "typeorm"; import { BaseRepository, Encryptor } from "@leal.api/api_utils"; import { ResponseModel, ComercioUsuarioRefreshToken } from "@leal.api/api_models"; import { IRefreshTokenRepository } from "../interfaces"; import { LoginViewModel, LoginModel } from "../models"; export class ComercioUsuarioRefreshTokenRepository extends BaseRepository implements IRefreshTokenRepository { encryptor: Encryptor; constructor(connection: Connection) { super(connection, ComercioUsuarioRefreshToken); this.encryptor = new Encryptor(); } async refresh_token( uidCms: string, refreshToken: string ): Promise> { try { let tokenExist = await this.repo.findOne({ uidCms: uidCms, refreshToken: refreshToken }); if (tokenExist) { let rToken = ( moment().unix() + this.encryptor.md5(uidCms + "-" + moment().unix()) ).toString(); try { let tokenExist = await this.repo.findOne({ uidCms: uidCms, refreshToken: refreshToken }); if (tokenExist) { let rToken = ( moment().unix() + this.encryptor.md5(uidCms + "-" + 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("", refreshToken)) ); let authToken = this.encryptor.createToken(tokenData); let loginViewModel = new LoginViewModel(authToken, rToken, uidCms); 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(uidCms, ""))); let authToken = this.encryptor.createToken(tokenData); let loginViewModel = new LoginViewModel(authToken, rToken, uidCms); 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( uidCms: string, refreshToken: string ): Promise> { try { let tokenExist = await this.repo.findOne({ uidCms: uidCms }); if (tokenExist) { try { let tokenExist = await this.repo.findOne({ uidCms: uidCms }); if (tokenExist) { try { await this.update(tokenExist.id, { refreshToken: refreshToken, fecha: new Date() }); } catch (error) { console.log("RefreshToken.update:error:", JSON.stringify(error)); } } else { try { await this.create( new ComercioUsuarioRefreshToken( uidCms, "127.0.0.1", refreshToken, 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("", refreshToken)) ); let authToken = this.encryptor.createToken(tokenData); let loginViewModel = new LoginViewModel( authToken, refreshToken, uidCms ); return new ResponseModel(100, loginViewModel); } catch (error) { console.log("RefreshToken.update:error:", JSON.stringify(error)); } } else { try { await this.create( new ComercioUsuarioRefreshToken( uidCms, "127.0.0.1", refreshToken, 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(uidCms, ""))); let authToken = this.encryptor.createToken(tokenData); let loginViewModel = new LoginViewModel(authToken, refreshToken, uidCms); return new ResponseModel(100, loginViewModel); } catch (error) { console.log("update_or_insert_refresh_token:catch:error:", error); return new ResponseModel(105, undefined, error); } } }