feat: return more info

master
Paul Makles 2023-12-12 19:56:28 +00:00
parent 07dcb9b529
commit 54ee61d537
1 changed files with 59 additions and 45 deletions

104
index.mjs
View File

@ -1,60 +1,74 @@
import { config } from 'dotenv'; import { config } from "dotenv";
config(); config();
import express from 'express'; import express from "express";
import jwt from 'jsonwebtoken'; import jwt from "jsonwebtoken";
import { MongoClient } from 'mongodb'; import { MongoClient } from "mongodb";
const client = new MongoClient(process.env.MONGODB); const client = new MongoClient(process.env.MONGODB);
const app = express(); 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) => { app.get("/jwt", async (req, res) => {
const token = req.headers['x-session-token']; const token = req.headers["x-session-token"];
if (typeof token === 'string') { if (typeof token === "string") {
const session = await client.db('revolt') const session = await client.db("revolt").collection("sessions").findOne({
.collection('sessions') token,
.findOne({ });
token
});
if (session) { if (session) {
const user = await client.db('revolt') const user = await client.db("revolt").collection("users").findOne({
.collection('users') _id: session.user_id,
.findOne({ });
_id: session.user_id
}); if (user) {
res.send(
if (user) { jwt.sign(
res.send(jwt.sign({ {
id: user._id, id: user._id,
username: user.username },
}, process.env.JWT_SECRET, { process.env.JWT_SECRET
expiresIn: '1h' )
})); );
} else { } else {
res.status(400).send('No user.'); res.status(400).send("No user.");
} }
} else {
res.status(403).send('No session.');
}
} else { } 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) => { app.post("/info", async (req, res) => {
const token = req.headers['x-jwt']; const token = req.headers["x-jwt"];
if (token) { if (token) {
try { try {
res.send(jwt.verify(token, process.env.JWT_SECRET)); const { id } = jwt.verify(token, process.env.JWT_SECRET);
} catch(err) {
res.status(400).send('Invalid JWT.'); const user = await client.db("revolt").collection("users").findOne({
} _id: id,
} else { });
res.status(400).send('No token.');
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"));