comparison mod_http_oauth2/mod_http_oauth2.lua @ 3908:8ac5d9933106

mod_http_oauth2: Implement real tokens using mod_authtokens
author Matthew Wild <mwild1@gmail.com>
date Wed, 26 Feb 2020 17:57:53 +0000
parents cfeb93b80621
children 80dffbbd056b
comparison
equal deleted inserted replaced
3907:d5ecb9b9cb3b 3908:8ac5d9933106
1 module:set_global();
2
3 local http = require "util.http"; 1 local http = require "util.http";
4 local jid = require "util.jid"; 2 local jid = require "util.jid";
5 local json = require "util.json"; 3 local json = require "util.json";
6 local usermanager = require "core.usermanager"; 4 local usermanager = require "core.usermanager";
7 local errors = require "util.error"; 5 local errors = require "util.error";
6
7 local tokens = module:depends("authtokens");
8 8
9 local function oauth_error(err_name, err_desc) 9 local function oauth_error(err_name, err_desc)
10 return errors.new({ 10 return errors.new({
11 type = "modify"; 11 type = "modify";
12 condition = "bad-request"; 12 condition = "bad-request";
15 context = { oauth2_response = { error = err_name, error_description = err_desc } }; 15 context = { oauth2_response = { error = err_name, error_description = err_desc } };
16 }); 16 });
17 end 17 end
18 18
19 local function new_access_token(username, host, scope, ttl) 19 local function new_access_token(username, host, scope, ttl)
20 local token_jid = jid.join(username, host);
21 local token = tokens.create_jid_token(token_jid, token_jid, scope, ttl);
20 return { 22 return {
21 token_type = "bearer"; 23 token_type = "bearer";
22 access_token = "test-token"; 24 access_token = token;
23 expires_in = ttl; 25 expires_in = ttl;
24 -- TODO: include refresh_token when implemented 26 -- TODO: include refresh_token when implemented
25 }; 27 };
26 end 28 end
27 29
32 local request_password = assert(params.password, oauth_error("invalid_request", "missing 'password'")); 34 local request_password = assert(params.password, oauth_error("invalid_request", "missing 'password'"));
33 local request_username, request_host = jid.prepped_split(request_jid); 35 local request_username, request_host = jid.prepped_split(request_jid);
34 if params.scope then 36 if params.scope then
35 return oauth_error("invalid_scope", "unknown scope requested"); 37 return oauth_error("invalid_scope", "unknown scope requested");
36 end 38 end
37 if not (request_username and request_host) or not (hosts[request_host]) then 39 if not (request_username and request_host) or request_host ~= module.host then
38 return oauth_error("invalid_request", "invalid JID"); 40 return oauth_error("invalid_request", "invalid JID");
39 end 41 end
40 if usermanager.test_password(request_username, request_host, request_password) then 42 if usermanager.test_password(request_username, request_host, request_password) then
41 return json.encode(new_access_token(request_username, request_host, nil, nil)); 43 return json.encode(new_access_token(request_username, request_host, nil, nil));
42 end 44 end