def append_session_headers(self, account, headers): if account: userURL = str(account.get_value(CE+'user')) displayName = account.get_value(FOAF+'nick', userURL, "") if not displayName or displayName == "": displayName = account.get_value(FOAF+'givenName', userURL, "") if not displayName or displayName == "": displayName = account.get_value(CE+'account_id') fkaURL = utils.get_claims(self.environ)['user'] claims = { # normal RDF_JSON turns out to be too voluminous. Make something small 'exp': time.time() + 3600, 'user': userURL, 'acc': account.graph_url, #TODO remove this 'disp': displayName, 'fka': fkaURL } else: claims = utils.create_anonymous_user_claims(self.environ) sessionId = cryptography.encode_jwt(claims) cookie = Cookie.SimpleCookie() cookie['SSSESSIONID'] = sessionId # SSSESSIONID is 'Site Server Session ID' cookie['SSSESSIONID']['path'] = '/' cookie['user'] = claims['user'] cookie['user']['path'] = '/' cookie_headers = map(lambda morsel: ('Set-Cookie', morsel.OutputString()), cookie.values()) headers.extend(cookie_headers) return headers
def get_or_create_claims(environ): jwt = get_jwt(environ) if jwt: claims = cryptography.decode_jwt(jwt) if not claims: # expired claims? claims = cryptography.decode_jwt(jwt, verify_expiration=False) if claims: # we have a verified set of claims, but they have expired del claims['acc'] del claims['exp'] environ['GUEST_AUTHORIZATION'] = cryptography.encode_jwt(claims) else: claims = None if not claims: claims = create_anonymous_user_claims(environ) environ['GUEST_AUTHORIZATION'] = cryptography.encode_jwt(claims) return claims
def set_resource_host_header(request_url, headers): if SYSTEM_HOST is not None: parts = list(urlparse.urlparse(request_url)) if not parts[0]: parts[0] = 'http' if parts[1]: headers['CE-Resource-Host'] = parts[1] parts[1] = SYSTEM_HOST return urlparse.urlunparse(tuple(parts)) else: return request_url def intra_system_get(request_url, headers=None): if not headers: headers = dict() actual_url = set_resource_host_header(str(request_url), headers) logger.debug('intra_system_get request_url: %s actual_url: %s headers: %s', request_url, actual_url, headers) return requests.get(actual_url, headers=headers) CONTENT_RDF_JSON_HEADER = { 'Content-type' : 'application/rdf+json+ce', 'Cookie' : 'SSSESSIONID=%s' % cryptography.encode_jwt({'user': ADMIN_USER}), 'ce-post-reason' : 'ce-create' } def intra_system_post(request_url, data, headers=None): if not headers: headers = CONTENT_RDF_JSON_HEADER.copy() actual_url = set_resource_host_header(request_url, headers) logger.debug('intra_system_post request_url: %s actual_url: %s headers: %s data: %s', request_url, actual_url, headers, data) return requests.post(actual_url, headers=headers, data=json.dumps(data, cls=RDF_JSON_Encoder), verify=False) return None
import requests from base_constants import ADMIN_USER from cryptography import encode_jwt encoded_jwt = encode_jwt({"user": ADMIN_USER}) DELETE_HEADER = {"Cookie": "SSSESSIONID=%s" % encoded_jwt} DATASERVER_HOSTNAME = "localhost:3007" items_container_url = "http://%s/items" % DATASERVER_HOSTNAME def run(): requests.delete(items_container_url, headers=DELETE_HEADER) if __name__ == "__main__": run()
import base64, requests import json, os from cryptography import encode_jwt USER_URL = 'http://ibm.com/user/Frank' SIGNATURE_PUBLIC_KEY = 'our little secret' encoded_jwt = encode_jwt({'user':USER_URL}) AUTH_HEADER = { 'Cookie' : 'SSSESSIONID=%s' % encoded_jwt } DATASERVER_HOSTNAME = 'localhost:3001' if 'SERVICE_HOSTNAME' in os.environ: DATASERVER_HOSTNAME = os.environ['SERVICE_HOSTNAME'] TS_HOSTNAME = 'testsite.%s' % DATASERVER_HOSTNAME ts_ac_app_url = 'http://%s/ac' % TS_HOSTNAME ts_mt_app_url = 'http://%s/mt' % TS_HOSTNAME ts_cat_app_url = 'http://%s/cat' % TS_HOSTNAME def run(): requests.delete(ts_ac_app_url, headers=AUTH_HEADER) requests.delete(ts_mt_app_url, headers=AUTH_HEADER) requests.delete(ts_cat_app_url, headers=AUTH_HEADER) if __name__ == '__main__': run()
def __init__(self, cat_categories_url, cat_products_url, id_prefix, user=ADMIN_USER): self.cat_categories_url = cat_categories_url self.cat_products_url = cat_products_url self.id_prefix = id_prefix self.categories = {} self.products = {} self.headers = { 'Content-type' : 'application/rdf+json+ce' , 'Cookie' : 'SSSESSIONID=%s' % encode_jwt({'user':user}) , 'ce-post-reason' : 'ce-create' }