Beispiel #1
0
    def create_template(self, request, **kwargs):
        template_name = request.DATA.get('template_name', None)
        template_description = request.DATA.get('template_description', None)

        if not template_name:
            raise ParseError("Not valid template name")

        if not template_description:
            raise ParseError("Not valid template description")

        template_slug = slugify_uniquely(template_name, models.ProjectTemplate)

        project = self.get_object()

        self.check_permissions(request, 'create_template', project)

        template = models.ProjectTemplate(
            name=template_name,
            slug=template_slug,
            description=template_description,
        )

        template.load_data_from_project(project)
        template.save()
        return Response(serializers.ProjectTemplateSerializer(template).data,
                        status=201)
Beispiel #2
0
    def save(self, *args, **kwargs):
        if not self._importing or not self.modified_date:
            self.modified_date = timezone.now()

        if not self.slug:
            base_name = "{}-{}".format(self.owner.username, self.name)
            base_slug = slugify_uniquely(base_name, self.__class__)
            slug = base_slug
            for i in arithmetic_progression():
                if not type(self).objects.filter(
                        slug=slug).exists() or i > 100:
                    break
                slug = "{}-{}".format(base_slug, i)
            self.slug = slug

        if not self.is_backlog_activated:
            self.total_milestones = None
            self.total_story_points = None

        if not self.videoconferences:
            self.videoconferences_extra_data = None

        if not self.is_looking_for_people:
            self.looking_for_people_note = ""

        if self.anon_permissions == None:
            self.anon_permissions = []

        if self.public_permissions == None:
            self.public_permissions = []

        super().save(*args, **kwargs)
    def create_template(self, request, **kwargs):
        template_name = request.DATA.get('template_name', None)
        template_description = request.DATA.get('template_description', None)

        if not template_name:
            raise response.BadRequest(_("Invalid template name"))

        if not template_description:
            raise response.BadRequest(_("Invalid template description"))

        with advisory_lock("create-project-template"):
            template_slug = slugify_uniquely(template_name,
                                             models.ProjectTemplate)

            project = self.get_object()

            self.check_permissions(request, 'create_template', project)

            template = models.ProjectTemplate(
                name=template_name,
                slug=template_slug,
                description=template_description,
            )

            template.load_data_from_project(project)

            template.save()
        return response.Created(
            serializers.ProjectTemplateSerializer(template).data)
Beispiel #4
0
    def create_from_project(self, request, **kwargs):
        project_id = request.DATA.get('project_id', None)
        template_name = request.DATA.get('template_name', None)
        template_description = request.DATA.get('template_description', None)

        if not template_name:
            raise ParseError("Not valid template name")

        template_slug = slugify_uniquely(template_name, models.ProjectTemplate)

        domain = get_active_domain()

        try:
            project = models.Project.objects.get(domain=domain, pk=project_id)
        except models.Project.DoesNotExist:
            raise ParseError("Not valid project_id")

        template = models.ProjectTemplate(
            name=template_name,
            slug=template_slug,
            description=template_description,
            domain=domain,
        )
        template.load_data_from_project(project)
        template.save()
        return Response(self.serializer_class(template).data, status=201)
Beispiel #5
0
    def save(self, *args, **kwargs):
        if not self._importing or not self.modified_date:
            self.modified_date = timezone.now()

        if not self.slug:
            base_name = "{}-{}".format(self.owner.username, self.name)
            base_slug = slugify_uniquely(base_name, self.__class__)
            slug = base_slug
            for i in arithmetic_progression():
                if not type(self).objects.filter(slug=slug).exists() or i > 100:
                    break
                slug = "{}-{}".format(base_slug, i)
            self.slug = slug

        if not self.is_backlog_activated:
            self.total_milestones = None
            self.total_story_points = None

        if not self.videoconferences:
            self.videoconferences_extra_data = None

        if not self.is_looking_for_people:
            self.looking_for_people_note = ""

        if self.anon_permissions == None:
            self.anon_permissions = []

        if self.public_permissions == None:
            self.public_permissions = []

        super().save(*args, **kwargs)
Beispiel #6
0
    def save(self, *args, **kwargs):
        if not self._importing or not self.modified_date:
            self.modified_date = timezone.now()
        if not self.slug:
            self.slug = slugify_uniquely(self.name, self.__class__)

        super().save(*args, **kwargs)
