40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
import os
|
|
|
|
from allauth.account.adapter import DefaultAccountAdapter
|
|
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
|
|
from django.urls import reverse
|
|
|
|
from .models import ClientProfile
|
|
|
|
|
|
class TecvicoAccountAdapter(DefaultAccountAdapter):
|
|
def get_login_redirect_url(self, request):
|
|
return reverse("projects:dashboard")
|
|
|
|
def get_signup_redirect_url(self, request):
|
|
return reverse("projects:dashboard")
|
|
|
|
|
|
class TecvicoSocialAccountAdapter(DefaultSocialAccountAdapter):
|
|
def save_user(self, request, sociallogin, form=None):
|
|
user = super().save_user(request, sociallogin, form)
|
|
self._apply_profile_names(user, sociallogin)
|
|
user.save()
|
|
ClientProfile.objects.get_or_create(user=user)
|
|
return user
|
|
|
|
def _apply_profile_names(self, user, sociallogin):
|
|
extra_data = sociallogin.account.extra_data or {}
|
|
if sociallogin.account.provider == "google":
|
|
if not user.first_name:
|
|
user.first_name = extra_data.get("given_name", "")
|
|
if not user.last_name:
|
|
user.last_name = extra_data.get("family_name", "")
|
|
return
|
|
if sociallogin.account.provider == "github" and not user.first_name:
|
|
name = (extra_data.get("name") or "").strip()
|
|
if name:
|
|
parts = name.split(" ", 1)
|
|
user.first_name = parts[0]
|
|
user.last_name = parts[1] if len(parts) > 1 else ""
|