view src/login2.html.luan @ 15:d0b8e1a8fc69

minor
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 01 Nov 2023 00:12:08 -0600
parents 62dd23f0b549
children 552d6f944acb
line wrap: on
line source

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.html"


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"] = "Disearch"  -- 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"] = "Disearch"  -- 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