Mercurial > prosody-modules
comparison mod_http_oauth2/mod_http_oauth2.lua @ 5008:bd63feda3704
Merge role-auth
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 22 Aug 2022 15:39:02 +0100 |
parents | 5dadbe0718f1 |
children | 2c6acf2d6fd4 |
comparison
equal
deleted
inserted
replaced
4994:cce12a660b98 | 5008:bd63feda3704 |
---|---|
12 | 12 |
13 local tokens = module:depends("tokenauth"); | 13 local tokens = module:depends("tokenauth"); |
14 | 14 |
15 local clients = module:open_store("oauth2_clients", "map"); | 15 local clients = module:open_store("oauth2_clients", "map"); |
16 | 16 |
17 local function filter_scopes(request_jid, requested_scope_string) --luacheck: ignore 212/requested_scope_string | 17 local function filter_scopes(username, host, requested_scope_string) |
18 -- We currently don't really support scopes, so override | 18 if host ~= module.host then |
19 -- to whatever real permissions the user has | 19 return usermanager.get_jid_role(username.."@"..host, module.host).name; |
20 if usermanager.is_admin(request_jid, module.host) then | 20 end |
21 return "prosody:scope:admin"; | 21 |
22 end | 22 if requested_scope_string then -- Specific role requested |
23 return "prosody:scope:default"; | 23 -- TODO: The requested scope string is technically a space-delimited list |
24 -- of scopes, but for simplicity we're mapping this slot to role names. | |
25 if usermanager.user_can_assume_role(username, module.host, requested_scope_string) then | |
26 return requested_scope_string; | |
27 end | |
28 end | |
29 | |
30 return usermanager.get_user_role(username, module.host).name; | |
24 end | 31 end |
25 | 32 |
26 local function code_expires_in(code) | 33 local function code_expires_in(code) |
27 return os.difftime(os.time(), code.issued); | 34 return os.difftime(os.time(), code.issued); |
28 end | 35 end |
79 if not usermanager.test_password(request_username, request_host, request_password) then | 86 if not usermanager.test_password(request_username, request_host, request_password) then |
80 return oauth_error("invalid_grant", "incorrect credentials"); | 87 return oauth_error("invalid_grant", "incorrect credentials"); |
81 end | 88 end |
82 | 89 |
83 local granted_jid = jid.join(request_username, request_host, request_resource); | 90 local granted_jid = jid.join(request_username, request_host, request_resource); |
84 local granted_scopes = filter_scopes(granted_jid, params.scope); | 91 local granted_scopes = filter_scopes(request_username, request_host, params.scope); |
85 return json.encode(new_access_token(granted_jid, granted_scopes, nil)); | 92 return json.encode(new_access_token(granted_jid, granted_scopes, nil)); |
86 end | 93 end |
87 | 94 |
88 function response_type_handlers.code(params, granted_jid) | 95 function response_type_handlers.code(params, granted_jid) |
89 if not params.client_id then return oauth_error("invalid_request", "missing 'client_id'"); end | 96 if not params.client_id then return oauth_error("invalid_request", "missing 'client_id'"); end |
97 if err then error(err); end | 104 if err then error(err); end |
98 if not client then | 105 if not client then |
99 return oauth_error("invalid_client", "incorrect credentials"); | 106 return oauth_error("invalid_client", "incorrect credentials"); |
100 end | 107 end |
101 | 108 |
102 local granted_scopes = filter_scopes(granted_jid, params.scope); | 109 local granted_scopes = filter_scopes(client_owner, client_host, params.scope); |
103 | 110 |
104 local code = uuid.generate(); | 111 local code = uuid.generate(); |
105 local ok = codes:set(params.client_id .. "#" .. code, { | 112 local ok = codes:set(params.client_id .. "#" .. code, { |
106 issued = os.time(); | 113 issued = os.time(); |
107 granted_jid = granted_jid; | 114 granted_jid = granted_jid; |