Beispiel #7
0
    def save(self, *args, **kwargs):

        if not self._importing or not self.modified_date:
            self.modified_date = timezone.now()

        if not self.slug:
            base_name = "{}-{}".format(self.owner.username, self.name)
            base_slug = slugify_uniquely(base_name, self.__class__)
            slug = base_slug
            for i in arithmetic_progression():
                if not type(self).objects.filter(slug=slug).exists() or i > 100:
                    break
                slug = "{}-{}".format(base_slug, i)
            self.slug = slug

        if not self.videoconferences:
            self.videoconferences_salt = None

        # binh comments
    
        #if self.pk is None:
        #    self.is_backlog_activated = True
        #    self.is_kanban_activated = True
        #    self.is_wiki_activated = True        

    
        super().save(*args, **kwargs)
Beispiel #8
0
    def create_template(self, request, **kwargs):
        template_name = request.DATA.get('template_name', None)
        template_description = request.DATA.get('template_description', None)

        if not template_name:
            raise response.BadRequest(_("Not valid template name"))

        if not template_description:
            raise response.BadRequest(_("Not valid template description"))

        template_slug = slugify_uniquely(template_name, models.ProjectTemplate)

        project = self.get_object()

        self.check_permissions(request, 'create_template', project)

        template = models.ProjectTemplate(
            name=template_name,
            slug=template_slug,
            description=template_description,
        )

        template.load_data_from_project(project)
        template.save()
        return response.Created(serializers.ProjectTemplateSerializer(template).data)
Beispiel #9
0
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify_uniquely(self.name, self.__class__)
        if not self.videoconferences:
            self.videoconferences_salt = None

        super().save(*args, **kwargs)
Beispiel #10
0
    def handle(self, *args, **options):
        current_slug = options["current_slug"]
        new_slug = options["new_slug"]

        try:
            project = Project.objects.get(slug=current_slug)
        except Project.DoesNotExist:
            raise CommandError("There is no project with the slug '{}'".format(current_slug))

        slug = slugify_uniquely(new_slug, Project)
        if slug != new_slug:
            raise CommandError("Invalid new slug, maybe you can try with '{}'".format(slug))

        # Change slug
        self.stdout.write(self.style.SUCCESS("-> Change slug to '{}'.".format(slug)))
        project.slug = slug
        project.save()

        # Reset diff cache in history entries
        self.stdout.write(self.style.SUCCESS("-> Reset value_diff cache for history entries."))
        HistoryEntry.objects.filter(project=project).update(values_diff_cache=None)

        # Regenerate timeline
        self.stdout.write(self.style.SUCCESS("-> Regenerate timeline entries."))
        rebuild_timeline(None, None, project.id)
Beispiel #11
0
    def save(self, *args, **kwargs):
        if not self._importing or not self.modified_date:
            self.modified_date = timezone.now()

        if not self.is_backlog_activated:
            self.total_milestones = None
            self.total_story_points = None

        if not self.videoconferences:
            self.videoconferences_extra_data = None

        if not self.is_looking_for_people:
            self.looking_for_people_note = ""

        if self.anon_permissions is None:
            self.anon_permissions = []

        if self.public_permissions is None:
            self.public_permissions = []

        if not self.slug:
            with advisory_lock("project-creation"):
                base_slug = "{}-{}".format(self.owner.username, self.name)
                self.slug = slugify_uniquely(base_slug, self.__class__)
                super().save(*args, **kwargs)
        else:
            super().save(*args, **kwargs)
Beispiel #12
0
    def cancel(self):
        with advisory_lock("delete-user"):
            self.username = slugify_uniquely("deleted-user",
                                             User,
                                             slugfield="username")
            self.email = "{}@taiga.io".format(self.username)
            self.is_active = False
            self.full_name = "Deleted user"
            self.color = ""
            self.bio = ""
            self.lang = ""
            self.theme = ""
            self.timezone = ""
            self.colorize_tags = True
            self.token = None
            self.set_unusable_password()
            self.photo = None
            self.save()
        self.auth_data.all().delete()

        # Blocking all owned projects
        self.owned_projects.update(blocked_code=BLOCKED_BY_OWNER_LEAVING)

        # Remove all memberships
        self.memberships.all().delete()
