mod_unified_push/mod_unified_push.lua
changeset 5143 449e4ca4de32
parent 5140 67b2c982bea2
child 5150 a86022d702b2
equal deleted inserted replaced
5142:4511e90d1d08 5143:449e4ca4de32
     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;