# HG changeset patch # User Søren Løvborg # Date 2017-02-22 21:20:39 # Node ID 25623c3c63aa531e1acc4ebcc808ef276e0dcddd # Parent ca77c6da2d34aaa4ccc34a6929b2452c153d661a api: simplify API key expiration checks diff --git a/kallithea/lib/auth.py b/kallithea/lib/auth.py --- a/kallithea/lib/auth.py +++ b/kallithea/lib/auth.py @@ -24,7 +24,6 @@ Original author and date, and relevant c :copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. """ -import time import os import logging import traceback @@ -37,7 +36,6 @@ from decorator import decorator from pylons import request, session from pylons.i18n.translation import _ from webhelpers.pylonslib import secure_form -from sqlalchemy import or_ from sqlalchemy.orm.exc import ObjectDeletedError from sqlalchemy.orm import joinedload from webob.exc import HTTPFound, HTTPBadRequest, HTTPForbidden, HTTPMethodNotAllowed @@ -606,9 +604,7 @@ class AuthUser(object): def _get_api_keys(self): api_keys = [self.api_key] for api_key in UserApiKeys.query() \ - .filter(UserApiKeys.user_id == self.user_id) \ - .filter(or_(UserApiKeys.expires == -1, - UserApiKeys.expires >= time.time())).all(): + .filter_by(user_id=self.user_id, is_expired=False): api_keys.append(api_key.api_key) return api_keys diff --git a/kallithea/model/api_key.py b/kallithea/model/api_key.py --- a/kallithea/model/api_key.py +++ b/kallithea/model/api_key.py @@ -27,7 +27,6 @@ Original author and date, and relevant c import time import logging -from sqlalchemy import or_ from kallithea.lib.utils2 import generate_api_key from kallithea.model.base import BaseModel @@ -75,7 +74,5 @@ class ApiKeyModel(BaseModel): user_api_keys = UserApiKeys.query() \ .filter(UserApiKeys.user_id == user.user_id) if not show_expired: - user_api_keys = user_api_keys \ - .filter(or_(UserApiKeys.expires == -1, - UserApiKeys.expires >= time.time())) + user_api_keys = user_api_keys.filter_by(is_expired=False) return user_api_keys diff --git a/kallithea/model/db.py b/kallithea/model/db.py --- a/kallithea/model/db.py +++ b/kallithea/model/db.py @@ -618,11 +618,7 @@ class User(Base, BaseDbModel): if fallback and not res: #fallback to additional keys - _res = UserApiKeys.query() \ - .filter(UserApiKeys.api_key == api_key) \ - .filter(or_(UserApiKeys.expires == -1, - UserApiKeys.expires >= time.time())) \ - .first() + _res = UserApiKeys.query().filter_by(api_key=api_key, is_expired=False).first() if _res: res = _res.user return res @@ -742,11 +738,9 @@ class UserApiKeys(Base, BaseDbModel): user = relationship('User') - @property - def expired(self): - if self.expires == -1: - return False - return time.time() > self.expires + @hybrid_property + def is_expired(self): + return (self.expires != -1) & (time.time() > self.expires) class UserEmailMap(Base, BaseDbModel): diff --git a/kallithea/templates/admin/my_account/my_account_api_keys.html b/kallithea/templates/admin/my_account/my_account_api_keys.html --- a/kallithea/templates/admin/my_account/my_account_api_keys.html +++ b/kallithea/templates/admin/my_account/my_account_api_keys.html @@ -18,14 +18,14 @@ %if c.user_api_keys: %for api_key in c.user_api_keys: - +
${api_key.api_key}
${api_key.description} %if api_key.expires == -1: ${_('Expires')}: ${_('Never')} %else: - %if api_key.expired: + %if api_key.is_expired: ${_('Expired')}: ${h.age(h.time_to_datetime(api_key.expires))} %else: ${_('Expires')}: ${h.age(h.time_to_datetime(api_key.expires))} diff --git a/kallithea/templates/admin/users/user_edit_api_keys.html b/kallithea/templates/admin/users/user_edit_api_keys.html --- a/kallithea/templates/admin/users/user_edit_api_keys.html +++ b/kallithea/templates/admin/users/user_edit_api_keys.html @@ -18,14 +18,14 @@ %if c.user_api_keys: %for api_key in c.user_api_keys: - +
${api_key.api_key}
${api_key.description} %if api_key.expires == -1: ${_('Expires')}: ${_('Never')} %else: - %if api_key.expired: + %if api_key.is_expired: ${_('Expired')}: ${h.age(h.time_to_datetime(api_key.expires))} %else: ${_('Expires')}: ${h.age(h.time_to_datetime(api_key.expires))}