Changeset View
Changeset View
Standalone View
Standalone View
profiles/views/webhooks.py
| """Implement webhook handlers.""" | """Implement webhook handlers.""" | ||||
| from typing import Any, Dict | from typing import Any, Dict | ||||
| import hashlib | import hashlib | ||||
| import hmac | import hmac | ||||
| import json | import json | ||||
| import logging | import logging | ||||
| import requests | |||||
| from django.conf import settings | from django.conf import settings | ||||
| from django.core.exceptions import ObjectDoesNotExist | from django.core.exceptions import ObjectDoesNotExist | ||||
| from django.http import HttpResponse, HttpResponseBadRequest | from django.http import HttpResponse, HttpResponseBadRequest | ||||
| from django.http.request import HttpRequest | from django.http.request import HttpRequest | ||||
| from django.views.decorators.csrf import csrf_exempt | from django.views.decorators.csrf import csrf_exempt | ||||
| from django.views.decorators.http import require_POST | from django.views.decorators.http import require_POST | ||||
| ▲ Show 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | def handle_user_modified(payload: Dict[Any, Any]) -> None: | ||||
| # FIXME(anna) payload doesn't have username/nickname in it | # FIXME(anna) payload doesn't have username/nickname in it | ||||
| try: | try: | ||||
| user_info = bid.get_user_info(oauth_user_id) | user_info = bid.get_user_info(oauth_user_id) | ||||
| if user_info['nickname'] != user.username: | if user_info['nickname'] != user.username: | ||||
| # TODO(anna) handle duplicate usernames | # TODO(anna) handle duplicate usernames | ||||
| user.username = user_info['nickname'] | user.username = user_info['nickname'] | ||||
| user.save() | user.save() | ||||
| except requests.HTTPError: | except Exception: | ||||
| logger.exception(f'Unable to update username for {profile}') | logger.exception(f'Unable to update username for {profile}') | ||||
| if payload['email'] != user.email: | if payload['email'] != user.email: | ||||
| # TODO(anna) handle duplicate emails | # TODO(anna) handle duplicate emails | ||||
| user.email = payload['email'] | user.email = payload['email'] | ||||
| user.save() | user.save() | ||||
| if payload['full_name'] != profile.full_name: | if payload['full_name'] != profile.full_name: | ||||
| profile.full_name = payload['full_name'] | profile.full_name = payload['full_name'] | ||||
| profile.save() | profile.save() | ||||
| if payload.get('avatar_changed') or not profile.avatar.name: | if payload.get('avatar_changed') or not profile.avatar.name: | ||||
| profile.copy_avatar_from_blender_id() | profile.copy_avatar_from_blender_id() | ||||
| # Sync roles to groups | # Sync roles to groups | ||||
| group_names = payload.get('roles') or [] | group_names = payload.get('roles') or [] | ||||
| set_groups(user, group_names=group_names) | set_groups(user, group_names=group_names) | ||||