Beispiel #13
0
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify_uniquely(self.name, self.__class__)
        if not self.videoconferences:
            self.videoconferences_salt = None

        super().save(*args, **kwargs)
def register_or_update(username: str, email: str, full_name: str):
    """
    Register new or update existing user in Django DB from LDAP data.

    Can raise `exc.IntegrityError` exceptions in case of conflict found.

    :returns: User
    """
    user_model = apps.get_model('users', 'User')

    if SLUGIFY:
        username = SLUGIFY(username)

    try:
        # has user logged in before?
        user = user_model.objects.get(username=username)
    except user_model.DoesNotExist:
        # create a new user
        username_unique = slugify_uniquely(username,
                                           user_model,
                                           slugfield='username')
        user = user_model.objects.create(username=username_unique,
                                         email=email,
                                         full_name=full_name)
        user_registered_signal.send(sender=user.__class__, user=user)
    else:
        # update DB entry if LDAP field values differ
        if user.email != email or user.full_name != full_name:
            user_object = user_model.objects.filter(pk=user.pk)
            user_object.update(email=email, full_name=full_name)
            user.refresh_from_db()

    return user
def github_register(username: str,
                    email: str,
                    full_name: str,
                    github_id: int,
                    bio: str,
                    token: str = None):
    """
    Register a new user from github.

    This can raise `exc.IntegrityError` exceptions in
    case of conflics found.

    :returns: User
    """
    auth_data_model = apps.get_model("users", "AuthData")
    user_model = apps.get_model("users", "User")

    try:
        # Github user association exist?
        auth_data = auth_data_model.objects.get(key="github", value=github_id)
        user = auth_data.user
    except auth_data_model.DoesNotExist:
        try:
            # Is a user with the same email as the github user?
            user = user_model.objects.get(email=email)
            auth_data_model.objects.create(user=user,
                                           key="github",
                                           value=github_id,
                                           extra={})
        except user_model.DoesNotExist:
            if settings.PUBLIC_REGISTER_ENABLED:
                # Create a new user
                username_unique = slugify_uniquely(username,
                                                   user_model,
                                                   slugfield="username")
                user = user_model.objects.create(email=email,
                                                 username=username_unique,
                                                 full_name=full_name,
                                                 bio=bio)
                auth_data_model.objects.create(user=user,
                                               key="github",
                                               value=github_id,
                                               extra={})

                send_register_email(user)
                user_registered_signal.send(sender=user.__class__, user=user)
            else:
                return None

    if token:
        membership = get_membership_by_token(token)

        try:
            membership.user = user
            membership.save(update_fields=["user"])
        except IntegrityError:
            raise exc.IntegrityError(
                _("This user is already a member of the project."))

    return user
Beispiel #16
0
def ldap_register(username: str, email: str, full_name: str):
    """
    Register a new user from LDAP.

    This can raise `exc.IntegrityError` exceptions in
    case of conflict found.

    :returns: User
    """
    user_model = apps.get_model("users", "User")

    try:
        # LDAP user association exist?
        user = user_model.objects.get(username=username)
    except user_model.DoesNotExist:
        # Create a new user
        username_unique = slugify_uniquely(username,
                                           user_model,
                                           slugfield="username")
        user = user_model.objects.create(email=email,
                                         username=username_unique,
                                         full_name=full_name)
        user_registered_signal.send(sender=user.__class__, user=user)

    return user
Beispiel #17
0
def gitlab_register(username:str, email:str, full_name:str, gitlab_id:int, bio:str):
    """
    Register a new user from gitlab.

    This can raise `exc.IntegrityError` exceptions in
    case of conflics found.

    :returns: User
    """
    auth_data_model = apps.get_model("users", "AuthData")
    user_model = apps.get_model("users", "User")

    try:
        # Gitlab user association exist?
        auth_data = auth_data_model.objects.get(key="gitlab", value=gitlab_id)
        user = auth_data.user
    except auth_data_model.DoesNotExist:
        try:
            # Is a user with the same email as the gitlab user?
            user = user_model.objects.get(email=email)
            auth_data_model.objects.create(user=user, key="gitlab", value=gitlab_id, extra={})
        except user_model.DoesNotExist:
            # Create a new user
            username_unique = slugify_uniquely(username, user_model, slugfield="username")
            user = user_model.objects.create(email=email,
                                             username=username_unique,
                                             full_name=full_name,
                                             bio=bio)
            auth_data_model.objects.create(user=user, key="gitlab", value=gitlab_id, extra={})

            send_register_email(user)
            user_registered_signal.send(sender=user.__class__, user=user)

    return user
