2020-10-12 00:27:47 +00:00
import { User } from './schema' ;
import * as uuid from 'uuid' ;
2020-09-03 07:28:22 +00:00
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 ;
2020-10-12 02:10:15 +00:00
const url = ` http:// ${ req . headers . host } /discordauth ` ;
2020-09-03 07:28:22 +00:00
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 ,
2020-10-12 02:10:15 +00:00
redirect_uri : url ,
2020-09-03 07:28:22 +00:00
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 } `
}
} ) ;
2020-10-12 00:27:47 +00:00
2020-10-12 17:56:06 +00:00
const users = await User . find ( { id : String ( userInfo . data . id ) } ) ;
2020-10-12 00:27:47 +00:00
let userUuid = '' ;
2020-10-12 14:10:18 +00:00
2020-10-12 00:27:47 +00:00
if ( users . length === 0 ) {
2020-10-12 18:13:45 +00:00
let newUuid = uuid . v4 ( ) ;
while ( User . find ( { uuid : newUuid } ) [ 0 ] ) {
newUuid = uuid . v4 ( ) ;
}
2020-10-12 00:27:47 +00:00
const newUser = new User ( {
2020-10-12 14:10:18 +00:00
id : String ( userInfo . data . id ) ,
2020-10-12 00:27:47 +00:00
createdAt : new Date ( ) ,
username : userInfo.data.username ,
discriminator : userInfo.data.discriminator ,
avatar : userInfo.data.avatar ,
2020-10-12 18:13:45 +00:00
uuid : newUuid ,
2020-10-12 00:27:47 +00:00
} ) ;
userUuid = newUser . get ( 'uuid' ) ;
newUser . save ( ) ;
} else {
2020-10-12 14:10:18 +00:00
const user = users [ 0 ] ;
userUuid = user . get ( 'uuid' ) ;
user . set ( 'id' , String ( userInfo . data . id ) ) ;
user . set ( 'username' , userInfo . data . username ) ;
user . set ( 'discriminator' , userInfo . data . discriminator ) ;
user . set ( 'avatar' , userInfo . data . avatar ) ;
2020-10-12 00:27:47 +00:00
}
req . session ! . discord = userInfo . data ;
req . session ! . uuid = userUuid ;
2020-10-12 14:10:18 +00:00
res . send ( ` logged in as ${ userInfo . data . username } # ${ userInfo . data . discriminator } <br><img src="https://media.discordapp.net/avatars/ ${ userInfo . data . id } / ${ userInfo . data . avatar } .png"><br>ur useruuid is ${ userUuid } ` ) ;
2020-09-03 07:28:22 +00:00
} catch ( err ) {
res . send ( ` whoooops<br> ${ err } ` ) ;
2020-10-12 02:07:58 +00:00
console . error ( err ) ;
2020-09-03 07:28:22 +00:00
}
} else {
2020-10-12 02:02:45 +00:00
res . send ( ` <a href="https://discord.com/api/oauth2/authorize?client_id= ${ process . env . DISCORD_OAUTH_CLIENTID } &redirect_uri= ${ encodeURI ( url ) } &response_type=code&scope=identify">Click here!!</a> ` ) ;
2020-09-03 07:28:22 +00:00
}
} ) ;
}