Advertisement
Guest User

Untitled

a guest
Oct 2nd, 2016
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.01 KB | None | 0 0
  1. from flask import Flask, abort, request, jsonify, g, url_for, Response, json
  2. from flask_sqlalchemy import SQLAlchemy
  3. from model.billingmodel import db
  4. from model.billingmodel import User, ManagedAccount, VPNTunnel
  5. from flask_login import LoginManager, login_required, logout_user, login_user, current_user
  6. import logging
  7. from logging.handlers import RotatingFileHandler
  8. import base64
  9.  
  10. logger = logging.getLogger(__name__)
  11. formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
  12. logger.setLevel(logging.DEBUG)
  13. #handler = RotatingFileHandler('/home/vagrant/opt/python/log/application.log', maxBytes=1024,backupCount=5)
  14. handler = RotatingFileHandler('/opt/python/log/application.log', maxBytes=1024,backupCount=5)
  15. #handler = RotatingFileHandler('/var/log/application.log', maxBytes=1024,backupCount=5)
  16. handler.setFormatter(formatter)
  17.  
  18.  
  19. application = Flask(__name__)
  20. login_manager = LoginManager()
  21. login_manager.init_app(application)
  22. application.logger.addHandler(handler)
  23.  
  24. @application.route('/api/users', methods = ['POST'])
  25. def new_user():
  26. email = request.json.get('email')
  27. password = request.json.get('password')
  28. if email is None or password is None:
  29. abort(400) # missing args
  30. if User.query.filter_by(email=email).first() is not None:
  31. abort(400) # existing user
  32. user = User(email)
  33. user.hash_password(password)
  34. db.session.add(user)
  35. db.session.commit()
  36. return jsonify({'email': email}, 201, {'Location':url_for('get_user', id = user.id, _external = True)})
  37.  
  38.  
  39. @application.route('/api/users/<int:id>')
  40. def get_user(id):
  41. user = User.query.get(id)
  42. if not user:
  43. abort(400)
  44. return jsonify({'username': user.email})
  45.  
  46.  
  47. @application.route('/')
  48. def index():
  49. return 'Index Page'
  50.  
  51.  
  52. @login_manager.request_loader
  53. def load_user_from_request(request):
  54. # try token verification from headers
  55. token = request.headers.get('api_key')
  56. if token:
  57. logger.debug('Got api-key token')
  58. logger.debug(token)
  59. user = User.verify_auth_token(token)
  60. # token is valid and user is already logged in - continue
  61. if user and user.is_authenticated():
  62. g.user = user
  63. return user
  64. # token is invalid (experied/incorrect) and user is logged in - logout
  65. if not user and user.is_authenticated():
  66. user.authenticated = False
  67. db.session.add(user)
  68. db.session.commit()
  69. return None
  70.  
  71. # try Basic authentication [for initial login]
  72. token = request.headers.get('Authorization')
  73. if token:
  74. logger.debug('Got Authorization token')
  75. logger.debug(token)
  76. token = token.replace('Basic ', '', 1)
  77. try:
  78. token = base64.b64decode(token)
  79. except TypeError:
  80. return None
  81. email, password = token.split(":")
  82. logger.debug(email)
  83. logger.debug(password)
  84. user = User.query.filter_by(email = email).first()
  85. if not user or not user.verify_password(password):
  86. return None
  87. # User exists and is logging in - save state
  88. user.authenticated = True
  89. db.session.add(user)
  90. db.session.commit()
  91. logger.debug('Setting user')
  92. g.user = user
  93. return user
  94.  
  95. return None
  96.  
  97.  
  98. @application.route('/logout', methods= ['GET'] )
  99. @login_required
  100. def logout():
  101. user = current_user
  102. user.authenticated = False
  103. db.session.add(user)
  104. db.session.commit()
  105. logout_user()
  106. return Response(response=json.dumps({'message':'Successfull Logout!'}), status=200)
  107.  
  108.  
  109.  
  110. @application.route('/login', methods = ['POST', 'GET'] )
  111. @login_required
  112. def login():
  113. token = g.user.generate_auth_token()
  114. resp = Response(response=json.dumps({'message':'Hello, %s' % g.user.email}), status=200)
  115. resp.headers['api-key']= token.decode('ascii')
  116. return resp
  117.  
  118. @application.route('/post/<int:post_id>')
  119. @login_required
  120. def post(post_id):
  121. return 'Post %d' % post_id
  122.  
  123.  
  124. if __name__ == '__main__':
  125. application.debug = True
  126. #application.run(host='0.0.0.0', port=3000)
  127. application.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement