Exemplo n.º 1
0
    def login(data):
        # Assign vars
        email = data["email"]
        password = data["password"]

        try:
            # Fetch user data
            user = User.query.filter_by(email=email).first()
            if not (user):
                return err_resp(
                    "The email you have entered does not match any account.",
                    "email_404",
                    404,
                )

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

                access_token = create_access_token(identity=user.id)

                resp = message(True, "Successfully logged in.")
                resp["access_token"] = access_token
                resp["user"] = user_info

                return resp, 200

            return err_resp("Failed to log in, password may be incorrect.",
                            "password_invalid", 401)

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
Exemplo n.º 2
0
    def register(data):
        # Assign vars

        ## Required values
        email = data["email"]
        username = data["username"]
        password = data["password"]

        ## Optional
        data_name = data.get("name")

        # Check if the email is taken
        if User.query.filter_by(email=email).first() is not None:
            return err_resp("Email is already being used.", "email_taken", 403)

        # Check if the username is taken
        if User.query.filter_by(username=username).first() is not None:
            return err_resp("Username is already taken.", "username_taken",
                            403)

        try:
            new_user = User(
                email=email,
                username=username,
                name=data_name,
                password=password,
                joined_date=datetime.utcnow(),
            )

            db.session.add(new_user)
            db.session.flush()

            # Load the new user's info
            user_info = user_schema.dump(new_user)

            # Commit changes to DB
            db.session.commit()

            # Create an access token
            access_token = create_access_token(identity=new_user.id)

            resp = message(True, "User has been registered.")
            resp["access_token"] = access_token
            resp["user"] = user_info

            return resp, 201

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
Exemplo n.º 3
0
class AuthService:
    @staticmethod
    def login(data):
        # Assign vars
        email = data["email"]
        password = data["password"]

        try:
            # Fetch user data
            if not (user := User.query.filter_by(email=email).first()):
                return err_resp(
                    "The email you have entered does not match any account.",
                    "email_404",
                    404,
                )

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

                access_token = create_access_token(identity=user.id)

                resp = message(True, "Successfully logged in.")
                resp["access_token"] = access_token
                resp["user"] = user_info

                return resp, 200

            return err_resp("Failed to log in, password may be incorrect.",
                            "password_invalid", 401)
Exemplo n.º 4
0
    def login(data):
        # Assign vars
        email = data["email"]
        password = data["password"]

        try:
            # Fetch user data
            if not (user :=
                    User.objects(email=email).get_not_trashed().first()):
                return err_resp(
                    "ایمیل یا رمزعبور صحیح نمی‌باشد.",
                    "credentials_mismatch",
                    401,
                )

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

                access_token = create_access_token(identity=str(user.id))
                refresh_token = create_refresh_token(identity=str(user.id))

                resp = message(True, "ورود موفقیت آمیز.")
                resp["access_token"] = access_token
                resp["refresh_token"] = refresh_token
                resp["user"] = user_info

                return resp, 200
Exemplo n.º 5
0
    def update_data(data, public_id, current_user):
        """ Update a Project """
        if not data:
            return message(True, "Nothing to update."), 204

        if not (project :=
                Project.query.filter_by(public_id=public_id).first()):
            return err_resp("Project not found!", "project_404", 404)
Exemplo n.º 6
0
 def update(audio_id, file_type, file):
     audio_service = AudioService.audios[FiletypeEnum(file_type).value]
     content_type = file.content_type
     if content_type.split("/")[0] != "audio":
         return err_resp("Only Audio file format is allowed",
                         "invalid_audio_format", 400)
     audio = audio_service.get_object(audio_id)
     uploaded_time = datetime.datetime.now()
     if audio:
         fname = secure_filename(file.filename)
         fname = f"{uploaded_time}__{audio.id}__{fname}"
         save_path = AudioService.check_upload_dir(file_type) / fname
         file.save(save_path.__str__())
         resp = audio_service.update(audio_id, save_path, uploaded_time)
         return resp
     else:
         resp = err_resp("Audio data not found in database", "404_notfound",
                         404)
         return resp
Exemplo n.º 7
0
    def create(data, project_public_id, current_user):
        # Assign the vars
        caption = data["caption"]
        image_hash = data.get("image_hash")

        # Check if the project exists
        if not (project :=
                Project.query.filter_by(public_id=project_public_id).first()):
            return err_resp("Can't create post without project.",
                            "project_404", 404)
Exemplo n.º 8
0
 def create(data: dict):
     try:
         filetype = data["filetype"]
         data.pop("filetype")
         resp = getattr(AudioService.audios[filetype],
                        "create").__call__(data)
         return resp
     except KeyError as reason:
         return err_resp(
             f"{reason} is not a valid audio file type, try one"
             f" of audio_book, song or podcast", "400_badRequest", 400)
Exemplo n.º 9
0
 def put(self, file_type, audio_id):
     """ Upload an audio file given its id and file type"""
     try:
         file = request.files[file_type]
         return AudioService.update(audio_id, file_type, file)
     except BadRequestKeyError as e:
         current_app.logger.exception("file not found in the request files",
                                      e)
         return err_resp(
             "Unable to find file in request files.."
             " please kindly use the filetype passed"
             " ast path param as the key while uploading",
             "bad_request_400", 400)
Exemplo n.º 10
0
    def get_user_data(username):
        """ Get user data by username """
        user = User.query.filter_by(username=username).first()
        if not (user):
            return err_resp("User not found!", "user_404", 404)

        from .utils import load_data

        try:
            user_data = load_data(user)

            resp = message(True, "User data sent")
            resp["user"] = user_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
