Example #1
0
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
Example #2
0
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