| @@ -10,6 +10,7 @@ from keystoneclient.v2_0.tokens import Token, TokenManager | ||||
|  | ||||
| from .exceptions import KeystoneAuthException | ||||
| from .user import create_user_from_token | ||||
| from .utils import check_token_expiration | ||||
|  | ||||
|  | ||||
| LOG = logging.getLogger(__name__) | ||||
| @@ -19,6 +20,17 @@ KEYSTONE_CLIENT_ATTR = "_keystoneclient" | ||||
|  | ||||
|  | ||||
| class KeystoneBackend(object): | ||||
|     def check_auth_expiry(self, token): | ||||
|         if not check_token_expiration(token): | ||||
|             msg = _("The authentication token issued by the Identity service " | ||||
|                     "has expired.") | ||||
|             LOG.warning("The authentication token issued by the Identity " | ||||
|                         "service appears to have expired before it was " | ||||
|                         "issued. This may indicate a problem with either your " | ||||
|                         "server or client configuration.") | ||||
|             raise KeystoneAuthException(msg) | ||||
|         return True | ||||
|  | ||||
|     def get_user(self, user_id): | ||||
|         if user_id == self.request.session["user_id"]: | ||||
|             token = Token(TokenManager(None), | ||||
| @@ -51,6 +63,9 @@ class KeystoneBackend(object): | ||||
|                     "Please try again later.") | ||||
|             raise KeystoneAuthException(msg) | ||||
|  | ||||
|         # Check expiry for our unscoped token. | ||||
|         self.check_auth_expiry(unscoped_token) | ||||
|  | ||||
|         # FIXME: Log in to default tenant when the Keystone API returns it... | ||||
|         # For now we list all the user's tenants and iterate through. | ||||
|         try: | ||||
| @@ -78,6 +93,9 @@ class KeystoneBackend(object): | ||||
|             msg = _("Unable to authenticate to any available projects.") | ||||
|             raise KeystoneAuthException(msg) | ||||
|  | ||||
|         # Check expiry for our new scoped token. | ||||
|         self.check_auth_expiry(token) | ||||
|  | ||||
|         # If we made it here we succeeded. Create our User! | ||||
|         user = create_user_from_token(request, token, client.management_url) | ||||
|  | ||||
|   | ||||
| @@ -76,6 +76,15 @@ class User(AnonymousUser): | ||||
|     def __repr__(self): | ||||
|         return "<%s: %s>" % (self.__class__.__name__, self.username) | ||||
|  | ||||
|     def is_token_expired(self): | ||||
|         """ | ||||
|         Returns ``True`` if the token is expired, ``False`` if not, and | ||||
|         ``None`` if there is no token set. | ||||
|         """ | ||||
|         if self.token is None: | ||||
|             return None | ||||
|         return not check_token_expiration(self.token) | ||||
|  | ||||
|     def is_authenticated(self): | ||||
|         """ Checks for a valid token that has not yet expired. """ | ||||
|         return self.token is not None and check_token_expiration(self.token) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Gabriel Hurley
					Gabriel Hurley