Backend/api/routes/session.ts

39 lines
1.6 KiB
TypeScript

import Router, {Request, Response} from 'express';
import {createTokenByCode, getUser} from "../../controller/discord";
import {User} from "../../models/User";
import {Token} from "../../models/Token";
const app = Router();
app.post("/create", async (req: Request, res: Response) => {
// Check if a code has been provided
if (!req.body.code) return res.status(400).json({message: "You need to provide a code"});
// Check if the provided token is valid
const token = await createTokenByCode(req.body.code).catch(() => undefined);
if (!token) return res.status(400).json({message: "The provided token is wrong"});
// Check if all scopes have been provided
const scopes = token.scope.split(" ");
if (!(scopes.includes("identify") && scopes.includes("guilds"))) return res.status(400).json({message: "The provided token is wrong"});
// Get user data
const userData = await getUser(token.access_token).catch(() => undefined);
if (!userData) return res.status(400).json({message: "The provided token is wrong"});
await User.upsert({
clientId: parseInt(userData.id), avatarId: userData.avatar === null ? undefined : userData.avatar,
locale: userData.locale, accessToken: token.access_token, refreshToken: token.refresh_token,
refreshDate: new Date(Date.now() + token.expires_in), username: userData.username
});
// Create token
const appToken = await Token.create({clientId: parseInt(userData.id), userAgent: req.headers['user-agent']});
// Return token
res.json({token: appToken.token});
});
// TODO: Route to delete a session & list all current sessions
module.exports = app;