Esempio n. 1
0
    def dispatch_request(self, username: str):
        current_username = session['active_user']['username']
        current_user = db_user(username=current_username)
        user_account = db_user(username=username)

        if not user_account:
            abort(403)

        #getting back to this later. This will delete everything. Need better functions to maintain content even users are deleted.
        if current_user.username == user_account.username or current_user.is_admin:
            user_comments = db_comments(author=user_account)
            user_posts = db_posts(author=user_account)
            for comment in user_comments:
                db.session.delete(comment)
            for post in user_posts:
                db.session.delete(post)
            db.session.delete(user_account)
            db.session.commit()

        if current_user.is_admin:
            flash(f'Account { username } is successfully deleted.', 'success')
            return redirect(url_for('users.Dashboard'))

        session.clear()
        flash(f'Account { username } is successfully deleted.', 'success')
        return redirect(url_for('users.Login'))
Esempio n. 2
0
    def dispatch_request(self):

        if user_authenticated():
            return redirect(url_for('users.Dashboard'))

        form = LoginForm()
        if request.method == 'POST':
            if form.validate_on_submit():
                username = form.username.data
                password = form.password.data

                try:
                    if credential_valid(username, password):
                        current_user = db_user(username=username)
                        session['active_user'] = {
                            'id': current_user.id,
                            'username': current_user.username,
                            'is_authenticated': True
                        }

                        return redirect(url_for('users.Dashboard'))
                    else:
                        flash(
                            f'Login Unsuccessful. Please check username and password again.',
                            'error')
                        return redirect(url_for(request.endpoint))

                except Exception as e:
                    flash(
                        'Login Unsuccessful. Please check username and password again.',
                        'error')
                    return redirect(url_for(request.endpoint))

        return render_template('login.html', form=form)
Esempio n. 3
0
    def dispatch_request(self):
        form = PostForm()
        username = session['active_user']['username']
        author = db_user(username=username)
        posts = db_posts(author=author)

        if request.method == 'POST':
            if form.validate_on_submit():
                title = form.title.data
                content = form.content.data
                tag = form.tag.data

                try:
                    new_post = Post(author=author,
                                    title=title,
                                    content=content,
                                    tag=tag)
                    db.session.add(new_post)
                    db.session.commit()
                    flash('Your post is successfully submitted', 'success')
                    return redirect(url_for(request.endpoint))
                except Exception as e:
                    flash('Invalid inputs.', 'error')
                    return redirect(url_for(request.endpoint))

        return render_template('admin.html',
                               username=username,
                               form=form,
                               posts=posts)
Esempio n. 4
0
    def dispatch_request(self):
        username = session['active_user']['username']
        current_user = db_user(username=username)
        if current_user.is_admin:
            return redirect(url_for('users.Admin'))

        return render_template('dashboard.html', username=username)
Esempio n. 5
0
    def dispatch_request(self):
        username = session['active_user']['username']
        current_user = db_user(username=username)

        try:
            payload = {
                'iss': 'vireak.tech',
                'exp':
                datetime.datetime.utcnow() + datetime.timedelta(minutes=5),
                'iat': datetime.datetime.utcnow(),
                'name': current_user.username,
                'email': current_user.email,
                'sub': current_user.id
            }
            token = jwt.encode(payload=payload,
                               key=SECRET_KEY,
                               algorithm='HS256')
            token = token.decode('UTF-8')
            message = {'status': 'success', 'token': token}
        except Exception as e:
            message = {
                'status': 'fail',
                'message': 'Unable to generate token. Please try again.'
            }
            return jsonify(message), 401

        return jsonify(message), 200
Esempio n. 6
0
    def get(self, username:str):

        user = db_user(username=username)
        if not user:
            return jsonify({'error': 'user not found'}), 400

        user_token = token_decoded()

        if user_token['status']=='missing':
            return jsonify({'message': 'a valid token is missing. Permission denied.'}), 401
        if user_token['status']=='expired':
            return jsonify({'message': 'token expired. Please obtain new token.'}), 401
        if user_token['status']=='invalid':
            return jsonify({'message': 'invalid token.'}), 401

        if user_token['status']=='valid':
            if user_token['username'] != username:
                return jsonify({'error': 'permission denied'}), 401

            api_response = []
            user_payload = {
                'id': user.id,
                'username': user.username,
                'email': user.email,
                'phone': user.phone,
                'date_registered': user.date_registered
            }
            api_response.append(user_payload)

            return jsonify(api_response), 200

        return jsonify({'error': 'permission denied'}), 401
            
Esempio n. 7
0
    def dispatch_request(self, post_id: int):
        post = db_posts(id=post_id)
        comments = db_comments(post_id=post_id)
        user_loggedin = user_authenticated()

        form = CommentForm()
        if user_loggedin:
            if request.method == 'POST':
                if form.validate_on_submit():
                    comment = form.comment.data
                    try:
                        username = session['active_user']['username']
                        author = db_user(username=username)
                        parent_post = db_posts(id=post_id)
                        new_comment = Comment(comment=comment,
                                              parent_post=parent_post,
                                              author=author)
                        db.session.add(new_comment)
                        db.session.commit()
                        flash('Your comment is successfully posted.',
                              'success')
                        return redirect(
                            url_for(request.endpoint, post_id=post_id))
                    except:
                        flash('Some errors occurred.', 'error')
                        return redirect(
                            url_for(request.endpoint, post_id=post_id))

        return render_template('post.html',
                               post=post,
                               comments=comments,
                               form=form,
                               user_loggedin=user_loggedin)