diff --git a/seahub/work_weixin/settings.py b/seahub/work_weixin/settings.py index dd2878ebf3..f3623a8e3a 100644 --- a/seahub/work_weixin/settings.py +++ b/seahub/work_weixin/settings.py @@ -19,7 +19,7 @@ WORK_WEIXIN_DEPARTMENT_MEMBERS_URL = getattr(settings, 'WORK_WEIXIN_DEPARTMENT_M WORK_WEIXIN_AGENT_ID = getattr(settings, 'WORK_WEIXIN_AGENT_ID', '') ENABLE_WORK_WEIXIN_OAUTH = getattr(settings, 'ENABLE_WORK_WEIXIN_OAUTH', False) WORK_WEIXIN_UID_PREFIX = WORK_WEIXIN_CORP_ID + '_' -AUTO_UPDATE_WORK_WEIXIN_USER_INFO = getattr(settings, 'AUTO_UPDATE_WORK_WEIXIN_USER_INFO', False) +WORK_WEIXIN_USER_INFO_AUTO_UPDATE = getattr(settings, 'WORK_WEIXIN_USER_INFO_AUTO_UPDATE', True) WORK_WEIXIN_AUTHORIZATION_URL = getattr(settings, 'WORK_WEIXIN_AUTHORIZATION_URL', 'https://open.work.weixin.qq.com/wwopen/sso/qrConnect') WORK_WEIXIN_GET_USER_INFO_URL = getattr(settings, 'WORK_WEIXIN_GET_USER_INFO_URL', diff --git a/seahub/work_weixin/utils.py b/seahub/work_weixin/utils.py index c4a2bb2071..feb27c9258 100644 --- a/seahub/work_weixin/utils.py +++ b/seahub/work_weixin/utils.py @@ -138,12 +138,27 @@ def work_weixin_notifications_check(): def update_work_weixin_user_info(api_user): """ update user profile from work weixin + + use for work weixin departments, login, profile bind """ - email = api_user.get('username') - try: - # update additional user info - nickname = api_user.get("name", None) - if nickname is not None: - Profile.objects.add_or_update(email, nickname) - except Exception as e: - logger.error(e) + # update additional user info + username = api_user.get('username') + nickname = api_user.get('name') + contact_email = api_user.get('contact_email') + + # make sure the contact_email is unique + if contact_email and Profile.objects.get_profile_by_contact_email(contact_email): + logger.warning('contact email %s already exists' % contact_email) + contact_email = '' + + profile_kwargs = {} + if nickname: + profile_kwargs['nickname'] = nickname + if contact_email: + profile_kwargs['contact_email'] = contact_email + + if profile_kwargs: + try: + Profile.objects.add_or_update(username, **profile_kwargs) + except Exception as e: + logger.error(e) diff --git a/seahub/work_weixin/views.py b/seahub/work_weixin/views.py index eb24c39248..133fded218 100644 --- a/seahub/work_weixin/views.py +++ b/seahub/work_weixin/views.py @@ -17,7 +17,7 @@ from seahub.base.accounts import User from seahub.work_weixin.settings import WORK_WEIXIN_AUTHORIZATION_URL, WORK_WEIXIN_CORP_ID, \ WORK_WEIXIN_AGENT_ID, WORK_WEIXIN_PROVIDER, \ WORK_WEIXIN_GET_USER_INFO_URL, WORK_WEIXIN_GET_USER_PROFILE_URL, WORK_WEIXIN_UID_PREFIX, \ - AUTO_UPDATE_WORK_WEIXIN_USER_INFO + WORK_WEIXIN_USER_INFO_AUTO_UPDATE from seahub.work_weixin.utils import work_weixin_oauth_check, get_work_weixin_access_token, \ handler_work_weixin_api_response, update_work_weixin_user_info from seahub.utils.auth import gen_user_virtual_id, VIRTUAL_ID_EMAIL_DOMAIN @@ -100,8 +100,8 @@ def work_weixin_oauth_callback(request): return render_error( request, _('Error, new user registration is not allowed, please contact administrator.')) - if is_new_user or AUTO_UPDATE_WORK_WEIXIN_USER_INFO: - # update user info + # update user info + if is_new_user or WORK_WEIXIN_USER_INFO_AUTO_UPDATE: user_info_data = { 'access_token': access_token, 'userid': user_id, @@ -193,8 +193,8 @@ def work_weixin_oauth_connect_callback(request): SocialAuthUser.objects.add(email, WORK_WEIXIN_PROVIDER, uid) - if AUTO_UPDATE_WORK_WEIXIN_USER_INFO: - # update user info + # update user info + if WORK_WEIXIN_USER_INFO_AUTO_UPDATE: user_info_data = { 'access_token': access_token, 'userid': user_id,