33const express = require ( 'express' ) ;
44const axios = require ( 'axios' ) ;
55const router = express . Router ( ) ;
6-
76const DiscordClient = require ( '../services/discord.js' ) ;
87//const utils = require('../services/utils.js');
98
@@ -17,6 +16,7 @@ const catchAsyncErrors = fn => ((req, res, next) => {
1716 }
1817} ) ;
1918
19+
2020router . get ( '/login' , ( req , res ) => {
2121 const scope = 'guilds%20identify%20email' ;
2222 res . redirect ( `https://discordapp.com/api/oauth2/authorize?client_id=${ config . discord . clientId } &scope=${ scope } &response_type=code&redirect_uri=${ redirect } ` ) ;
@@ -46,16 +46,79 @@ router.get('/callback', catchAsyncErrors(async (req, res) => {
4646 const valid = perms . map !== false ;
4747 req . session . valid = valid ;
4848 req . session . save ( ) ;
49+
50+ const ip = req . headers [ 'cf-connecting-ip' ] || ( ( req . headers [ 'x-forwarded-for' ] || '' ) . split ( ', ' ) [ 0 ] ) || ( req . connection . remoteAddress || req . connection . localAddress ) . match ( '[0-9]+.[0-9].+[0-9]+.[0-9]+$' ) [ 0 ] ;
51+ const url = `http://ip-api.com/json/${ ip } ?fields=66846719&lang=${ config . locale || 'en' } ` ;
52+ const geoResponse = await axios . get ( url ) ;
53+ const geo = geoResponse . data ;
54+ const embed = {
55+ color : 0xFF0000 ,
56+ title : 'Failure' ,
57+ author : {
58+ name : `${ user . username } #${ user . discriminator } ` ,
59+ icon_url : `https://cdn.discordapp.com/avatars/${ user . id } /${ user . avatar } .png` ,
60+ } ,
61+ description : 'User Failed Authentication' ,
62+ thumbnail : {
63+ url : `https://cdn.discordapp.com/avatars/${ user . id } /${ user . avatar } .png` ,
64+ } ,
65+ fields : [
66+ {
67+ name : 'Discord Id' ,
68+ value : `<@${ user . id } >` ,
69+ } ,
70+ {
71+ name : 'Client Info' ,
72+ value : req . headers [ 'user-agent' ]
73+ } ,
74+ {
75+ name : 'Ip Address' ,
76+ value : `||${ req . headers [ 'cf-connecting-ip' ] } ||`
77+ } ,
78+ {
79+ name : 'Geo Lookup' ,
80+ value : `${ geo [ 'city' ] } , ${ geo [ 'regionName' ] } , ${ geo [ 'zip' ] } `
81+ } ,
82+ {
83+ name : 'Google Map' ,
84+ value : `https://www.google.com/maps?q=${ geo [ 'lat' ] } ,${ geo [ 'lon' ] } `
85+ } ,
86+ {
87+ name : 'Network Provider' ,
88+ value : `${ geo [ 'isp' ] } , ${ geo [ 'as' ] } `
89+ } ,
90+ {
91+ name : 'Mobile' ,
92+ value : `${ geo [ 'mobile' ] } ` ,
93+ inline : true
94+ } ,
95+ {
96+ name : 'Proxy' ,
97+ value : `${ geo [ 'proxy' ] } ` ,
98+ inline : true
99+ } ,
100+ {
101+ name : 'Hosting' ,
102+ value : `${ geo [ 'hosting' ] } ` ,
103+ inline : true
104+ } ,
105+ ] ,
106+ timestamp : new Date ( ) ,
107+ } ;
108+ let redirect = '/login' ;
49109 if ( valid ) {
50110 console . log ( user . id , 'Authenticated successfully.' ) ;
51- await DiscordClient . sendMessage ( config . discord . logChannelId , `${ user . username } #${ user . discriminator } (${ user . id } ) Authenticated successfully.` ) ;
52- res . redirect ( `/?token=${ response . data . access_token } ` ) ;
111+ embed . title = 'Success' ;
112+ embed . description = 'User Successfully Authenticated' ;
113+ embed . color = 0x00FF00 ;
114+ redirect = `/?token=${ response . data . access_token } ` ;
53115 } else {
54116 // Not in Discord server(s) and/or have required roles to view map
55117 console . warn ( user . id , 'Not authorized to access map' ) ;
56- await DiscordClient . sendMessage ( config . discord . logChannelId , `${ user . username } #${ user . discriminator } (${ user . id } ) Not authorized to access map.` ) ;
57- res . redirect ( '/login' ) ;
58118 }
119+
120+ await DiscordClient . sendMessage ( config . discord . logChannelId , { embed : embed } ) ;
121+ res . redirect ( redirect ) ;
59122 } ) . catch ( error => {
60123 console . error ( error ) ;
61124 //throw new Error('UnableToFetchToken');
0 commit comments