diff src/login2.html.luan @ 8:9534dd5eda89

use avatar
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 24 Oct 2023 19:31:33 -0600
parents src/login2.red.luan@f29dd482a25a
children 62dd23f0b549
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/login2.html.luan	Tue Oct 24 19:31:33 2023 -0600
@@ -0,0 +1,72 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local stringify = Luan.stringify or error()
+local Parsers = require "luan:Parsers.luan"
+local json_parse = Parsers.json_parse or error()
+local Io = require "luan:Io.luan"
+local uri = Io.uri or error()
+local Http = require "luan:http/Http.luan"
+local Config = require "site:/lib/Config.luan"
+local Shared = require "site:/lib/Shared.luan"
+local discord_redirect_uri = Shared.discord_redirect_uri or error()
+local Logging = require "luan:logging/Logging.luan"
+local logger = Logging.logger "login2.red"
+
+
+return function()
+	local code = Http.request.parameters.code or error()
+	logger.info("code = "..code)
+
+	local url = "https://discord.com/api/oauth2/token"
+	local config = Config.get()
+	local options = {
+		method = "POST"
+		headers = {
+			["User-Agent"] = "fuck you"  -- for retarded Cloudflare
+		}
+		authorization = {
+			username = config.discord.client_id
+			password = config.discord.client_secret
+			type = "basic"
+		}
+		parameters = {
+			grant_type = "authorization_code"
+			code = code
+			redirect_uri = discord_redirect_uri()
+		}
+	}
+	-- logger.info(stringify(options))
+	local result = uri(url,options).read_text()
+	-- logger.info(result)
+	result = json_parse(result)
+	local access_token = result.access_token or error()
+	logger.info("access_token = "..access_token)
+
+	local url = "https://discord.com/api/users/@me"
+	local options = {
+		headers = {
+			["User-Agent"] = "fuck you"  -- for retarded Cloudflare
+			Authorization = "Bearer "..access_token
+		}
+	}
+	local result = uri(url,options).read_text()
+	logger.info(result)
+	result = json_parse(result)
+	local user_id = result.id or error()
+	local user_name = result.username or error()
+	local user_avatar = result.avatar or error()
+
+	Http.response.set_persistent_cookie("user",user_id)
+	Io.stdout = Http.response.text_writer()
+%>
+<!doctype html>
+<html>
+	<script>
+		localStorage.user_id = '<%=user_id%>';
+		localStorage.user_name = '<%=user_name%>';
+		localStorage.user_avatar = '<%=user_avatar%>';
+		location = '/';
+	</script>
+</html>
+<%
+end