2020-06-01 01:06:16 +00:00
|
|
|
from datasette import hookimpl
|
|
|
|
from itsdangerous import BadSignature
|
2022-05-02 19:39:06 +00:00
|
|
|
from datasette.utils import baseconv
|
2020-06-10 19:39:54 +00:00
|
|
|
import time
|
2020-06-01 01:06:16 +00:00
|
|
|
|
|
|
|
|
|
|
|
@hookimpl
|
|
|
|
def actor_from_request(datasette, request):
|
2020-06-02 21:06:53 +00:00
|
|
|
if "ds_actor" not in request.cookies:
|
2020-06-01 01:06:16 +00:00
|
|
|
return None
|
|
|
|
try:
|
2020-06-10 19:39:54 +00:00
|
|
|
decoded = datasette.unsign(request.cookies["ds_actor"], "actor")
|
|
|
|
# If it has "e" and "a" keys process the "e" expiry
|
|
|
|
if not isinstance(decoded, dict) or "a" not in decoded:
|
|
|
|
return None
|
|
|
|
expires_at = decoded.get("e")
|
|
|
|
if expires_at:
|
|
|
|
timestamp = int(baseconv.base62.decode(expires_at))
|
|
|
|
if time.time() > timestamp:
|
|
|
|
return None
|
|
|
|
return decoded["a"]
|
2020-06-01 01:06:16 +00:00
|
|
|
except BadSignature:
|
|
|
|
return None
|