Beispiel #18
0
 def save(self, *args, **kwargs):
     if not self._importing or not self.modified_date:
         self.modified_date = timezone.now()
     if not self.slug:
         with advisory_lock("milestone-creation-{}".format(self.project_id)):
             self.slug = slugify_uniquely(self.name, self.__class__)
             super().save(*args, **kwargs)
     else:
         super().save(*args, **kwargs)
Beispiel #19
0
def ping_federate_register(
    username: str,
    email: str,
    full_name: str,
    ping_federate_guid: int,
    token: str = None,
):
    """
    Register a new user from ping federate.

    This can raise `exc.IntegrityError` exceptions in
    case of conflics found.

    :returns: User
    """
    auth_data_model = apps.get_model("users", "AuthData")
    user_model = apps.get_model("users", "User")

    try:
        # Ping federate user association exist?
        auth_data = auth_data_model.objects.get(
            key=USER_KEY,
            value=ping_federate_guid,
        )
        user = auth_data.user
    except auth_data_model.DoesNotExist:
        try:
            # Is a user with the same email as the google user?
            user = user_model.objects.get(email=email)
            auth_data_model.objects.create(user=user,
                                           key=USER_KEY,
                                           value=ping_federate_guid,
                                           extra={})
        except user_model.DoesNotExist:
            # Create a new user
            username_unique = slugify_uniquely(username,
                                               user_model,
                                               slugfield="username")
            user = user_model.objects.create(
                email=email,
                username=username_unique,
                full_name=full_name,
            )
            auth_data_model.objects.create(user=user,
                                           key=USER_KEY,
                                           value=ping_federate_guid,
                                           extra={})

            send_register_email(user)
            user_registered_signal.send(sender=user.__class__, user=user)

    if token:
        membership = get_membership_by_token(token)
        membership.user = user
        membership.save(update_fields=["user"])

    return user
Beispiel #20
0
 def save(self, *args, **kwargs):
     if not self._importing or not self.modified_date:
         self.modified_date = timezone.now()
     if not self.slug:
         with advisory_lock("milestone-creation-{}".format(self.project_id)):
             self.slug = slugify_uniquely(self.name, self.__class__)
             super().save(*args, **kwargs)
     else:
         super().save(*args, **kwargs)
Beispiel #21
0
 def cancel(self):
     self.username = slugify_uniquely("deleted-user", User, slugfield="username")
     self.email = "{}@taiga.io".format(self.username)
     self.is_active = False
     self.full_name = "Deleted user"
     self.color = ""
     self.bio = ""
     self.default_language = ""
     self.default_timezone = ""
     self.colorize_tags = True
     self.token = None
     self.github_id = None
     self.set_unusable_password()
     self.save()
Beispiel #22
0
 def cancel(self):
     self.username = slugify_uniquely("deleted-user", User, slugfield="username")
     self.email = "{}@taiga.io".format(self.username)
     self.is_active = False
     self.full_name = "Deleted user"
     self.color = ""
     self.bio = ""
     self.default_language = ""
     self.default_timezone = ""
     self.colorize_tags = True
     self.token = None
     self.github_id = None
     self.set_unusable_password()
     self.save()
Beispiel #23
0
 def cancel(self):
     self.username = slugify_uniquely("deleted-user", User, slugfield="username")
     self.email = "{}@taiga.io".format(self.username)
     self.is_active = False
     self.full_name = "Deleted user"
     self.color = ""
     self.bio = ""
     self.lang = ""
     self.theme = ""
     self.timezone = ""
     self.colorize_tags = True
     self.token = None
     self.set_unusable_password()
     self.delete_photo()
     self.save()
     self.auth_data.all().delete()
