2 local push_registration_ttl = module:get_option_number("unified_push_registration_ttl", 86400); |
2 local push_registration_ttl = module:get_option_number("unified_push_registration_ttl", 86400); |
3 |
3 |
4 local base64 = require "util.encodings".base64; |
4 local base64 = require "util.encodings".base64; |
5 local datetime = require "util.datetime"; |
5 local datetime = require "util.datetime"; |
6 local id = require "util.id"; |
6 local id = require "util.id"; |
7 local jwt_sign, jwt_verify = require "util.jwt".init("HS256", unified_push_secret); |
7 local jwt = require "util.jwt"; |
8 local st = require "util.stanza"; |
8 local st = require "util.stanza"; |
9 local urlencode = require "util.http".urlencode; |
9 local urlencode = require "util.http".urlencode; |
10 |
10 |
11 local xmlns_up = "http://gultsch.de/xmpp/drafts/unified-push"; |
11 local xmlns_up = "http://gultsch.de/xmpp/drafts/unified-push"; |
12 |
12 |
19 if not s then return nil, "no value provided"; end |
19 if not s then return nil, "no value provided"; end |
20 local d = base64.decode(s); |
20 local d = base64.decode(s); |
21 if not d then return nil, "invalid base64"; end |
21 if not d then return nil, "invalid base64"; end |
22 if #d ~= 32 then return nil, "incorrect decoded length, expected 32"; end |
22 if #d ~= 32 then return nil, "incorrect decoded length, expected 32"; end |
23 return s; |
23 return s; |
|
24 end |
|
25 |
|
26 -- COMPAT w/0.12 |
|
27 local function jwt_sign(data) |
|
28 return jwt.sign(data, unified_push_secret); |
|
29 end |
|
30 |
|
31 -- COMPAT w/0.12: add expiry check |
|
32 local function jwt_verify(token) |
|
33 local ok, result = jwt.verify(token, unified_push_secret); |
|
34 if not ok then |
|
35 return ok, result; |
|
36 end |
|
37 if result.exp and result.exp < os.time() then |
|
38 return nil, "token-expired"; |
|
39 end |
|
40 return ok, result; |
24 end |
41 end |
25 |
42 |
26 -- Handle incoming registration from XMPP client |
43 -- Handle incoming registration from XMPP client |
27 function handle_register(event) |
44 function handle_register(event) |
28 local origin, stanza = event.origin, event.stanza; |
45 local origin, stanza = event.origin, event.stanza; |