import { config } from 'dotenv'; config(); 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('/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.'); } } 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.listen(50003, () => console.info('listening on :50003'));