From 54ee61d5376464b72333db84e712e1ac1bf94c27 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Tue, 12 Dec 2023 19:56:28 +0000 Subject: [PATCH] feat: return more info --- index.mjs | 104 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 59 insertions(+), 45 deletions(-) diff --git a/index.mjs b/index.mjs index 6f04f46..838010d 100644 --- a/index.mjs +++ b/index.mjs @@ -1,60 +1,74 @@ -import { config } from 'dotenv'; +import { config } from "dotenv"; config(); -import express from 'express'; -import jwt from 'jsonwebtoken'; -import { MongoClient } from 'mongodb'; +import express from "express"; +import jwt from "jsonwebtoken"; +import { MongoClient } from "mongodb"; const client = new MongoClient(process.env.MONGODB); const app = express(); -app.get('/', (_, res) => res.send('social login api\nsource code: https://git.revolt.chat/revolt/social-login-api')); +app.get("/", (_, res) => + res.send( + "social login api\nsource code: https://git.revolt.chat/revolt/social-login-api" + ) +); -app.get('/jwt', async (req, res) => { - const token = req.headers['x-session-token']; - if (typeof token === 'string') { - const session = await client.db('revolt') - .collection('sessions') - .findOne({ - token - }); +app.get("/jwt", async (req, res) => { + const token = req.headers["x-session-token"]; + if (typeof token === "string") { + const session = await client.db("revolt").collection("sessions").findOne({ + token, + }); - if (session) { - const user = await client.db('revolt') - .collection('users') - .findOne({ - _id: session.user_id - }); - - if (user) { - res.send(jwt.sign({ - id: user._id, - username: user.username - }, process.env.JWT_SECRET, { - expiresIn: '1h' - })); - } else { - res.status(400).send('No user.'); - } - } else { - res.status(403).send('No session.'); - } + if (session) { + const user = await client.db("revolt").collection("users").findOne({ + _id: session.user_id, + }); + + if (user) { + res.send( + jwt.sign( + { + id: user._id, + }, + process.env.JWT_SECRET + ) + ); + } else { + res.status(400).send("No user."); + } } else { - res.status(400).send('No token.'); + res.status(403).send("No session."); } + } else { + res.status(400).send("No token."); + } }); -app.post('/info', (req, res) => { - const token = req.headers['x-jwt']; - if (token) { - try { - res.send(jwt.verify(token, process.env.JWT_SECRET)); - } catch(err) { - res.status(400).send('Invalid JWT.'); - } - } else { - res.status(400).send('No token.'); +app.post("/info", async (req, res) => { + const token = req.headers["x-jwt"]; + if (token) { + try { + const { id } = jwt.verify(token, process.env.JWT_SECRET); + + const user = await client.db("revolt").collection("users").findOne({ + _id: id, + }); + + res.send({ + id: user._id, + username: user.username, + displayName: user.display_name, + discriminator: user.discriminator, + avatar: user.avatar?._id ?? null, + }); + } catch (err) { + res.status(400).send("Invalid JWT."); } + } else { + res.status(400).send("No token."); + } }); -app.listen(50003, () => console.info('listening on :50003')); +app.listen(50003, () => console.info("listening on :50003"));