def generate_signed_link(user, viewname, referrer=None, args=None, kwargs=None): """This returns an absolute URL where the given user is signed in for the given viewname with args and kwargs. This returns a redirect link that if followed sends the user to another URL which carries another signature that is valid for that URL only. The user can also be a user ID. """ if hasattr(user, "is_authenticated"): if not user.is_authenticated(): raise RuntimeError("Need an authenticated user to sign a link.") user_id = user.id else: user_id = user path = reverse(viewname, args=args, kwargs=kwargs) item = "%s|%s|%s" % (options.get("system.url-prefix"), path, base36_encode(user_id)) signature = ":".join(get_signer().sign(item).rsplit(":", 2)[1:]) signed_link = "%s?_=%s:%s" % (absolute_uri(path), base36_encode(user_id), signature) if referrer: signed_link = signed_link + "&" + urlencode({"referrer": referrer}) return signed_link
def test_base36(): assert [base36_encode(x) for x in range(128)] == [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1A', '1B', '1C', '1D', '1E', '1F', '1G', '1H', '1I', '1J', '1K', '1L', '1M', '1N', '1O', '1P', '1Q', '1R', '1S', '1T', '1U', '1V', '1W', '1X', '1Y', '1Z', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2A', '2B', '2C', '2D', '2E', '2F', '2G', '2H', '2I', '2J', '2K', '2L', '2M', '2N', '2O', '2P', '2Q', '2R', '2S', '2T', '2U', '2V', '2W', '2X', '2Y', '2Z', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3A', '3B', '3C', '3D', '3E', '3F', '3G', '3H', '3I', '3J' ] assert [base36_decode(base36_encode(x)) for x in range(128)] == list(map(int, range(128)))
def generate_signed_link(user, viewname, args=None, kwargs=None): """This returns an absolute URL where the given user is signed in for the given viewname with args and kwargs. This returns a redirect link that if followed sends the user to another URL which carries another signature that is valid for that URL only. The user can also be a user ID. """ if hasattr(user, 'is_authenticated'): if not user.is_authenticated(): raise RuntimeError('Need an authenticated user to sign a link.') user_id = user.id else: user_id = user path = reverse(viewname, args=args, kwargs=kwargs) item = '%s|%s|%s' % (options.get('system.url-prefix'), path, base36_encode(user_id)) signature = ':'.join(get_signer().sign(item).rsplit(':', 2)[1:]) return '%s?_=%s:%s' % (absolute_uri(path), base36_encode(user_id), signature, )
def generate_signed_link(user, viewname, args=None, kwargs=None): """This returns an absolute URL where the given user is signed in for the given viewname with args and kwargs. This returns a redirect link that if followed sends the user to another URL which carries another signature that is valid for that URL only. The user can also be a user ID. """ if hasattr(user, 'is_authenticated'): if not user.is_authenticated(): raise RuntimeError('Need an authenticated user to sign a link.') user_id = user.id else: user_id = user path = reverse(viewname, args=args, kwargs=kwargs) item = '%s|%s|%s' % (options.get('system.url-prefix'), path, base36_encode(user_id)) signature = ':'.join(get_signer().sign(item).rsplit(':', 2)[1:]) return '%s?_=%s:%s' % ( absolute_uri(path), base36_encode(user_id), signature, )
def test_base36(): assert [base36_encode(x) for x in range(128)] == [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F", "1G", "1H", "1I", "1J", "1K", "1L", "1M", "1N", "1O", "1P", "1Q", "1R", "1S", "1T", "1U", "1V", "1W", "1X", "1Y", "1Z", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "2G", "2H", "2I", "2J", "2K", "2L", "2M", "2N", "2O", "2P", "2Q", "2R", "2S", "2T", "2U", "2V", "2W", "2X", "2Y", "2Z", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F", "3G", "3H", "3I", "3J", ] assert [base36_decode(base36_encode(x)) for x in range(128)] == list(range(128))
def test_base36(): assert [base36_encode(x) for x in xrange(128)] == [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F", "1G", "1H", "1I", "1J", "1K", "1L", "1M", "1N", "1O", "1P", "1Q", "1R", "1S", "1T", "1U", "1V", "1W", "1X", "1Y", "1Z", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "2G", "2H", "2I", "2J", "2K", "2L", "2M", "2N", "2O", "2P", "2Q", "2R", "2S", "2T", "2U", "2V", "2W", "2X", "2Y", "2Z", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F", "3G", "3H", "3I", "3J", ] assert [base36_decode(base36_encode(x)) for x in xrange(128)] == range(128)