Beispiel #24
0
 def cancel(self):
     self.username = slugify_uniquely("deleted-user", User, slugfield="username")
     self.email = "{}@taiga.io".format(self.username)
     self.is_active = False
     self.full_name = "Deleted user"
     self.color = ""
     self.bio = ""
     self.lang = ""
     self.theme = ""
     self.timezone = ""
     self.colorize_tags = True
     self.token = None
     self.set_unusable_password()
     self.delete_photo()
     self.save()
     self.auth_data.all().delete()
Beispiel #25
0
 def destroy(self, request, pk=None):
     user = self.get_object()
     self.check_permissions(request, "destroy", user)
     user.username = slugify_uniquely("deleted-user", models.User, slugfield="username")
     user.email = "{}@taiga.io".format(user.username)
     user.is_active = False
     user.full_name = "Deleted user"
     user.color = ""
     user.bio = ""
     user.default_language = ""
     user.default_timezone = ""
     user.colorize_tags = True
     user.token = None
     user.github_id = None
     user.set_unusable_password()
     user.save()
     return Response(status=status.HTTP_204_NO_CONTENT)
Beispiel #26
0
    def save(self, *args, **kwargs):
        if not self._importing or not self.modified_date:
            self.modified_date = timezone.now()

        if not self.slug:
            base_slug = slugify_uniquely(self.name, self.__class__)
            slug = base_slug
            for i in arithmetic_progression():
                if not type(self).objects.filter(slug=slug).exists() or i > 100:
                    break
                slug = "{}-{}".format(base_slug, i)
            self.slug = slug

        if not self.videoconferences:
            self.videoconferences_salt = None

        super().save(*args, **kwargs)
Beispiel #27
0
def github_register(username: str,
                    email: str,
                    full_name: str,
                    github_id: int,
                    bio: str,
                    token: str = None):
    """
    Register a new user from github.

    This can raise `exc.IntegrityError` exceptions in
    case of conflics found.

    :returns: User
    """
    user_model = apps.get_model("users", "User")

    try:
        # Github user association exist?
        user = user_model.objects.get(github_id=github_id)
    except user_model.DoesNotExist:
        try:
            # Is a user with the same email as the github user?
            user = user_model.objects.get(email=email)
            user.github_id = github_id
            user.save(update_fields=["github_id"])
        except user_model.DoesNotExist:
            # Create a new user
            username_unique = slugify_uniquely(username,
                                               user_model,
                                               slugfield="username")
            user = user_model.objects.create(email=email,
                                             username=username_unique,
                                             github_id=github_id,
                                             full_name=full_name,
                                             bio=bio)

            send_register_email(user)
            user_registered_signal.send(sender=user.__class__, user=user)

    if token:
        membership = get_membership_by_token(token)
        membership.user = user
        membership.save(update_fields=["user"])

    return user
Beispiel #28
0
    def save(self, *args, **kwargs):
        if not self._importing or not self.modified_date:
            self.modified_date = timezone.now()

        if not self.slug:
            base_name = "{}-{}".format(self.owner.username, self.name)
            base_slug = slugify_uniquely(base_name, self.__class__)
            slug = base_slug
            for i in arithmetic_progression():
                if not type(self).objects.filter(slug=slug).exists() or i > 100:
                    break
                slug = "{}-{}".format(base_slug, i)
            self.slug = slug

        if not self.videoconferences:
            self.videoconferences_extra_data = None

        super().save(*args, **kwargs)
Beispiel #29
0
 def destroy(self, request, pk=None):
     user = self.get_object()
     self.check_permissions(request, "destroy", user)
     user.username = slugify_uniquely("deleted-user",
                                      models.User,
                                      slugfield="username")
     user.email = "{}@taiga.io".format(user.username)
     user.is_active = False
     user.full_name = "Deleted user"
     user.color = ""
     user.bio = ""
     user.default_language = ""
     user.default_timezone = ""
     user.colorize_tags = True
     user.token = None
     user.github_id = None
     user.set_unusable_password()
     user.save()
     return Response(status=status.HTTP_204_NO_CONTENT)
Beispiel #30
0
    def cancel(self):
        self.username = slugify_uniquely("deleted-user", User, slugfield="username")
        self.email = "{}@taiga.io".format(self.username)
        self.is_active = False
        self.full_name = "Deleted user"
        self.color = ""
        self.bio = ""
        self.lang = ""
        self.theme = ""
        self.timezone = ""
        self.colorize_tags = True
        self.token = None
        self.set_unusable_password()
        self.photo = None
        self.save()
        self.auth_data.all().delete()

        #Blocking all owned users
        self.owned_projects.update(blocked_code=BLOCKED_BY_OWNER_LEAVING)
