33
src/models/creation/HandleLogout.ts
Normal file
33
src/models/creation/HandleLogout.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { IsString } from 'class-validator';
|
||||
import * as jsonwebtoken from 'jsonwebtoken';
|
||||
import { IllegalJWTError, JwtNotProvidedError } from '../../errors/AuthError';
|
||||
import { Logout } from '../entities/Logout';
|
||||
|
||||
export class HandleLogout {
|
||||
@IsString()
|
||||
token: string;
|
||||
|
||||
public async logout(): Promise<Logout> {
|
||||
let logout: Logout = new Logout();
|
||||
if (!this.token || this.token === undefined) {
|
||||
throw new JwtNotProvidedError()
|
||||
}
|
||||
let decoded
|
||||
try {
|
||||
decoded = jsonwebtoken.verify(this.token, 'securekey')
|
||||
} catch (error) {
|
||||
throw new IllegalJWTError()
|
||||
}
|
||||
logout.access_token = this.token
|
||||
logout.timestamp = Math.floor(Date.now() / 1000)
|
||||
// const found_user = await getConnectionManager().get().getRepository(User).findOne({ id: decoded["userid"] });
|
||||
// if (!found_user) {
|
||||
// throw new UserNotFoundError()
|
||||
// }
|
||||
// if (found_user.refreshTokenCount !== decoded["refreshtokencount"]) {
|
||||
// throw new RefreshTokenCountInvalidError()
|
||||
// }
|
||||
// TODO: increment refreshtokencount WHERE userid===userid && refreshtokencount===refreshtokencount
|
||||
return logout;
|
||||
}
|
||||
}
|
||||
17
src/models/entities/Logout.ts
Normal file
17
src/models/entities/Logout.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { IsString } from 'class-validator';
|
||||
|
||||
/**
|
||||
* Defines a Logout object
|
||||
*/
|
||||
export class Logout {
|
||||
/**
|
||||
* access_token - JWT shortterm access token
|
||||
*/
|
||||
@IsString()
|
||||
access_token: string;
|
||||
/**
|
||||
* timestamp of logout
|
||||
*/
|
||||
@IsString()
|
||||
timestamp: number;
|
||||
}
|
||||
Reference in New Issue
Block a user