@@ -26,6 +26,12 @@ export class UsersController {
|
||||
await this.usersService.discordLogin(session);
|
||||
}
|
||||
|
||||
@Get('/logout')
|
||||
@Redirect(process.env.CLIENT_ENDPOINT)
|
||||
async logout(@Session() session: Record<string, any>): Promise<void> {
|
||||
await this.usersService.discordLogout(session);
|
||||
}
|
||||
|
||||
@Get('/whoami')
|
||||
async remove(@Session() session: Record<string, any>): Promise<LoginDto> {
|
||||
if (!session.tokenData) {
|
||||
|
||||
@@ -81,6 +81,23 @@ export class UsersService {
|
||||
};
|
||||
}
|
||||
|
||||
async revokeDiscordToken(refresh_token: string) {
|
||||
const body = new URLSearchParams({
|
||||
client_id: process.env.DISCORD_CLIENTID,
|
||||
client_secret: process.env.DISCORD_CLIENTSECRET,
|
||||
token: refresh_token,
|
||||
token_type_hint: 'refresh_token',
|
||||
});
|
||||
|
||||
const req = await fetch('https://discord.com/api/oauth2/token/revoke', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
body,
|
||||
});
|
||||
}
|
||||
|
||||
async discordLogin(
|
||||
session: Record<string, any>,
|
||||
recursive: boolean = false,
|
||||
@@ -126,7 +143,9 @@ export class UsersService {
|
||||
return user;
|
||||
}
|
||||
|
||||
remove(id: number) {
|
||||
return `This action removes a #${id} user`;
|
||||
async discordLogout(session: Record<string, any>) {
|
||||
this.revokeDiscordToken(session.tokenData.access_token);
|
||||
delete session.user;
|
||||
delete session.tokenData;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user