def slack_register(username:str, email:str, full_name:str, slack_id:int, bio:str, token:str=None):
    """
    Register a new user from slack.

    This can raise `exc.IntegrityError` exceptions in
    case of conflics found.

    :returns: User
    """
    auth_data_model = apps.get_model("users", "AuthData")
    user_model = apps.get_model("users", "User")

    try:
        # slack user association exist?
        auth_data = auth_data_model.objects.get(key="slack", value=slack_id)
        user = auth_data.user
    except auth_data_model.DoesNotExist:
        try:
            # Is a user with the same email as the slack user?
            user = user_model.objects.get(email=email)
            auth_data_model.objects.create(user=user, key="slack", value=slack_id, extra={})
        except user_model.DoesNotExist:
            # Create a new user
            username_unique = slugify_uniquely(username, user_model, slugfield="username")
            user = user_model.objects.create(email=email,
                                             username=username_unique,
                                             full_name=full_name,
                                             bio=bio)
            auth_data_model.objects.create(user=user, key="slack", value=slack_id, extra={})

            send_register_email(user)
            user_registered_signal.send(sender=user.__class__, user=user)

    if token:
        membership = get_membership_by_token(token)

        try:
            membership.user = user
            membership.save(update_fields=["user"])
        except IntegrityError:
            raise exc.IntegrityError(_("This user is already a member of the project."))

    return user
Beispiel #32
0
    def save(self, *args, **kwargs):
        if not self._importing or not self.modified_date:
            self.modified_date = timezone.now()

        if not self.slug:
            base_name = "{}-{}".format(self.owner.username, self.name)
            base_slug = slugify_uniquely(base_name, self.__class__)
            slug = base_slug
            for i in arithmetic_progression():
                if not type(self).objects.filter(slug=slug).exists() or i > 100:
                    break
                slug = "{}-{}".format(base_slug, i)
            self.slug = slug

        if not self.videoconferences:
            self.videoconferences_extra_data = None

        if not self.is_looking_for_people:
            self.looking_for_people_note = ""

        super().save(*args, **kwargs)
Beispiel #33
0
def saml_register(saml_id, user_attributes, token=None):
    auth_data_model = apps.get_model('users', 'AuthData')
    user_model = apps.get_model('users', 'User')

    try:
        # SAML user association exist?
        auth_data = auth_data_model.objects.get(key="saml", value=saml_id)
        user = auth_data.user
    except auth_data_model.DoesNotExist:
        try:
            # Is a there a user with the same email as the SAML user?
            user = user_model.objects.get(email=user_attributes['email'])
            auth_data_model.objects.create(user=user,
                                           key='saml',
                                           value=saml_id,
                                           extra={})
        except user_model.DoesNotExist:
            # Create a new user
            user_attributes['username'] = slugify_uniquely(
                user_attributes['username'], user_model, slugfield='username')
            user = user_model.objects.create(**user_attributes)
            auth_data_model.objects.create(user=user,
                                           key='saml',
                                           value=saml_id,
                                           extra={})

            send_register_email(user)
            user_registered_signal.send(sender=user.__class__, user=user)

    if token:
        membership = get_membership_by_token(token)

        try:
            membership.user = user
            membership.save(update_fields=['user'])
        except IntegrityError:
            raise exc.IntegrityError(
                _("This user is already a member of the project."))

    return user
Beispiel #34
0
def github_register(username:str, email:str, full_name:str, github_id:int, bio:str, token:str=None):
    """
    Register a new user from github.

    This can raise `exc.IntegrityError` exceptions in
    case of conflics found.

    :returns: User
    """
    user_model = apps.get_model("users", "User")

    try:
        # Github user association exist?
        user = user_model.objects.get(github_id=github_id)
    except user_model.DoesNotExist:
        try:
            # Is a user with the same email as the github user?
            user = user_model.objects.get(email=email)
            user.github_id = github_id
            user.save(update_fields=["github_id"])
        except user_model.DoesNotExist:
            # Create a new user
            username_unique = slugify_uniquely(username, user_model, slugfield="username")
            user = user_model.objects.create(email=email,
                                             username=username_unique,
                                             github_id=github_id,
                                             full_name=full_name,
                                             bio=bio)

            send_register_email(user)
            user_registered_signal.send(sender=user.__class__, user=user)

    if token:
        membership = get_membership_by_token(token)
        membership.user = user
        membership.save(update_fields=["user"])

    return user
