users.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import app, sys
  2. from app.extensions import db
  3. import bcrypt
  4. import datetime, jwt
  5. from flask_login import UserMixin
  6. from sqlalchemy import text
  7. from sqlalchemy.ext.declarative import declarative_base
  8. Base = declarative_base()
  9. metadata = Base.metadata
  10. class tbl_users(UserMixin, db.Model):#, Base):
  11. __tablename__ = 'tbl_users'
  12. __table_args__ = {'schema': 'users'}
  13. id = db.Column(db.Integer, primary_key=True, server_default=text("nextval('users.tbl_users_id_seq'::regclass)"))
  14. v_user_id = db.Column(db.String(50), nullable=False, server_default=text("''::character varying"))
  15. v_password = db.Column(db.String(255), nullable=False, server_default=text("''::character varying"))
  16. bl_admin = db.Column(db.Boolean, nullable=False, server_default=text("false"))
  17. bl_capture = db.Column(db.Boolean, nullable=False, server_default=text("false"))
  18. def __init__(self, v_user_id, v_password, bl_admin=False, bl_capture=False):
  19. self.v_user_id = v_user_id
  20. self.v_password = bcrypt.hashpw(str(v_password).encode("utf-8"), bcrypt.gensalt()).decode()
  21. self.bl_admin = bl_admin
  22. self.bl_capture = bl_capture
  23. # end of __init__ function
  24. def __repr__(self):
  25. return f'<User "{self.v_user_id}">'
  26. # end of __repr__ function
  27. def set_password(self, s_password):
  28. self.v_password = bcrypt.hashpw(str(s_password).encode("utf-8"), bcrypt.gensalt()).decode()
  29. # end of set_password function
  30. def check_password(self, s_password):
  31. return bcrypt.checkpw(str(s_password).encode("utf-8"), str(self.v_password).encode("utf-8"))
  32. # end of check_password function
  33. def encode_auth_token(self):
  34. """
  35. Generates the Auth Token
  36. :return: string
  37. """
  38. try:
  39. payload = {
  40. 'exp': datetime.datetime.utcnow() + datetime.timedelta(weeks=52, days=0, seconds=0),
  41. 'iat': datetime.datetime.utcnow(),
  42. 'sub': self.id
  43. }
  44. return jwt.encode(payload , app.Config.SECRET_KEY, algorithm='HS256')
  45. except Exception as e:
  46. return e
  47. # end of try-except
  48. # end of internal encode_auth_token function
  49. @staticmethod
  50. def decode_auth_token(auth_token):
  51. """
  52. Decodes the auth token
  53. :param auth_token:
  54. :return: integer|string
  55. """
  56. try:
  57. payload = jwt.decode(auth_token, app.Config.SECRET_KEY, algorithms="HS256")
  58. return payload['sub']
  59. except jwt.ExpiredSignatureError:
  60. return 'Signature expired. Please log in again.'
  61. except jwt.InvalidTokenError:
  62. return 'Invalid token. Please log in again.'
  63. # end of internal static decode_auth_token function
  64. # end of tbl_users ORM model class
  65. # flask shell
  66. # from app.extensions import db
  67. # from app.models.users import tbl_users - additional models in one go?
  68. # db.create_all()
  69. # roger wilco