Moved slowcord login server to own dir
This commit is contained in:
		
							parent
							
								
									7555a496b4
								
							
						
					
					
						commit
						3877a404a1
					
				| @ -1,128 +0,0 @@ | ||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||
|     return new (P || (P = Promise))(function (resolve, reject) { | ||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||
|     }); | ||||
| }; | ||||
| var _a; | ||||
| import "dotenv/config"; | ||||
| import express from "express"; | ||||
| import cookieParser from "cookie-parser"; | ||||
| import { initDatabase, generateToken, User, Config } from "@fosscord/util"; | ||||
| import path from "path"; | ||||
| import fetch from "node-fetch"; | ||||
| // apparently dirname doesn't exist in modules, nice
 | ||||
| /* https://stackoverflow.com/a/62892482 */ | ||||
| import { fileURLToPath } from "url"; | ||||
| const __filename = fileURLToPath(import.meta.url); | ||||
| const __dirname = path.dirname(__filename); | ||||
| const app = express(); | ||||
| app.use(cookieParser()); | ||||
| const port = process.env.PORT; | ||||
| // ip -> unix epoch that requests will be accepted again
 | ||||
| const rateLimits = {}; | ||||
| const allowRequestsEveryMs = 0.5 * 1000; // every half second
 | ||||
| const allowedRequestsPerSecond = 50; | ||||
| let requestsThisSecond = 0; | ||||
| setInterval(() => { | ||||
|     requestsThisSecond = 0; | ||||
| }, 1000); | ||||
| class Discord { | ||||
| } | ||||
| _a = Discord; | ||||
| Discord.getAccessToken = (req, res) => __awaiter(void 0, void 0, void 0, function* () { | ||||
|     const { code } = req.query; | ||||
|     const body = new URLSearchParams(Object.entries({ | ||||
|         client_id: process.env.DISCORD_CLIENT_ID, | ||||
|         client_secret: process.env.DISCORD_SECRET, | ||||
|         redirect_uri: process.env.DISCORD_REDIRECT, | ||||
|         code: code, | ||||
|         grant_type: "authorization_code", | ||||
|     })).toString(); | ||||
|     const resp = yield fetch("https://discord.com/api/oauth2/token", { | ||||
|         method: "POST", | ||||
|         headers: { | ||||
|             "Content-Type": "application/x-www-form-urlencoded", | ||||
|         }, | ||||
|         body: body | ||||
|     }); | ||||
|     const json = yield resp.json(); | ||||
|     if (json.error) | ||||
|         return null; | ||||
|     return { | ||||
|         access_token: json.access_token, | ||||
|         token_type: json.token_type, | ||||
|         expires_in: json.expires_in, | ||||
|         refresh_token: json.refresh_token, | ||||
|         scope: json.scope, | ||||
|     }; | ||||
| }); | ||||
| Discord.getUserDetails = (token) => __awaiter(void 0, void 0, void 0, function* () { | ||||
|     const resp = yield fetch("https://discord.com/api/users/@me", { | ||||
|         headers: { | ||||
|             "Authorization": `Bearer ${token}`, | ||||
|         } | ||||
|     }); | ||||
|     const json = yield resp.json(); | ||||
|     if (!json.username || !json.email) | ||||
|         return null; // eh, deal with bad code later
 | ||||
|     return { | ||||
|         id: json.id, | ||||
|         email: json.email, | ||||
|         username: json.username, | ||||
|     }; | ||||
| }); | ||||
| const handlers = { | ||||
|     "discord": Discord, | ||||
| }; | ||||
| app.get("/oauth/:type", (req, res) => __awaiter(void 0, void 0, void 0, function* () { | ||||
|     requestsThisSecond++; | ||||
|     if (requestsThisSecond > allowedRequestsPerSecond) | ||||
|         return res.sendStatus(429); | ||||
|     const ip = req.headers["x-forwarded-for"] || req.socket.remoteAddress; | ||||
|     console.log(`${ip}`); | ||||
|     if (!rateLimits[ip]) { | ||||
|         rateLimits[ip] = Date.now() + allowRequestsEveryMs; | ||||
|     } | ||||
|     else if (rateLimits[ip] > Date.now()) { | ||||
|         rateLimits[ip] += allowRequestsEveryMs; | ||||
|         console.log(`${new Date()} : user ${ip} was timed out for ${(rateLimits[ip] - Date.now()) / 1000}s`); | ||||
|         return res.sendStatus(429); | ||||
|     } | ||||
|     else { | ||||
|         delete rateLimits[ip]; | ||||
|     } | ||||
|     const { type } = req.params; | ||||
|     const handler = handlers[type]; | ||||
|     if (!type || !handler) | ||||
|         return res.sendStatus(400); | ||||
|     const data = yield handler.getAccessToken(req, res); | ||||
|     if (!data) | ||||
|         return res.sendStatus(500); | ||||
|     const details = yield handler.getUserDetails(data.access_token); | ||||
|     if (!details) | ||||
|         return res.sendStatus(500); | ||||
|     let user = yield User.findOne({ where: { email: details.email } }); | ||||
|     if (!user) { | ||||
|         user = yield User.register({ | ||||
|             email: details.email, | ||||
|             username: details.username, | ||||
|             req | ||||
|         }); | ||||
|     } | ||||
|     const token = yield generateToken(user.id); | ||||
|     res.cookie("token", token); | ||||
|     res.sendFile(path.join(__dirname, "../public/login.html")); | ||||
| })); | ||||
| app.use(express.static("public", { extensions: ["html"] })); | ||||
| (() => __awaiter(void 0, void 0, void 0, function* () { | ||||
|     yield initDatabase(); | ||||
|     yield Config.init(); | ||||
|     app.listen(port, () => { | ||||
|         console.log(`Listening on port ${port}`); | ||||
|     }); | ||||
| }))(); | ||||
| //# sourceMappingURL=index.js.map
 | ||||
| @ -1 +0,0 @@ | ||||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Madeline
						Madeline