def ldap_register(username: str, email: str, full_name: str):
    """
    Register a new user from LDAP.

    This can raise `exc.IntegrityError` exceptions in
    case of conflict found.

    :returns: User
    """
    user_model = apps.get_model("users", "User")

    try:
        # LDAP user association exist?
        user = user_model.objects.get(username=username)
    except user_model.DoesNotExist:
        # Create a new user
        username_unique = slugify_uniquely(username, user_model, slugfield="username")
        user = user_model.objects.create(email=email,
                                         username=username_unique,
                                         full_name=full_name)
        user_registered_signal.send(sender=user.__class__, user=user)

    return user
Beispiel #36
0
    def create_from_project(self, request, **kwargs):
        project_id = request.DATA.get('project_id', None)
        template_name = request.DATA.get('template_name', None)
        template_description = request.DATA.get('template_description', None)

        if not template_name:
            raise ParseError("Not valid template name")

        template_slug = slugify_uniquely(template_name, models.ProjectTemplate)

        try:
            project = models.Project.objects.get(pk=project_id)
        except models.Project.DoesNotExist:
            raise ParseError("Not valid project_id")

        template = models.ProjectTemplate(
            name=template_name,
            slug=template_slug,
            description=template_description,
        )

        template.load_data_from_project(project)
        template.save()
        return Response(self.serializer_class(template).data, status=201)
Beispiel #37
0
    def cancel(self):
        with advisory_lock("delete-user"):
            deleted_user_prefix = "deleted-user-{}".format(timestamp_ms())
            self.username = slugify_uniquely(deleted_user_prefix, User, slugfield="username")
            self.email = "{}@taiga.io".format(self.username)
            self.is_active = False
            self.full_name = "Deleted user"
            self.color = ""
            self.bio = ""
            self.lang = ""
            self.theme = ""
            self.timezone = ""
            self.colorize_tags = True
            self.token = None
            self.set_unusable_password()
            self.photo = None
            self.save()
        self.auth_data.all().delete()

        # Blocking all owned projects
        self.owned_projects.update(blocked_code=BLOCKED_BY_OWNER_LEAVING)

        # Remove all memberships
        self.memberships.all().delete()
Beispiel #38
0
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify_uniquely(self.name, self.__class__)

        super().save(*args, **kwargs)
Beispiel #39
0
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify_uniquely(self.name, self.__class__)

        super().save(*args, **kwargs)
def ping_federate_register(
        username: str,
        email: str,
        full_name: str,
        ping_federate_guid: int,
        token: str=None,
):
    """
    Register a new user from ping federate.

    This can raise `exc.IntegrityError` exceptions in
    case of conflics found.

    :returns: User
    """
    auth_data_model = apps.get_model("users", "AuthData")
    user_model = apps.get_model("users", "User")

    try:
        # Ping federate user association exist?
        auth_data = auth_data_model.objects.get(
            key=USER_KEY,
            value=ping_federate_guid,
        )
        user = auth_data.user
    except auth_data_model.DoesNotExist:
        try:
            # Is a user with the same email as the google user?
            user = user_model.objects.get(email=email)
            auth_data_model.objects.create(
                user=user,
                key=USER_KEY,
                value=ping_federate_guid,
                extra={}
            )
        except user_model.DoesNotExist:
            # Create a new user
            username_unique = slugify_uniquely(
                username,
                user_model,
                slugfield="username"
            )
            user = user_model.objects.create(
                email=email,
                username=username_unique,
                full_name=full_name,
            )
            auth_data_model.objects.create(
                user=user,
                key=USER_KEY,
                value=ping_federate_guid,
                extra={}
            )

            send_register_email(user)
            user_registered_signal.send(
                sender=user.__class__,
                user=user
            )

    if token:
        membership = get_membership_by_token(token)
        membership.user = user
        membership.save(update_fields=["user"])

    return user