From 5fc1459a3116fbcfa2585391da65c3162744bfc4 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Sat, 28 Jan 2023 20:30:44 +0100 Subject: [PATCH] onobard stub --- init.lua | 16 +--------------- onboard.lua | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 15 deletions(-) create mode 100644 onboard.lua diff --git a/init.lua b/init.lua index ae52c4f..36d1305 100644 --- a/init.lua +++ b/init.lua @@ -12,22 +12,8 @@ otp = { } dofile(MP.."/functions.lua") +dofile(MP.."/onboard.lua") if minetest.get_modpath("mtt") and mtt.enabled then dofile(MP.."/functions.spec.lua") end - -minetest.register_chatcommand("test", { - func = function(name) - local url = "otpauth://totp/abc:myaccount?algorithm=SHA1&digits=6&issuer=abc&period=30&" - .. "secret=N6JGKMEKU2E6HQMLLNMJKBRRGVQ2ZKV7" - - local ok, code = otp.qrcode(url) - assert(ok) - local png = otp.create_qr_png(code) - local formspec = "size[10,10]" .. - "image[1,0.6;5,5;^[png:" .. minetest.encode_base64(png) .. "]" - - minetest.show_formspec(name, "TEST", formspec) - end -}) \ No newline at end of file diff --git a/onboard.lua b/onboard.lua new file mode 100644 index 0000000..318f7f2 --- /dev/null +++ b/onboard.lua @@ -0,0 +1,46 @@ +local FORMNAME = "otp-enable" + +local secret = otp.generate_secret() +local secret_b32 = otp.basexx.to_base32(secret) + +minetest.register_chatcommand("otp_enable", { + func = function(name) + local issuer = "Minetest" + if minetest.settings:get("server_name") ~= "" then + issuer = minetest.settings:get("server_name") + elseif minetest.settings:get("server_address") ~= "" then + issuer = minetest.settings:get("server_address") + end + + local url = "otpauth://totp/" .. issuer .. ":" .. name .. "?algorithm=SHA1&" .. + "digits=6&issuer=" .. issuer .. "&period=30&" .. + "secret=" .. secret_b32 + + local ok, code = otp.qrcode(url) + assert(ok) + + local png = otp.create_qr_png(code) + local formspec = "size[10,10]" .. + "image[1,0.6;5,5;^[png:" .. minetest.encode_base64(png) .. "]" .. + "field[1,9;5,1;code;Code;]" + + minetest.show_formspec(name, FORMNAME, formspec) + end +}) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= FORMNAME then + return + end + + if fields.code then + print("Validating code for " .. player:get_player_name()) + local expected_code = otp.generate_totp(secret) + if expected_code == fields.code then + print("Valid") + else + print("Invalid") + end + + end +end) \ No newline at end of file