From c4cd558f48aacd6c34fbfbbd1d23acfe6a98e591 Mon Sep 17 00:00:00 2001 From: Megan Henning <meganhenning@flywheel.io> Date: Wed, 5 Apr 2017 15:34:15 -0500 Subject: [PATCH] Use gravatar as default if exists --- api/auth/authproviders.py | 11 +++++++++-- api/handlers/collectionshandler.py | 7 ++++--- api/handlers/containerhandler.py | 8 ++++---- api/handlers/grouphandler.py | 7 ++++--- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/api/auth/authproviders.py b/api/auth/authproviders.py index 1f11a91b..e3fb5238 100644 --- a/api/auth/authproviders.py +++ b/api/auth/authproviders.py @@ -48,12 +48,19 @@ class AuthProvider(object): raise APIUnknownUserException('User {} is disabled.'.format(uid)) def set_user_gravatar(self, uid, email): + """ + Looks for user gravatar via email. If a gravatar is found, adds to avatar map. + If the user has not yet set an avatar (first time logging in), set the default + avatar to the gravatar image. + """ if email and uid: gravatar = util.resolve_gravatar(email) if gravatar is not None: timestamp = datetime.datetime.utcnow() # Update the user's gravatar if it has changed. - config.db.users.update_one({'_id': uid, 'avatars.gravatar': {'$ne': gravatar}}, {'$set':{'avatars.gravatar': gravatar, 'modified': timestamp}}) + config.db.users.update_one({'_id': uid, 'avatars.gravatar': {'$ne': gravatar}},{'$set':{'avatars.gravatar': gravatar,'modified': timestamp}}) + # If the user has no avatar set, use gravar + config.db.users.update_one({'_id': uid, 'avatar': {'$exists': False}}, {'$set':{'avatar': gravatar, 'modified': timestamp}}) def set_refresh_token_if_exists(self, uid, refresh_token): # Also check to make sure if refresh token is missing, that the user @@ -163,8 +170,8 @@ class GoogleOAuthProvider(AuthProvider): raise APIAuthProviderException('Auth provider did not provide user email') self.ensure_user_exists(uid) - self.set_user_avatar(uid, identity) self.set_user_gravatar(uid, uid) + self.set_user_avatar(uid, identity) return uid diff --git a/api/handlers/collectionshandler.py b/api/handlers/collectionshandler.py index 2cede707..8076348c 100644 --- a/api/handlers/collectionshandler.py +++ b/api/handlers/collectionshandler.py @@ -109,9 +109,10 @@ class CollectionsHandler(ContainerHandler): permchecker = containerauth.list_permission_checker(self) query = {} results = permchecker(self.storage.exec_op)('GET', query=query, public=self.public_request, projection=projection) - if results is None: - self.abort(404, 'Element not found in collection {}'.format(self.storage.cont_name)) - self._filter_all_permissions(results, self.uid, self.user_site) + if not self.superuser_request and not self.is_true('join_avatars'): + self._filter_all_permissions(results, self.uid, self.user_site) + if self.is_true('join_avatars'): + results = ContainerHandler.join_user_info(results) for result in results: if self.is_true('stats'): result = containerutil.get_stats(result, 'collections') diff --git a/api/handlers/containerhandler.py b/api/handlers/containerhandler.py index 8d8b9ee6..853c9665 100644 --- a/api/handlers/containerhandler.py +++ b/api/handlers/containerhandler.py @@ -190,7 +190,7 @@ class ContainerHandler(base.RequestHandler): users = {user['_id']: user for user in users_list} for r in results: - permissions = r.get('permissions', []) + permissions = r.get('permissions') or r.get('roles', []) for p in permissions: user = users[p['_id']] @@ -325,8 +325,8 @@ class ContainerHandler(base.RequestHandler): results = permchecker(self.storage.exec_op)('GET', query=query, public=self.public_request, projection=projection) if results is None: self.abort(404, 'No elements found in container {}'.format(self.storage.cont_name)) - # return only permissions of the current user - if not self.superuser_request and not self.is_true('avatars'): + # return only permissions of the current user unless superuser or getting avatars + if not self.superuser_request and not self.is_true('join_avatars'): self._filter_all_permissions(results, self.uid, self.user_site) # the "count" flag add a count for each container returned if self.is_true('counts'): @@ -345,7 +345,7 @@ class ContainerHandler(base.RequestHandler): result = self.handle_origin(result) modified_results.append(result) - if self.is_true('avatars'): + if self.is_true('join_avatars'): modified_results = self.join_user_info(modified_results) return modified_results diff --git a/api/handlers/grouphandler.py b/api/handlers/grouphandler.py index 86f3627e..97dd2d6a 100644 --- a/api/handlers/grouphandler.py +++ b/api/handlers/grouphandler.py @@ -5,6 +5,7 @@ from .. import util from .. import validators from ..auth import groupauth from ..dao import containerstorage +from .containerhandler import ContainerHandler class GroupHandler(base.RequestHandler): @@ -41,10 +42,10 @@ class GroupHandler(base.RequestHandler): projection = {'name': 1, 'created': 1, 'modified': 1, 'roles': [], 'tags': []} permchecker = groupauth.list_permission_checker(self, uid) results = permchecker(self.storage.exec_op)('GET', projection=projection) - if results is None: - self.abort(404, 'Not found') - if not self.superuser_request: + if not self.superuser_request and not self.is_true('join_avatars'): self._filter_roles(results, self.uid, self.user_site) + if self.is_true('join_avatars'): + results = ContainerHandler.join_user_info(results) return results def put(self, _id): -- GitLab