コード例 #1
0
    def home(request: Request):
        loggedUserId: int = request.json['user_id']
        user: User = User.query().select().where('id', loggedUserId).getOne()

        notifications: List[Notification] = Notification.query().select(
        ).where('is_read', 0).get()
        posts = Post.query().select().where('user_id', user.id).get()

        view = View(
            'home', {
                'user': user,
                'notification_count': len(notifications),
                'my_post_count': len(posts)
            }, request.json)

        return Response(ResponseType.valid, view)
コード例 #2
0
    def login(request: Request):
        username = request.json['inputs']['name']
        password: str = request.json['inputs']['password']

        passHash = hashlib.sha256(password.encode())
        passHash = passHash.hexdigest()

        users: List[User] = User.query().select().where(
            'name', username).where('passwordHash', passHash).get()
        if not users:
            view = View('',
                        {'error': 'Invalid credentials. Please try again...'},
                        request.json)
            return Response(ResponseType.error, view)

        user = users[0]
        token = user.hash()

        User_auth.query().insert(
            [user.id, token,
             datetime.today(),
             datetime.today()])

        notifications: List[Notification] = Notification.query().select(
        ).where('is_read', 0).get()
        posts = Post.query().select().where('user_id', user.id).get()

        view = View(
            'home', {
                'user': user,
                'notification_count': len(notifications),
                'my_post_count': len(posts)
            }, {
                'user_id': user.id,
                'authToken': token
            })

        return Response(ResponseType.valid, view)
コード例 #3
0
    def edit_password(request: Request):
        loggedUserId: int = request.json['user_id']
        old_password = request.json['inputs']['old_password']
        password = request.json['inputs']['password']
        re_password = request.json['inputs']['re_password']

        user: User = User.query().select().where('id', loggedUserId).getOne()

        if password != re_password:
            view = View('user.edit', {'error': 'passwords do not match'},
                        request.json)
            return Response(ResponseType.valid, view)

        passHash = hashlib.sha256(old_password.encode())
        passHash = passHash.hexdigest()

        if user.passwordHash != passHash:
            view = View('user.edit', {'error': 'old password is wrong'},
                        request.json)
            return Response(ResponseType.valid, view)

        passHash = hashlib.sha256(password.encode())
        passHash = passHash.hexdigest()

        user.passwordHash = passHash
        user.save()

        notifications: List[Notification] = Notification.query().select(
        ).where('is_read', 0).get()
        posts = Post.query().select().where('user_id', user.id).get()

        view = View(
            'home', {
                'user': user,
                'notification_count': len(notifications),
                'my_post_count': len(posts)
            }, request.json)
        return Response(ResponseType.valid, view)
コード例 #4
0
    def register(request: Request):
        username = request.json['inputs']['name']
        email = request.json['inputs']['email']
        password: str = request.json['inputs']['password']
        re_password = request.json['inputs']['re_password']
        role = 1 if request.json['inputs']['role'] == '1' else 2

        if len(password) < 8:
            view = View(
                '',
                objects={'error': 'Password too short. Please try again...'})
            return Response(ResponseType.error, view)
        if password != re_password:
            view = View('',
                        objects={
                            'error':
                            'Passwords do not match. Please try again...'
                        })
            return Response(ResponseType.error, view)
        if '@' not in email or '.' not in email:
            view = View('',
                        objects={
                            'error':
                            'Email format is wrong. Please try again...'
                        })
            return Response(ResponseType.error, view)

        user = User.query().select().where('name', username).getOne()
        if user is not None:
            view = View('',
                        objects={
                            'error':
                            'Username already taken. Please try again...'
                        })
            return Response(ResponseType.error, view)

        passHash = hashlib.sha256(password.encode())
        passHash = passHash.hexdigest()

        User.query().insert([
            username, email, '', passHash, role,
            datetime.today(),
            datetime.today()
        ])

        user: User = User.query().select().where('name', username).getOne()
        token = user.hash()

        User_auth.query().insert(
            [user.id, token,
             datetime.today(),
             datetime.today()])

        NotificationController.notifyUser(
            user,
            'Welcome to freelancerHub, Feel free to look around the site.')

        notifications: List[Notification] = Notification.query().select(
        ).where('is_read', 0).get()
        posts = Post.query().select().where('user_id', user.id).get()

        view = View(
            'home', {
                'user': user,
                'notification_count': len(notifications),
                'my_post_count': len(posts)
            }, {
                'user_id': user.id,
                'authToken': token
            })
        return Response(ResponseType.valid, view)