Skip to content
Snippets Groups Projects
Commit 7475f8e7 authored by Calum Mackervoy's avatar Calum Mackervoy
Browse files

removing all uses of urlid in username

parent 02373f82
No related branches found
No related tags found
1 merge request!120No urlid in username
Pipeline #4794 failed
import validators
from urllib.parse import urlparse from urllib.parse import urlparse
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
...@@ -189,10 +188,11 @@ def auto_urlid(sender, instance, **kwargs): ...@@ -189,10 +188,11 @@ def auto_urlid(sender, instance, **kwargs):
if 'djangoldp_account' not in settings.DJANGOLDP_PACKAGES: if 'djangoldp_account' not in settings.DJANGOLDP_PACKAGES:
def webid(self): def webid(self):
# hack : We user webid as username for external user (since it's an uniq identifier too) # an external user should have urlid set
if validators.url(self.username): webid = getattr(self, 'urlid', None)
webid = self.username if webid is not None and urlparse(settings.BASE_URL).netloc != urlparse(webid).netloc:
# unable to use username, so use user-detail URL with primary key webid = self.urlid
# local user use user-detail URL with primary key
else: else:
webid = '{0}{1}'.format(settings.BASE_URL, reverse_lazy('user-detail', kwargs={'pk': self.pk})) webid = '{0}{1}'.format(settings.BASE_URL, reverse_lazy('user-detail', kwargs={'pk': self.pk}))
return webid return webid
......
import uuid
from collections import OrderedDict, Mapping, Iterable from collections import OrderedDict, Mapping, Iterable
from typing import Any from typing import Any
from urllib import parse from urllib import parse
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractUser
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.exceptions import ValidationError as DjangoValidationError, FieldDoesNotExist from django.core.exceptions import ValidationError as DjangoValidationError, FieldDoesNotExist
from django.core.urlresolvers import get_resolver, resolve, get_script_prefix, Resolver404 from django.core.urlresolvers import get_resolver, resolve, get_script_prefix, Resolver404
...@@ -491,13 +491,14 @@ class LDPSerializer(HyperlinkedModelSerializer): ...@@ -491,13 +491,14 @@ class LDPSerializer(HyperlinkedModelSerializer):
return serializer return serializer
def to_internal_value(self, data): def to_internal_value(self, data):
user_case = self.Meta.model is get_user_model() and '@id' in data and not data['@id'].startswith( is_user_and_external = self.Meta.model is get_user_model() and '@id' in data and not data['@id'].startswith(
settings.BASE_URL) settings.BASE_URL)
if user_case: if is_user_and_external:
data['username'] = 'external' data['username'] = 'external'
ret = super().to_internal_value(data) ret = super().to_internal_value(data)
if user_case: if is_user_and_external:
ret['username'] = data['@id'] ret['urlid'] = data['@id']
ret.pop('username')
return ret return ret
def get_value(self, dictionary): def get_value(self, dictionary):
...@@ -562,8 +563,8 @@ class LDPSerializer(HyperlinkedModelSerializer): ...@@ -562,8 +563,8 @@ class LDPSerializer(HyperlinkedModelSerializer):
field_name in validated_data) and not field_name is None: field_name in validated_data) and not field_name is None:
many_to_many.append((field_name, validated_data.pop(field_name))) many_to_many.append((field_name, validated_data.pop(field_name)))
validated_data = self.remove_empty_value(validated_data) validated_data = self.remove_empty_value(validated_data)
if model is get_user_model() and 'urlid' in validated_data and not 'username' in validated_data: if model is get_user_model() and not 'username' in validated_data:
validated_data['username'] = validated_data.pop('urlid') validated_data['username'] = uuid.uuid4()
instance = model.objects.create(**validated_data) instance = model.objects.create(**validated_data)
for field_name, value in many_to_many: for field_name, value in many_to_many:
......
...@@ -37,6 +37,7 @@ settings.configure(DEBUG=False, ...@@ -37,6 +37,7 @@ settings.configure(DEBUG=False,
} }
}, },
AUTH_USER_MODEL='tests.User', AUTH_USER_MODEL='tests.User',
ANONYMOUS_USER_NAME = None,
AUTHENTICATION_BACKENDS=( AUTHENTICATION_BACKENDS=(
'django.contrib.auth.backends.ModelBackend', 'guardian.backends.ObjectPermissionBackend'), 'django.contrib.auth.backends.ModelBackend', 'guardian.backends.ObjectPermissionBackend'),
ROOT_URLCONF='djangoldp.urls', ROOT_URLCONF='djangoldp.urls',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment