Example #1
0
    def get_user_info(username):
        user = User.query.filter_by(username=username).first()
        if not user:
            response_object = {"success": False, "message": "User not found!"}
            return response_object, 404

        user_schema = UserSchema()
        user_info = user_schema.dump(user)

        unnecessary_info = ("password_hash", "id", "comment_likes",
                            "reply_likes")
        # Remove unnecessary info
        for info in unnecessary_info:
            del user_info[info]

        # Add avatar if there are any
        if user_info["profile_picture"]:
            user_info["avatar"] = get_image(user_info["profile_picture"],
                                            "avatars")

        response_object = {
            "success": True,
            "message": "User data sent.",
            "user": user_info,
        }
        return response_object, 200
def load_author(user_public_id):
    # Add the author's essential details.
    user_schema = UserSchema()
    user = load_by_public_id(user_public_id)
    author = user_schema.dump(user)

    # Remove sensitive information
    for info in private_info:
        del author[info]

    # Add avatar if there are any
    if author["profile_picture"]:
        author["avatar"] = get_image(author["profile_picture"], "avatars")

    return author
    def register(data):
        try:
            # Assign the vars
            email = data["email"]
            username = data["username"]
            full_name = data["full_name"]
            password = data["password"]
            entry_key = data["entry_key"]

            # Check if email exists
            if len(email) == 0 or email is None:
                response_object = {
                    "success": False,
                    "message": "Email is required!",
                    "error_reason": "no_email",
                }
                return response_object, 403

            # Check if the email is being used
            if User.query.filter_by(email=email).first() is not None:
                response_object = {
                    "success": False,
                    "message": "Email is being used in another account.",
                    "error_reason": "email_used",
                }
                return response_object, 403

            # Check if the email is valid
            elif not EMAIl_REGEX.match(email):
                response_object = {
                    "success": False,
                    "message": "Invalid email!",
                    "error_reason": "email_invalid",
                }
                return response_object, 403

            # Check if the username is empty
            if len(username) == 0 or username is None:
                response_object = {
                    "success": False,
                    "message": "Username is required!",
                    "error_reason": "no_username",
                }
                return response_object, 403

            # Check if the username is being used
            elif User.query.filter_by(username=username).first() is not None:
                response_object = {
                    "success": False,
                    "message": "Username is already taken!",
                    "error_reason": "username_taken",
                }
                return response_object, 403

            # Check if the username is equal to or between 4 and 15
            elif not 4 <= len(username) <= 15:
                response_object = {
                    "success": False,
                    "message": "Username length is invalid!",
                    "error_reason": "username_invalid",
                }
                return response_object, 403

            # Check if the username is alpha numeric
            elif not username.isalnum():
                response_object = {
                    "success": False,
                    "message": "Username is not alpha numeric",
                    "error_reason": "username_not_alpha_numeric",
                }
                return response_object, 403

            # Verify the full name and if it exists
            if len(full_name) == 0 or full_name is None:
                full_name = None

            else:
                # Validate the full name
                # Remove any spaces so that it properly checks.
                if not full_name.replace(" ", "").isalpha():
                    response_object = {
                        "success": False,
                        "message": "Name is not alphabetical!",
                        "error_reason": "fullname_notalpha",
                    }
                    return response_object, 403

                # Check if the full name is equal to or between 2 and 50
                elif not 2 <= len(full_name) <= 50:
                    response_object = {
                        "success": False,
                        "message": "Name is length is invalid!",
                        "error_reason": "fullname_invalid!",
                    }
                    return response_object, 403

                # Replace multiple spaces with one.
                # 'firstName    lastName' -> 'firstName lastName'
                re.sub(" +", " ", full_name)

            # Check if the entry key is right
            if entry_key != current_app.config["ENTRY_KEY"]:
                response_object = {
                    "success": False,
                    "message": "Entry key is invalid!",
                    "error_reason": "entrykey_invalid",
                }
                return response_object, 403

            # Create new user object
            new_user = User(
                public_id=str(uuid4().int)[:15],
                email=email,
                username=username,
                full_name=full_name,
                password=password,
                joined_date=datetime.now(),
            )

            # Add and commit the user to the database
            db.session.add(new_user)
            db.session.flush()

            # Get the user's info
            user_schema = UserSchema()
            user_info = user_schema.dump(new_user)

            # Save changes
            db.session.commit()

            # Remove private information from user info
            for info in private_info:
                del user_info[info]

            # Return success response
            access_token = create_access_token(identity=new_user.id)
            response_object = {
                "success": True,
                "message": "User has successfully been registered.",
                "Authorization": access_token,
                "user": user_info,
            }
            return response_object, 201

        except Exception as error:
            print(error)
            response_object = {
                "success": False,
                "message": "Something went wrong during the process!",
                "error_reason": "server_error",
            }
            return response_object, 500
    def login_user(data):
        # Assign variables
        email = data["email"]
        password = data["password"]

        try:
            # Check if email or password was provided
            if not email or not password:
                response_object = {
                    "success": False,
                    "message": "Credentials not fully provided",
                    "error_reason": "no_credentials",
                }
                return response_object, 403

            # Fetch the user data
            user = User.query.filter_by(email=email).first()
            if not user:
                response_object = {
                    "success": False,
                    "message":
                    "The email you have entered does not match any account.",
                    "error_reason": "email_404",
                }
                return response_object, 404

            elif user and user.check_password(password):
                user_schema = UserSchema()
                user_info = user_schema.dump(user)

                # Remove sensitive information
                for info in private_info:
                    del user_info[info]

                # Check if the user has an avatar
                if user_info["profile_picture"]:
                    user_info["avatar"] = get_image(
                        user_info["profile_picture"], "avatars")

                access_token = create_access_token(identity=user.id)

                if access_token:
                    response_object = {
                        "success": True,
                        "message": "Successfully logged in.",
                        "Authorization": access_token,
                        "user": user_info,
                    }
                    return response_object, 200

            # Return incorrect password if others fail
            response_object = {
                "success": False,
                "message": "Failed to log in, password may be incorrect.",
                "error_reason": "incorrect_password",
            }
            return response_object, 403

        except Exception as error:
            print(error)
            response_object = {
                "success": False,
                "message": "Something went wrong during the process!",
                "error_reason": "server_issues",
            }
            return response_object, 500