Comparison

mod_http_oauth2/mod_http_oauth2.lua @ 6240:ab14e7ecb82f

mod_http_oauth2: Allow JIDs as username for password grant
author magicfelix <felix@felix-zauberer.de>
date Sat, 19 Apr 2025 20:32:37 +0200
parent 6239:a931a95e363e
child 6245:ea58d2893afb
comparison
equal deleted inserted replaced
6239:a931a95e363e 6240:ab14e7ecb82f
132 local registration_options = module:get_option("oauth2_registration_options", 132 local registration_options = module:get_option("oauth2_registration_options",
133 { default_ttl = registration_ttl; accept_expired = not registration_ttl }); 133 { default_ttl = registration_ttl; accept_expired = not registration_ttl });
134 134
135 local pkce_required = module:get_option_boolean("oauth2_require_code_challenge", true); 135 local pkce_required = module:get_option_boolean("oauth2_require_code_challenge", true);
136 local respect_prompt = module:get_option_boolean("oauth2_respect_oidc_prompt", false); 136 local respect_prompt = module:get_option_boolean("oauth2_respect_oidc_prompt", false);
137 local expect_username_jid = module:get_option_boolean("oauth2_expect_username_jid", false);
137 138
138 local verification_key; 139 local verification_key;
139 local sign_client, verify_client; 140 local sign_client, verify_client;
140 if registration_key then 141 if registration_key then
141 -- Tie it to the host if global 142 -- Tie it to the host if global
417 if not verify_client_secret(params.client_id, params.client_secret) then 418 if not verify_client_secret(params.client_id, params.client_secret) then
418 module:log("debug", "client_secret mismatch"); 419 module:log("debug", "client_secret mismatch");
419 return oauth_error("invalid_client", "incorrect credentials"); 420 return oauth_error("invalid_client", "incorrect credentials");
420 end 421 end
421 422
422 local request_username = assert(params.username, oauth_error("invalid_request", "missing 'username'")); 423 local request_username
424
425 if expect_username_jid then
426 local request_jid = assert(params.username, oauth_error("invalid_request", "missing 'username' (JID)"));
427 local _request_username, request_host, request_resource = jid.prepped_split(request_jid);
428
429 if not (_request_username and request_host) or request_host ~= module.host then
430 return oauth_error("invalid_request", "invalid JID");
431 end
432
433 request_username = _request_username
434 else
435 request_username = assert(params.username, oauth_error("invalid_request", "missing 'username'"));
436 end
437
423 local request_password = assert(params.password, oauth_error("invalid_request", "missing 'password'")); 438 local request_password = assert(params.password, oauth_error("invalid_request", "missing 'password'"));
424 439
425 if not usermanager.test_password(request_username, module.host, request_password) then 440 if not usermanager.test_password(request_username, module.host, request_password) then
426 return oauth_error("invalid_grant", "incorrect credentials"); 441 return oauth_error("invalid_grant", "incorrect credentials");
427 end 442 end