Guest User

Untitled

a guest
Apr 28th, 2017
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.76 KB | None | 0 0
  1. """Controllers for user."""
  2. from flask import Blueprint, request, jsonify
  3. from sqlalchemy.exc import IntegrityError
  4. from flask_login import login_user, logout_user, current_user
  5. from .models import User
  6. from app import login_manager, db
  7. mod_user = Blueprint('user', __name__, url_prefix='/api')
  8.  
  9.  
  10. @login_manager.user_loader
  11. def load_user(user_id):
  12.     """Load user, defined for Flask-Login."""
  13.     user = User.query.filter(User.user_id == user_id).first()
  14.     return user
  15.  
  16.  
  17. @mod_user.route("/login", methods=["POST"])
  18. def login():
  19.     """Login route."""
  20.     username = request.form['username']
  21.     password = request.form['password']
  22.     try:
  23.         user = User.query.filter(User.username == username).first()
  24.         if user.check_password(password) is True:
  25.             login_user(user)
  26.             return jsonify(success=True, user=user.username)
  27.         else:
  28.             return jsonify(success=False)
  29.     except:
  30.         return jsonify(success=False)
  31.  
  32.  
  33. @mod_user.route("/logout", methods=["POST"])
  34. def logout():
  35.     """Locout user, auto login guest."""
  36.     try:
  37.         logout_user()
  38.         guestuser = User.query.filter(User.username == 'guest').first()
  39.         login_user(guestuser)
  40.         return jsonify(success=True, user=guestuser.username,
  41.                        message="Guest user logged in")
  42.     except:
  43.         return jsonify(success=False, message="Unkown error")
  44.  
  45.  
  46. @mod_user.route('/register', methods=['POST'])
  47. def create_user():
  48.     """Route to create user."""
  49.     try:
  50.         username = request.form['username']
  51.         email = request.form['email']
  52.         password = request.form['password']
  53.     except KeyError as e:
  54.         return jsonify(success=False, message="%s not sent in the request" %
  55.                        e.args)
  56.     if '@' not in email and '.' not in email:
  57.         return jsonify(success=False, message="enter a valid email")
  58.     u = User(username, email, password, "user", 0)
  59.     db.session.add(u)
  60.     try:
  61.         db.session.commit()
  62.     except IntegrityError as e:
  63.         return jsonify(success=False, message="email/username already exists")
  64.     return jsonify(success=True, message="User successfully added")
  65.  
  66.  
  67. @mod_user.route('/makePro', methods=['POST'])
  68. def makePro():
  69.     """Route to make a user Pro, works only if current_user is admin."""
  70.     curUser = current_user
  71.     if curUser.get_id() is None:
  72.         guestuser = User.query.filter(User.username == 'guest').first()
  73.         login_user(guestuser)
  74.     if curUser.is_admin() is False:
  75.         return jsonify(success=False, message="User doesn't have the right")
  76.     username = request.form['username']
  77.     try:
  78.         user = User.query.filter(User.username == username).first()
  79.         user.isPro = 1
  80.         db.session.commit()
  81.     except:
  82.         return jsonify(success=False, message="User doesn't exist")
  83.  
  84.  
  85. @mod_user.route('/viewProRequests', methods=['POST'])
  86. def viewreqs():
  87.     """Route to view all the pro requests."""
  88.     curUser = current_user
  89.     if curUser.get_id() is None:
  90.         guestuser = User.query.filter(User.username == 'guest').first()
  91.         login_user(guestuser)
  92.     if curUser.is_admin() is False:
  93.         return jsonify(success=False)
  94.     user = User.query.filter(User.isPro == 2).first()
  95.     return jsonify(success=True, Users=user)
  96.  
  97.  
  98. @mod_user.route('/requestPro', methods=['POST'])
  99. def reqPro():
  100.     """Route to request pro features from admin."""
  101.     curUser = current_user
  102.     if curUser.get_id() is None:
  103.         guestuser = User.query.filter(User.username == 'guest').first()
  104.         login_user(guestuser)
  105.     if curUser.usertype == 'guest':
  106.         return jsonify(success=False, message="Guest can't be pro")
  107.     if curUser.isPro == 1:
  108.         return jsonify(success=False, message="User already pro")
  109.     if curUser.isPro == 2:
  110.         return jsonify(success=False, message="User already requested for pro")
  111.     curUser.isPro = 2
  112.     db.session.commit()
  113.     return jsonify(success=True, message="Request sent to admin")
  114.  
  115.  
  116. @mod_user.route('/changePassword', methods=['POST'])
  117. def changePass():
  118.     """Route to change a user's password."""
  119.     curUser = current_user
  120.     if curUser.get_id() is None:
  121.         guestuser = User.query.filter(User.username == 'guest').first()
  122.         login_user(guestuser)
  123.     if curUser.usertype == "guest":
  124.         return jsonify(success=False, message="Can't change guest's password")
  125.     oldPass = request.form['oldPass']
  126.     newPass1 = request.form['newPass1']
  127.     newPass2 = request.form['newPass2']
  128.     if curUser.check_password(oldPass) is False:
  129.         return jsonify(success=False, message="Invalid old password")
  130.     if newPass1 != newPass2:
  131.         return jsonify(success=False, message="new passwords don't match")
  132.     curUser.changePassword(newPass1)
  133.     db.session.commit()
  134.  
  135.  
  136. @mod_user.route('/changeUser', methods=['POST'])
  137. def changeUser():
  138.     """Route to change username of logged in user."""
  139.     curUser = current_user
  140.     if curUser.get_id() is None:
  141.         guestuser = User.query.filter(User.username == 'guest').first()
  142.         login_user(guestuser)
  143.     if curUser.is_Pro() is False:
  144.         return jsonify(success=False, message="User isn't pro")
  145.     newuser = request.form['newUsername']
  146.     password = request.form['password']
  147.     if curUser.check_password(password) is False:
  148.         return jsonify(success=False, message="Wrong password")
  149.     curUser.username = newuser
  150.     try:
  151.         db.session.commit()
  152.     except:
  153.         return jsonify(success=False, message="Username already exists")
  154.  
  155.  
  156. @mod_user.route('/checkLogin', methods=['POST'])
  157. def checkLogin():
  158.     """Route to check if user is logged in."""
  159.     curUser = current_user
  160.     if curUser.get_id() is None:
  161.         guestuser = User.query.filter(User.username == 'guest').first()
  162.         login_user(guestuser)
  163.     if curUser.username == "guest":
  164.         return {'success': False, 'user': curUser.username}
  165.     return {'success': True, 'user': curUser.username}
  166.  
  167.  
  168. @mod_user.route('/profile', methods=['POST'])
  169. def profile():
  170.     """Route to view the properties of current user."""
  171.     curUser = current_user
  172.     if curUser.get_id() is None:
  173.         guestuser = User.query.filter(User.username == 'guest').first()
  174.         login_user(guestuser)
  175.     return curUser.serialize()
  176.  
  177.  
  178. @mod_user.route('/u/<username>', methods=['POST'])
  179. def getDetails(username):
  180.     """Route to view properties of any user."""
  181.     try:
  182.         user = User.query.filter(User.username == username).first()
  183.         return user.serialize()
  184.     except:
  185.         return jsonify(success=False, message="User doesn't exist")
  186.  
  187.  
  188. @mod_user.route('/changeSettings', methods=['POST'])
  189. def changeSettings():
  190.     """Route to change the default paste settings of a user."""
  191.     curUser = current_user
  192.     if curUser.usertype == 'guest':
  193.         return jsonify(success=False, message="Can't change guest's settings")
  194.     try:
  195.         newLanguage = request.form['newLanguage']
  196.         newExpiration = request.form['newExpiration']
  197.         newPrivacy = request.form['newPrivacy']
  198.     except:
  199.         return jsonify(success=False, message="Please enter all fields")
  200.     try:
  201.         curUser.defaultLanguage = newLanguage
  202.         curUser.defaultPrivacy = newPrivacy
  203.         curUser.defaultExpiration = newExpiration
  204.         db.session.commit()
  205.         return jsonify(success=True)
  206.     except:
  207.         return jsonify(success=False)
  208.  
  209.  
  210. @mod_user.route('/changeDP', methods=['POST'])
  211. def changeDP():
  212.     """Route to change the Display Picture of a user."""
  213.     curUser = current_user
  214.     if curUser.usertype == 'guest':
  215.         return jsonify(success=False, message="Can't change guest's DP")
  216.     newURL = request.form['newURL']
  217.     curUser.profile_url = newURL
  218.     db.session.commit()
  219.     return jsonify(success=True)
Add Comment
Please, Sign In to add comment