Guest User

Untitled

a guest
Jun 25th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.55 KB | None | 0 0
  1. 127.0.0.1 - - [24/Jun/2018 18:07:14] "OPTIONS /api/v1/users/register HTTP/1.1" 200 -
  2. token name 'app' is not defined
  3. 127.0.0.1 - - [24/Jun/2018 18:07:15] "POST /api/v1/users/register HTTP/1.1" 500 -
  4. Traceback (most recent call last):
  5. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/app.py", line 2309, in __call__
  6. return self.wsgi_app(environ, start_response)
  7. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/app.py", line 2295, in wsgi_app
  8. response = self.handle_exception(e)
  9. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
  10. return cors_after_request(app.make_response(f(*args, **kwargs)))
  11. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/app.py", line 1741, in handle_exception
  12. reraise(exc_type, exc_value, tb)
  13. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise
  14. raise value
  15. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/app.py", line 2292, in wsgi_app
  16. response = self.full_dispatch_request()
  17. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/app.py", line 1815, in full_dispatch_request
  18. rv = self.handle_user_exception(e)
  19. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
  20. return cors_after_request(app.make_response(f(*args, **kwargs)))
  21. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/app.py", line 1718, in handle_user_exception reraise(exc_type, exc_value, tb)
  22. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/_compat.py", line 35, in
  23. reraise raise value
  24. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/app.py", line 1813, in full_dispatch_request
  25. rv = self.dispatch_request()
  26. File "/home/jacobo/.local/share/virtualenvs/alen-yVjuFfoa/lib/python3.5/site-packages/flask/app.py", line 1799, in dispatch_request
  27. return self.view_functions[rule.endpoint](**req.view_args)
  28. File "/mnt/c/Users/Jacobo/Projects/alen/server/users/api.py", line 25, in register
  29. 'token': token.decode()
  30. AttributeError: 'NameError' object has no attribute 'decode'
  31.  
  32. / myapp
  33. /users
  34. api.py
  35. models.py
  36. app.py
  37. database.py
  38. extensions.py
  39. settings.py
  40. run.py
  41.  
  42. from flask import Flask, render_template
  43. from server import users
  44. from server.extensions import bcrypt, db, migrate, cors
  45. from server.settings import DevConfig
  46.  
  47.  
  48. def create_app(config_object=DevConfig):
  49. app = Flask(__name__,
  50. static_folder="../frontend/public",
  51. template_folder="../frontend/public")
  52. app.config.from_object(config_object)
  53. register_extensions(app)
  54. register_blueprints(app)
  55. return app
  56.  
  57.  
  58. def register_extensions(app):
  59. bcrypt.init_app(app)
  60. db.init_app(app)
  61. migrate.init_app(app, db)
  62. cors.init_app(app)
  63. return None
  64.  
  65.  
  66. def register_blueprints(app):
  67. app.register_blueprint(users.api.blueprint)
  68. return None
  69.  
  70. import os
  71.  
  72.  
  73. class Config(object):
  74.  
  75. SECRET_KEY = 'p9Bv<3Eid9%$i01'
  76. APP_DIR = os.path.abspath(os.path.dirname(__file__)) # This directory
  77. PROJECT_ROOT = os.path.abspath(os.path.join(APP_DIR, os.pardir))
  78. BCRYPT_LOG_ROUNDS = 13
  79. DEBUG_TB_ENABLED = False
  80. DEBUG_TB_INTERCEPT_REDIRECTS = False
  81. SQLALCHEMY_TRACK_MODIFICATIONS = False
  82. SQLALCHEMY_DATABASE_URI = database
  83.  
  84.  
  85. class ProdConfig(Config):
  86. ENV = 'prod'
  87. DEBUG = False
  88. DEBUG_TB_ENABLED = False
  89.  
  90. class DevConfig(Config):
  91. ENV = 'dev'
  92. DEBUG = True
  93. DEBUG_TB_ENABLED = True
  94.  
  95. from flask import Blueprint, jsonify, request, make_response
  96. from .models import User
  97. from server.extensions import db
  98. from sqlalchemy.exc import IntegrityError
  99.  
  100. blueprint = Blueprint('user', __name__, url_prefix='/api/v1/users')
  101.  
  102.  
  103. @blueprint.route("/register", methods=['POST'])
  104. def register():
  105. data = request.get_json()
  106. user = User.query.filter_by(email=data.get('email')).first()
  107. if not user:
  108. user = User(
  109. email=data["email"],
  110. password=data["password"]
  111. )
  112. db.session.add(user)
  113. db.session.commit()
  114. token = user.encode_auth_token(user.id)
  115. print('token', token)
  116. responseObject = {
  117. 'status': 'success',
  118. 'message': 'Succesfully registered.',
  119. 'token': token.decode()
  120. }
  121. return make_response(jsonify(responseObject)), 201
  122.  
  123. else:
  124. responseObject = {
  125. 'status': 'fail',
  126. 'message': 'User already exists. Please log in.'
  127. }
  128. return make_response(jsonify(responseObject)), 202
  129.  
  130. import datetime as dt
  131. import jwt
  132.  
  133. from server.database import Column, Model, SurrogatePK
  134. from server.database import db, reference_col, relationship
  135. from server.extensions import bcrypt
  136.  
  137.  
  138. class Role(SurrogatePK, Model):
  139.  
  140. __tablename__ = 'roles'
  141. name = Column(db.String(80), unique=True, nullable=False)
  142. user_id = reference_col('users', nullable=True)
  143. user = relationship('User', backref='roles')
  144.  
  145. def __init__(self, name, **kwargs):
  146. db.Model.__init__(self, name=name, **kwargs)
  147.  
  148. def __repr__(self):
  149. """Represent instance as a unique string."""
  150. return '<Role({name})>'.format(name=self.name)
  151.  
  152.  
  153. class User(SurrogatePK, Model):
  154.  
  155. __tablename__ = 'users'
  156. email = Column(db.String(80), unique=True, nullable=False)
  157. password = Column(db.String(255), nullable=True)
  158. created_at = Column(db.DateTime, nullable=False,
  159. default=dt.datetime.utcnow)
  160. active = Column(db.Boolean(), default=False)
  161. is_admin = Column(db.Boolean(), default=False)
  162.  
  163. def __init__(self, email, password=None, **kwargs):
  164. db.Model.__init__(self, email=email, **kwargs)
  165. if password:
  166. self.set_password(password)
  167. else:
  168. self.password = None
  169.  
  170. def set_password(self, password):
  171. self.password = bcrypt.generate_password_hash(password).decode()
  172.  
  173. def check_password(self, value):
  174. return bcrypt.check_password_hash(self.password, value)
  175.  
  176. def __repr__(self):
  177. return '<User({email!r})>'.format(email=self.email)
  178.  
  179. def encode_auth_token(self, user_id):
  180. try:
  181. payload = {
  182. 'exp': dt.datetime.utcnow() + dt.timedelta(days=0, seconds=5),
  183. 'iat': dt.datetime.utcnow(),
  184. 'sub': user_id
  185. }
  186. return jwt.encode(
  187. payload,
  188. app.config.get('SECRET_KEY'),
  189. algorithm='HS256'
  190. )
  191. except Exception as e:
  192. return e
  193.  
  194. @staticmethod
  195. def decode_auth_token(auth_token):
  196. """
  197. Validates the auth token
  198. :param auth_token:
  199. :return: integer|string
  200. """
  201. try:
  202. payload = jwt.decode(auth_token, app.config.get('SECRET_KEY'))
  203. is_blacklisted_token = BlacklistToken.check_blacklist(auth_token)
  204. if is_blacklisted_token:
  205. return 'Token blacklisted. Please log in again.'
  206. else:
  207. return payload['sub']
  208. except jwt.ExpiredSignatureError:
  209. return 'Signature expired. Please log in again.'
  210. except jwt.InvalidTokenError:
  211. return 'Invalid token. Please log in again.'
Add Comment
Please, Sign In to add comment