def _server(req, options): global LAST_PURGE_TIME auth = _auth(req, options) if auth['method'] == 'bearer': token = auth['token'] sessiondata = TOKEN_SESSION.get(token) if sessiondata: mapisession = kc_session_restore(sessiondata[0]) server = kopano.Server(mapisession=mapisession, parse_args=False) else: server = kopano.Server(auth_user=auth['userid'], auth_pass=token, parse_args=False, oidc=True) sessiondata = kc_session_save(server.mapisession) now = time.time() TOKEN_SESSION[token] = (sessiondata, now) # expire tokens after 15 mins TODO make configurable? if LAST_PURGE_TIME is None or now > LAST_PURGE_TIME + 10: for (token, (sessiondata, t)) in list(TOKEN_SESSION.items()): if t < now - 15 * 60: del TOKEN_SESSION[token] LAST_PURGE_TIME = now return server elif auth['method'] == 'basic': return kopano.Server(auth_user=auth['user'], auth_pass=auth['password'], parse_args=False) # TODO remove elif auth['method'] == 'passthrough': # pragma: no cover userid = auth['userid'] sessiondata = USERID_SESSION.get(userid) if sessiondata: mapisession = kc_session_restore(sessiondata) server = kopano.Server(mapisession=mapisession, parse_args=False) else: username = _username(auth['userid']) server = kopano.Server(auth_user=username, auth_pass='', parse_args=False, store_cache=False) sessiondata = kc_session_save(server.mapisession) USERID_SESSION[userid] = sessiondata return server
def _server(req): global SERVER auth_header = req.get_header('Authorization') userid = req.get_header('X-Kopano-UserEntryID') if auth_header and auth_header.startswith('Basic '): user, passwd = codecs.decode(codecs.encode(auth_header[6:], 'ascii'), 'base64').split(b':') server = kopano.Server(auth_user=user, auth_pass=passwd) elif userid in SESSIONDATA: sessiondata = SESSIONDATA[userid] mapisession = kc_session_restore(sessiondata) server = kopano.Server(mapisession=mapisession, parse_args=False) else: try: SERVER except NameError: SERVER = kopano.Server(parse_args=False, store_cache=False) username = SERVER.user(userid=userid).name server = kopano.Server(auth_user=username, auth_pass='', parse_args=False, store_cache=False) sessiondata = kc_session_save(server.mapisession) SESSIONDATA[userid] = sessiondata return server