Commit 6a90a1ae authored by Richard Glosner's avatar Richard Glosner
Browse files

### Changes

* `/auth/register` now accepts only `username`, `first_name`, and `last_name` fields (the password fields were removed)
* `/auth/register` returns only `status` and `detail` fields (the `sessionid` was removed – explicit login is required after the registration)

Closes #500
parent 098c3bfa
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -87,16 +87,11 @@ class RegisterView(APIView):
        """Register a new user."""
        registration_data = RegisterUserInput.from_request(request)
        new_user = UserManager.register_user(registration_data)

        login(request, new_user)
        logger.info(
            log_user_msg(request, request.user) + "successful registration"
        )
        return Response(
            {
                "status": "ok",
                "detail": "User registered successfully",
                "sessionid": request.session.session_key,
                "detail": "User registered successfully. "
                f"Check email '{new_user.username}' for the initial login credentials.",
            }
        )

+4 −7
Original line number Diff line number Diff line
@@ -388,24 +388,21 @@ paths:
              properties:
                username:
                  type: string
                password:
                  type: string
                repeat_password:
                  type: string
                first_name:
                  type: string
                last_name:
                  type: string
              required:
                - username
                - password
                - repeat_password
                - first_name
                - last_name
      responses:
        '200':
          description: Registration successful
          $ref: "#/components/responses/AuthResponse"
          $ref: "#/components/responses/Success"
        '400':
          description: Registration failed
          $ref: "#/components/responses/Error"
        '500':
          $ref: "#/components/responses/Error"
  
+18 −17
Original line number Diff line number Diff line
@@ -21,20 +21,15 @@ from user.models import User, Tag, UserTag


class RegisterUserInput:
    def __init__(
        self, username: str, password: str, first_name: str, last_name: str
    ):
    def __init__(self, username: str, first_name: str, last_name: str):
        self.username = username
        self.first_name = first_name
        self.last_name = last_name
        self.password = password

    @classmethod
    def from_request(cls, request: Request):
        required_fields = [
            "username",
            "password",
            "repeat_password",
            "first_name",
            "last_name",
        ]
@@ -49,15 +44,18 @@ class RegisterUserInput:
            )

        username = request.data.get("username")
        password = request.data.get("password")

        if password != request.data.get("repeat_password"):
            raise UserOperationException(f"Passwords do not match")

        first_name = request.data.get("first_name")
        last_name = request.data.get("last_name")
        first_name = request.data.get("first_name").strip()
        if len(first_name) < 2:
            raise UserOperationException(
                "First name must be at least 2 characters long"
            )
        last_name = request.data.get("last_name").strip()
        if len(last_name) < 2:
            raise UserOperationException(
                "Last name must be at least 2 characters long"
            )

        return cls(username, password, first_name, last_name)
        return cls(username, first_name, last_name)


class UserManager:
@@ -111,19 +109,22 @@ class UserManager:
            raise UserOperationException(
                f"Your email domain is not allowed to register"
            )

        cls.check_unique_username(register_input.username)

        password = User.generate_password()
        new_user = (
            User(
                first_name=register_input.first_name,
                last_name=register_input.last_name,
            )
            .set_email_username(register_input.username)
            .set_password(register_input.password)
            .set_password(password)
            .save()
        )
        logger.info(f"new user `{new_user.username}` created")

        logger.info(f"new user `{new_user.username}` registered")
        send_credentials([(new_user, password)])

        return new_user

    @classmethod