Cleanup: Renamed the creation folder to the more fitting "actions"
ref #11 #13
This commit is contained in:
35
src/models/actions/HandleLogout.ts
Normal file
35
src/models/actions/HandleLogout.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { IsString } from 'class-validator';
|
||||
import * as jsonwebtoken from 'jsonwebtoken';
|
||||
import { getConnectionManager } from 'typeorm';
|
||||
import { IllegalJWTError, JwtNotProvidedError, RefreshTokenCountInvalidError, UserNotFoundError } from '../../errors/AuthError';
|
||||
import { User } from '../entities/User';
|
||||
import { Logout } from '../responses/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.timestamp = Math.floor(Date.now() / 1000)
|
||||
let found_user: 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()
|
||||
}
|
||||
found_user.refreshTokenCount++;
|
||||
await getConnectionManager().get().getRepository(User).update({ id: found_user.id }, found_user)
|
||||
return logout;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user