changeset 5325:fd3e1ca9cce9

auth: fold AuthUser._propagate_data into constructor This simplifies both the program and data flow.
author Søren Løvborg <kwi@kwi.dk>
date Sun, 26 Jul 2015 14:07:33 +0200
parents 7e8d80882865
children 7557da2252a3
files kallithea/lib/auth.py
diffstat 1 files changed, 26 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/lib/auth.py	Sun Jul 26 13:58:50 2015 +0200
+++ b/kallithea/lib/auth.py	Sun Jul 26 14:07:33 2015 +0200
@@ -477,43 +477,34 @@
     def __init__(self, user_id=None, api_key=None,
             is_external_auth=False):
 
-        self.user_id = user_id
-        self._api_key = api_key # API key passed as parameter
-
-        self.api_key = None # API key set by user_model.fill_data
-        self.username = None
-        self.name = ''
-        self.lastname = ''
-        self.email = ''
         self.is_authenticated = False
-        self.admin = False
-        self.inherit_default_permissions = False
         self.is_external_auth = is_external_auth
 
-        self._propagate_data()
-
-    @LazyProperty
-    def permissions(self):
-        return self.__get_perms(user=self, cache=False)
-
-    @property
-    def api_keys(self):
-        return self._get_api_keys()
-
-    def _propagate_data(self):
         user_model = UserModel()
         self.anonymous_user = User.get_default_user(cache=True)
         is_user_loaded = False
 
+        # These attributes will be overriden by fill_data, below, unless the
+        # requested user cannot be found and the default anonymous user is
+        # not enabled.
+        self.user_id = None
+        self.username = None
+        self.api_key = None
+        self.name = ''
+        self.lastname = ''
+        self.email = ''
+        self.admin = False
+        self.inherit_default_permissions = False
+
         # lookup by userid
-        if self.user_id is not None:
-            log.debug('Auth User lookup by USER ID %s' % self.user_id)
-            is_user_loaded = user_model.fill_data(self, user_model.get(self.user_id))
+        if user_id is not None:
+            log.debug('Auth User lookup by USER ID %s' % user_id)
+            is_user_loaded = user_model.fill_data(self, user_model.get(user_id))
 
         # try go get user by API key
-        elif self._api_key:
-            log.debug('Auth User lookup by API key %s' % self._api_key)
-            is_user_loaded = user_model.fill_data(self, User.get_by_api_key(self._api_key))
+        elif api_key:
+            log.debug('Auth User lookup by API key %s' % api_key)
+            is_user_loaded = user_model.fill_data(self, User.get_by_api_key(api_key))
 
         else:
             log.debug('No data in %s that could been used to log in' % self)
@@ -522,12 +513,6 @@
         if not is_user_loaded:
             is_user_loaded =  user_model.fill_data(self, self.anonymous_user)
 
-        # Still no luck? Give up.
-        if not is_user_loaded:
-            self.user_id = None
-            self.username = None
-            self.is_authenticated = False
-
         # The anonymous user is always "logged in".
         if self.user_id == self.anonymous_user.user_id:
             self.is_authenticated = True
@@ -537,6 +522,14 @@
 
         log.debug('Auth User is now %s' % self)
 
+    @LazyProperty
+    def permissions(self):
+        return self.__get_perms(user=self, cache=False)
+
+    @property
+    def api_keys(self):
+        return self._get_api_keys()
+
     def __get_perms(self, user, explicit=True, algo='higherwin', cache=False):
         """
         Fills user permission attribute with permissions taken from database