68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
from __future__ import absolute_import
|
|
|
|
from django import forms
|
|
|
|
from allauth.account.forms import BaseSignupForm
|
|
|
|
from . import app_settings, signals
|
|
from .adapter import get_adapter
|
|
from .models import SocialAccount
|
|
|
|
|
|
class SignupForm(BaseSignupForm):
|
|
def __init__(self, *args, **kwargs):
|
|
self.sociallogin = kwargs.pop("sociallogin")
|
|
initial = get_adapter().get_signup_form_initial_data(self.sociallogin)
|
|
kwargs.update(
|
|
{
|
|
"initial": initial,
|
|
"email_required": kwargs.get(
|
|
"email_required", app_settings.EMAIL_REQUIRED
|
|
),
|
|
}
|
|
)
|
|
super(SignupForm, self).__init__(*args, **kwargs)
|
|
|
|
def save(self, request):
|
|
adapter = get_adapter()
|
|
user = adapter.save_user(request, self.sociallogin, form=self)
|
|
self.custom_signup(request, user)
|
|
return user
|
|
|
|
def validate_unique_email(self, value):
|
|
try:
|
|
return super(SignupForm, self).validate_unique_email(value)
|
|
except forms.ValidationError:
|
|
raise forms.ValidationError(
|
|
get_adapter().error_messages["email_taken"]
|
|
% self.sociallogin.account.get_provider().name
|
|
)
|
|
|
|
|
|
class DisconnectForm(forms.Form):
|
|
account = forms.ModelChoiceField(
|
|
queryset=SocialAccount.objects.none(),
|
|
widget=forms.RadioSelect,
|
|
required=True,
|
|
)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.request = kwargs.pop("request")
|
|
self.accounts = SocialAccount.objects.filter(user=self.request.user)
|
|
super(DisconnectForm, self).__init__(*args, **kwargs)
|
|
self.fields["account"].queryset = self.accounts
|
|
|
|
def clean(self):
|
|
cleaned_data = super(DisconnectForm, self).clean()
|
|
account = cleaned_data.get("account")
|
|
if account:
|
|
get_adapter(self.request).validate_disconnect(account, self.accounts)
|
|
return cleaned_data
|
|
|
|
def save(self):
|
|
account = self.cleaned_data["account"]
|
|
account.delete()
|
|
signals.social_account_removed.send(
|
|
sender=SocialAccount, request=self.request, socialaccount=account
|
|
)
|