import { User } from './schema';
import * as uuid from 'uuid';
const API_ENDPOINT = 'https://discord.com/api/v6';
const axios = require('axios').default;
export function run(app) {
app.get('/discordauth', async (req, res) => {
const code = req.query.code;
if (code) {
try {
const data = new URLSearchParams({
client_id: process.env.DISCORD_OAUTH_CLIENTID,
client_secret: process.env.DISCORD_OAUTH_CLIENTSECRET,
grant_type: 'authorization_code',
code: code,
redirect_uri: 'http://localhost:8080/discordauth',
scope: 'identify'
});
const postRes = await axios.post(`${API_ENDPOINT}/oauth2/token`, data, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
const userInfo = await axios.get(`${API_ENDPOINT}/users/@me`, {
headers: {
authorization: `${postRes.data.token_type} ${postRes.data.access_token}`
}
});
const users = await User.find({id: userInfo.id});
let userUuid = '';
if (users.length === 0) {
const newUser = new User({
id: userInfo.id,
createdAt: new Date(),
username: userInfo.data.username,
discriminator: userInfo.data.discriminator,
avatar: userInfo.data.avatar,
uuid: uuid.v4(),
});
userUuid = newUser.get('uuid');
newUser.save();
} else {
userUuid = users[0].get('uuid');
}
req.session!.discord = userInfo.data;
req.session!.uuid = userUuid;
res.send(`hi ${userInfo.data.username}#${userInfo.data.discriminator}
ur useruuid is ${userUuid}`);
} catch(err) {
res.send(`whoooops
${err}`);
}
} else {
const url = `http://${req.headers.host}/discordauth`;
res.send(`Click here!!`);
}
});
}