Exemplo n.º 11
0
    def create(data, current_user):
        # Assign the vars
        title = data["title"]
        difficulty = data["difficulty"]
        time_required = data["time_required"]

        abstract = data["abstract"]
        objective = data["objective"]
        safety = data.get("safety")
        content = data["content"]

        category_id = data["category_id"]

        # Check if current_user is a creator.
        if not current_user.has_role(Permission.CREATE):
            return err_resp("User is not a creator.", "user_not_creator", 403)

        # Create a new project
        try:
            from uuid import uuid4
            from .utils import create_and_load

            project = Project(
                public_id=str(uuid4().int)[:15],
                creator_id=current_user.id,
                title=title,
                difficulty=difficulty,
                time_required=time_required,
                abstract=abstract,
                objective=objective,
                safety=safety,
                content=content,
                category_id=category_id,
            )

            project_data = create_and_load(project)

            resp = message(True, "Project created.")
            resp["project"] = project_data
            return resp, 201

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp
Exemplo n.º 12
0
    def get_all_user_data():
        """ Get user data by username """
        users = User.query.all()
        if not (users):
            return err_resp("User not found!", "user_404", 404)

        from .utils import load_data

        try:
            user_data_list = []
            for user in users:
                user_data = load_data(user)
                if user_data:
                    user_data_list.append(user_data)
            resp = message(True, "User data sent")
            resp["users"] = user_data_list
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
 def update(audio_id, file_path, uploaded_time):
     if not (podcast := Podcast.query.get(audio_id)):
         return err_resp("Podcast not found", "podcast_404", 404)
 def get(pdcast_id):
     if not (song := Podcast.query.get(pdcast_id)):
         return err_resp("Podcast file not found", "audio_404", 404)
Exemplo n.º 15
0
 def get_data(public_id):
     """ Get Post data by its public id """
     if not (post := Post.query.filter_by(public_id=public_id).first()):
         return err_resp("Post not found!", "post_404", 404)
Exemplo n.º 16
0
 def update(data, public_id, current_user):
     if not (post := Post.query.filter_by(public_id=public_id).first()):
         return err_resp("Post not found.", "post_404", 404)
Exemplo n.º 17
0
 def get_data(public_id):
     """ Get Project data by its public id """
     if not (project :=
             Project.query.filter_by(public_id=public_id).first()):
         return err_resp("Project not found!", "project_404", 404)
Exemplo n.º 18
0
 def get_user_data(username):
     """ Get user data by username """
     if not (user := User.query.filter_by(username=username).first()):
         return err_resp("User not found!", "user_404", 404)
Exemplo n.º 19
0
    def get(song_id):

        if not (song := Song.query.get(song_id)):
            return err_resp("Song not found", "audio_404", 404)
Exemplo n.º 20
0
 def get_playlist_data(playlist_id):
     """ Get playlist data by playlist_id """
     if not (playlist := Playlist.query.filter_by(id=playlist_id).first()):
         return err_resp("Playlist not found!", "playlist_404", 404)
Exemplo n.º 21
0
 def update(audio_id, file_path, uploaded_time):
     if not (song := Song.query.get(audio_id)):
         return err_resp("Song not found", "song_404", 404)
Exemplo n.º 22
0
        if (post.author.public_id == current_user.public_id
                or current_user.has_role(Permission.MODERATE)
                or current_user.has_role(Permission.ADMIN)):
            try:
                from .utils import delete_post

                delete_post(post)

                resp = message(True, "Post deleted.")
                return resp, 200

            except Exception as error:
                current_app.logger.error(error)
                return internal_err_resp()

        return err_resp("Insufficient permissions!", "user_unauthorized", 401)

    @staticmethod
    def update(data, public_id, current_user):
        if not (post := Post.query.filter_by(public_id=public_id).first()):
            return err_resp("Post not found.", "post_404", 404)

        # Check if the current user is the owner.
        if post.author.public_id == current_user.public_id:
            try:
                from app import db

                if (caption := data.get("caption")):
                    post.caption = caption

                # Commit changes to db.
Exemplo n.º 23
0
 def get_user_data(id):
     """ Get user data by id """
     if not (user := User.query.filter_by(id=id).first()):
         return err_resp("User not found!", "user_404", 404)
Exemplo n.º 24
0
 def update_airport(id, data):
     """Update a specific airport by id"""
     
     if not (airport := Airport.query.filter_by(id=id).first()):
         return err_resp("Airport not found!", "airport_404", 404)
Exemplo n.º 25
0
 def get_track_data(track_id):
     """ Get track data by track_id """
     if not (track := Track.query.filter_by(id=track_id).first()):
         return err_resp("Track not found!", "track_404", 404)
Exemplo n.º 26
0
                from app import db

                for key, value in data.items():
                    # Make sure that the key is allowed to be updated.
                    if key in allowed:
                        setattr(project, key, value)

                db.session.commit()

                return message(True, "Post data updated."), 200

            except Exception as error:
                current_app.logger.error(error)
                return internal_err_resp()

        return err_resp("User is not the creator.", "user_unauthorized", 401)

    @staticmethod
    def create(data, current_user):
        # Assign the vars
        title = data["title"]
        difficulty = data["difficulty"]
        time_required = data["time_required"]

        abstract = data["abstract"]
        objective = data["objective"]
        safety = data.get("safety")
        content = data["content"]

        category_id = data["category_id"]
Exemplo n.º 27
0
 def get_airport_data(id):
     """ Get airport data by id """
     if not (airport := Airport.query.filter_by(id=id).first()):
         return err_resp("Airport not found!", "airport_404", 404)
Exemplo n.º 28
0
 def delete(public_id, current_user):
     if not (post := Post.query.filter_by(public_id=public_id).first()):
         return err_resp("Post not found.", "project_404", 404)