changeset 39:c538dc39b851

user login fixes
author drewp@bigasterisk.com
date Sat, 19 Nov 2022 17:06:36 -0800
parents f3a15a724483
children 94181d521d6d
files get_agent.py lookup.py
diffstat 2 files changed, 34 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/get_agent.py	Sat Nov 19 17:06:36 2022 -0800
@@ -0,0 +1,25 @@
+import logging
+
+import bottle
+import jwt
+from rdflib import URIRef
+
+log = logging.getLogger(__name__)
+
+jwks_client = jwt.PyJWKClient(uri='https://authenticate.bigasterisk.com/.well-known/pomerium/jwks.json')
+
+
+def bottleGetAgent() -> URIRef:
+    pomAssertion = bottle.request.headers.get('X-Pomerium-Jwt-Assertion', None)
+
+    sk = jwks_client.get_signing_key_from_jwt(pomAssertion)
+    j = jwt.decode(pomAssertion,
+                   key=sk.key,
+                   algorithms=['ES256'],
+                   audience="bigasterisk.com")
+
+    foaf = {
+        'drewpca@gmail.com': 'http://bigasterisk.com/foaf.rdf#drewp',
+        'kelsimp@gmail.com': 'http://bigasterisk.com/kelsi/foaf.rdf#kelsi',
+    }[j['email']]
+    return URIRef(foaf)
--- a/lookup.py	Sat Nov 19 17:05:15 2022 -0800
+++ b/lookup.py	Sat Nov 19 17:06:36 2022 -0800
@@ -34,8 +34,11 @@
 
 
 def getUser():
-    agent = bottle.request.headers.get('x-foaf-agent', None)
-    username = db['user'].find_one({'_id': agent})['username'] if agent else None
+    try:
+        agent = bottleGetAgent()
+        username = db['user'].find_one({'_id': str(agent)})['username'] if agent else None
+    except KeyError:
+        username = agent = None
     return username, agent
 
 
@@ -169,7 +172,10 @@
 
 @bottle.route('/<user>', method='POST')
 def userAddLink(user):
-    if getUser()[0] != user:
+    u=getUser()[0]
+    if u is None:
+        raise ValueError('not logged in')
+    if u != user:
         raise ValueError("not logged in as %s" % user)
     print(repr(bottle.request.params.__dict__))
     doc = links.fromPostdata(bottle.request.params, user, datetime.datetime.now(tzlocal()))