Skip to content

Commit

Permalink
Add service domain
Browse files Browse the repository at this point in the history
  • Loading branch information
lullis committed May 14, 2024
1 parent c04f2a1 commit 34ad582
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 18 deletions.
25 changes: 17 additions & 8 deletions admin/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,12 @@ class IdentityCreateSerializer(serializers.ModelSerializer):
email_address = serializers.EmailField(write_only=True)
initial_password = serializers.CharField(write_only=True)
username = serializers.CharField(write_only=True)
domain = serializers.CharField(validators=[DomainValidator], write_only=True)
identity_domain = serializers.CharField(
validators=[DomainValidator], write_only=True
)
service_domain = serializers.CharField(
validators=[DomainValidator], write_only=True
)

def validate_email_address(self, value):
if User.objects.filter(email=value).exists():
Expand All @@ -24,23 +29,26 @@ def validate_initial_password(self, value):
validate_password(value)
return value

def validate_domain(self, value):
if not value:
return None

def validate_identity_domain(self, value):
if Domain.objects.filter(domain=value).exists():
raise serializers.ValidationError("Domain name is already registered")

return value

def validate_service_domain(self, value):
if Domain.objects.filter(service_domain=value).exists():
raise serializers.ValidationError("Domain name is already registered")

return value

def create(self, validated_data):
user = User.objects.create_user(
email=validated_data["email_address"],
password=validated_data["initial_password"],
)
domain = Domain.objects.create(
domain=validated_data["domain"],
service_domain=None,
domain=validated_data["identity_domain"],
service_domain=validated_data["service_domain"],
public=False,
default=False,
local=True,
Expand All @@ -63,6 +71,7 @@ class Meta:
"email_address",
"initial_password",
"username",
"domain",
"identity_domain",
"service_domain",
)
read_only_fields = ("id", "actor_uri")
3 changes: 2 additions & 1 deletion templates/admin/user_create.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ <h1>Create New User</h1>
{% include "forms/_field.html" with field=form.email_address %}
{% include "forms/_field.html" with field=form.initial_password %}
{% include "forms/_field.html" with field=form.username %}
{% include "forms/_field.html" with field=form.domain %}
{% include "forms/_field.html" with field=form.identity_domain %}
{% include "forms/_field.html" with field=form.service_domain %}
</fieldset>
<div class="buttons">
<a href="{{ editing_user.urls.admin }}?page={{ page }}" class="button secondary left">Back</a>
Expand Down
28 changes: 19 additions & 9 deletions users/views/admin/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,13 @@ class form_class(forms.Form):
email_address = forms.EmailField()
initial_password = forms.CharField(required=False, widget=forms.PasswordInput)
username = forms.CharField(help_text="Your handle at the desired domain")
domain = forms.CharField(
help_text="Domain owned by the user",
identity_domain = forms.CharField(
help_text="Identity domain, used by webfinger queries, Owned by the user",
validators=[DomainValidator],
)

service_domain = forms.CharField(
help_text="Service domain, will point to this takahe instance. Owned by the user",
validators=[DomainValidator],
)

Expand All @@ -59,14 +64,19 @@ def clean_initial_password(self):
validate_password(password)
return password

def clean_domain(self):
if not self.cleaned_data["domain"]:
return None
def clean_identity_domain(self):
domain_name = self.cleaned_data["identity_domain"]
if Domain.objects.filter(domain=domain_name).exists():
raise forms.ValidationError("Domain name is already registered")

return domain_name

if Domain.objects.filter(domain=self.cleaned_data["domain"]).exists():
def clean_service_domain(self):
domain_name = self.cleaned_data["service_domain"]
if Domain.objects.filter(service_domain=domain_name).exists():
raise forms.ValidationError("Domain name is already registered")

return self.cleaned_data["domain"]
return domain_name

@transaction.atomic()
def form_valid(self, form):
Expand All @@ -75,8 +85,8 @@ def form_valid(self, form):
password=form.cleaned_data["initial_password"],
)
domain = Domain.objects.create(
domain=form.cleaned_data["domain"],
service_domain=None,
domain=form.cleaned_data["identity_domain"],
service_domain=form.cleaned_data["service_domain"],
public=False,
default=False,
local=True,
Expand Down

0 comments on commit 34ad582

Please sign in to comment.