Comparison

mod_http_oauth2/mod_http_oauth2.lua @ 5775:c27eaa7117d6

mod_http_oauth2: Fire authentication events on login form For e.g. mod_audit_auth to use. A bit hacky because upon review many modules don't seem to handle the lack of an XMPP session in the event payload.
author Kim Alvefur <zash@zash.se>
date Fri, 01 Dec 2023 22:40:41 +0100
parent 5774:d563a6b0dfb7
child 5787:87920d436cb4
comparison
equal deleted inserted replaced
5774:d563a6b0dfb7 5775:c27eaa7117d6
638 638
639 if not form.user_token then 639 if not form.user_token then
640 -- First step: login 640 -- First step: login
641 local username = encodings.stringprep.nodeprep(form.username); 641 local username = encodings.stringprep.nodeprep(form.username);
642 local password = encodings.stringprep.saslprep(form.password); 642 local password = encodings.stringprep.saslprep(form.password);
643 -- Many things hooked to authentication-{success,failure} don't expect
644 -- non-XMPP sessions so here's something close enough...
645 local auth_event = {
646 session = {
647 type = "http";
648 ip = request.ip;
649 conn = request.conn;
650 username = username;
651 host = module.host;
652 sasl_handler = { username = username; selected = "x-www-form" };
653 client_id = request.headers.user_agent;
654 };
655 };
643 if not (username and password) or not usermanager.test_password(username, module.host, password) then 656 if not (username and password) or not usermanager.test_password(username, module.host, password) then
657 module:fire_event("authentication-failure", auth_event);
644 return { 658 return {
645 error = "Invalid username/password"; 659 error = "Invalid username/password";
646 }; 660 };
647 end 661 end
662 module:fire_event("authentication-success", auth_event);
648 return { 663 return {
649 user = { 664 user = {
650 username = username; 665 username = username;
651 host = module.host; 666 host = module.host;
652 token = new_user_token({ username = username; host = module.host; auth_time = os.time(); amr = { "pwd" } }); 667 token = new_user_token({ username = username; host = module.host; auth_time = os.time(); amr = { "pwd" } });