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, 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;