Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Controllers for user."""
- from flask import Blueprint, request, jsonify
- from sqlalchemy.exc import IntegrityError
- from flask_login import login_user, logout_user, current_user
- from .models import User
- from app import login_manager, db
- mod_user = Blueprint('user', __name__, url_prefix='/api')
- @login_manager.user_loader
- def load_user(user_id):
- """Load user, defined for Flask-Login."""
- user = User.query.filter(User.user_id == user_id).first()
- return user
- @mod_user.route("/login", methods=["POST"])
- def login():
- """Login route."""
- username = request.form['username']
- password = request.form['password']
- try:
- user = User.query.filter(User.username == username).first()
- if user.check_password(password) is True:
- login_user(user)
- return jsonify(success=True, user=user.username)
- else:
- return jsonify(success=False)
- except:
- return jsonify(success=False)
- @mod_user.route("/logout", methods=["POST"])
- def logout():
- """Locout user, auto login guest."""
- try:
- logout_user()
- guestuser = User.query.filter(User.username == 'guest').first()
- login_user(guestuser)
- return jsonify(success=True, user=guestuser.username,
- message="Guest user logged in")
- except:
- return jsonify(success=False, message="Unkown error")
- @mod_user.route('/register', methods=['POST'])
- def create_user():
- """Route to create user."""
- try:
- username = request.form['username']
- email = request.form['email']
- password = request.form['password']
- except KeyError as e:
- return jsonify(success=False, message="%s not sent in the request" %
- e.args)
- if '@' not in email and '.' not in email:
- return jsonify(success=False, message="enter a valid email")
- u = User(username, email, password, "user", 0)
- db.session.add(u)
- try:
- db.session.commit()
- except IntegrityError as e:
- return jsonify(success=False, message="email/username already exists")
- return jsonify(success=True, message="User successfully added")
- @mod_user.route('/makePro', methods=['POST'])
- def makePro():
- """Route to make a user Pro, works only if current_user is admin."""
- curUser = current_user
- if curUser.get_id() is None:
- guestuser = User.query.filter(User.username == 'guest').first()
- login_user(guestuser)
- if curUser.is_admin() is False:
- return jsonify(success=False, message="User doesn't have the right")
- username = request.form['username']
- try:
- user = User.query.filter(User.username == username).first()
- user.isPro = 1
- db.session.commit()
- except:
- return jsonify(success=False, message="User doesn't exist")
- @mod_user.route('/viewProRequests', methods=['POST'])
- def viewreqs():
- """Route to view all the pro requests."""
- curUser = current_user
- if curUser.get_id() is None:
- guestuser = User.query.filter(User.username == 'guest').first()
- login_user(guestuser)
- if curUser.is_admin() is False:
- return jsonify(success=False)
- user = User.query.filter(User.isPro == 2).first()
- return jsonify(success=True, Users=user)
- @mod_user.route('/requestPro', methods=['POST'])
- def reqPro():
- """Route to request pro features from admin."""
- curUser = current_user
- if curUser.get_id() is None:
- guestuser = User.query.filter(User.username == 'guest').first()
- login_user(guestuser)
- if curUser.usertype == 'guest':
- return jsonify(success=False, message="Guest can't be pro")
- if curUser.isPro == 1:
- return jsonify(success=False, message="User already pro")
- if curUser.isPro == 2:
- return jsonify(success=False, message="User already requested for pro")
- curUser.isPro = 2
- db.session.commit()
- return jsonify(success=True, message="Request sent to admin")
- @mod_user.route('/changePassword', methods=['POST'])
- def changePass():
- """Route to change a user's password."""
- curUser = current_user
- if curUser.get_id() is None:
- guestuser = User.query.filter(User.username == 'guest').first()
- login_user(guestuser)
- if curUser.usertype == "guest":
- return jsonify(success=False, message="Can't change guest's password")
- oldPass = request.form['oldPass']
- newPass1 = request.form['newPass1']
- newPass2 = request.form['newPass2']
- if curUser.check_password(oldPass) is False:
- return jsonify(success=False, message="Invalid old password")
- if newPass1 != newPass2:
- return jsonify(success=False, message="new passwords don't match")
- curUser.changePassword(newPass1)
- db.session.commit()
- @mod_user.route('/changeUser', methods=['POST'])
- def changeUser():
- """Route to change username of logged in user."""
- curUser = current_user
- if curUser.get_id() is None:
- guestuser = User.query.filter(User.username == 'guest').first()
- login_user(guestuser)
- if curUser.is_Pro() is False:
- return jsonify(success=False, message="User isn't pro")
- newuser = request.form['newUsername']
- password = request.form['password']
- if curUser.check_password(password) is False:
- return jsonify(success=False, message="Wrong password")
- curUser.username = newuser
- try:
- db.session.commit()
- except:
- return jsonify(success=False, message="Username already exists")
- @mod_user.route('/checkLogin', methods=['POST'])
- def checkLogin():
- """Route to check if user is logged in."""
- curUser = current_user
- if curUser.get_id() is None:
- guestuser = User.query.filter(User.username == 'guest').first()
- login_user(guestuser)
- if curUser.username == "guest":
- return {'success': False, 'user': curUser.username}
- return {'success': True, 'user': curUser.username}
- @mod_user.route('/profile', methods=['POST'])
- def profile():
- """Route to view the properties of current user."""
- curUser = current_user
- if curUser.get_id() is None:
- guestuser = User.query.filter(User.username == 'guest').first()
- login_user(guestuser)
- return curUser.serialize()
- @mod_user.route('/u/<username>', methods=['POST'])
- def getDetails(username):
- """Route to view properties of any user."""
- try:
- user = User.query.filter(User.username == username).first()
- return user.serialize()
- except:
- return jsonify(success=False, message="User doesn't exist")
- @mod_user.route('/changeSettings', methods=['POST'])
- def changeSettings():
- """Route to change the default paste settings of a user."""
- curUser = current_user
- if curUser.usertype == 'guest':
- return jsonify(success=False, message="Can't change guest's settings")
- try:
- newLanguage = request.form['newLanguage']
- newExpiration = request.form['newExpiration']
- newPrivacy = request.form['newPrivacy']
- except:
- return jsonify(success=False, message="Please enter all fields")
- try:
- curUser.defaultLanguage = newLanguage
- curUser.defaultPrivacy = newPrivacy
- curUser.defaultExpiration = newExpiration
- db.session.commit()
- return jsonify(success=True)
- except:
- return jsonify(success=False)
- @mod_user.route('/changeDP', methods=['POST'])
- def changeDP():
- """Route to change the Display Picture of a user."""
- curUser = current_user
- if curUser.usertype == 'guest':
- return jsonify(success=False, message="Can't change guest's DP")
- newURL = request.form['newURL']
- curUser.profile_url = newURL
- db.session.commit()
- return jsonify(success=True)
Add Comment
Please, Sign In to add comment