user.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import uuid
  2. import logging
  3. import hashlib
  4. def hash_pwd(password):
  5. return hashlib.sha256(password.encode()).hexdigest()
  6. logger = logging.getLogger(__name__)
  7. from datetime import datetime,timedelta
  8. from agent.models.db.user import User,Session
  9. class UserBusiness:
  10. def __init__(self, db):
  11. self.db = db
  12. def get_user(self, user_id):
  13. return self.db.query(User).filter(User.id == user_id).first()
  14. def get_user_by_username(self, username):
  15. return self.db.query(User).filter(User.username == username).first()
  16. def create_user(self, username, password, fullname, email=""):
  17. password = hash_pwd(password)
  18. user = User(username=username, hashed_password=password, full_name=fullname, email=email)
  19. self.db.add(user)
  20. self.db.commit()
  21. self.db.refresh(user)
  22. return user
  23. def update_user(self, user_id, username=None, password=None):
  24. user = self.get_user(user_id)
  25. if user:
  26. if username:
  27. user.username = username
  28. if password:
  29. password = hash_pwd(password)
  30. user.password = password
  31. self.db.commit()
  32. self.db.refresh(user)
  33. return user
  34. def delete_user(self, user_id):
  35. user = self.get_user(user_id)
  36. if user:
  37. self.db.delete(user)
  38. self.db.commit()
  39. return user
  40. def verify_password(self, request_password, user_hashed_password):
  41. hashed_password = hash_pwd(request_password)
  42. logger.info(f"verify password: {hashed_password} == {user_hashed_password}")
  43. return hashed_password == user_hashed_password
  44. class SessionBusiness:
  45. def __init__(self, db):
  46. self.db = db
  47. def create_session(self, user:User):
  48. session_id = str(uuid.uuid4())
  49. session = Session(session_id=session_id, user_id=user.id, username=user.username, full_name=user.full_name)
  50. self.db.add(session)
  51. self.db.commit()
  52. self.db.refresh(session)
  53. return session
  54. def get_session(self, session_id):
  55. return self.db.query(Session).filter(Session.session_id == session_id).first()
  56. def delete_session(self, session_id):
  57. session = self.get_session(session_id)
  58. if session:
  59. self.db.delete(session)
  60. self.db.commit()
  61. return True
  62. def update_session(self, session_id):
  63. session = self.get_session(session_id)
  64. if session:
  65. session.updated = datetime.now()
  66. self.db.commit()
  67. self.db.refresh(session)
  68. def get_session_by_user_id(self, user_id):
  69. return self.db.query(Session).filter(Session.user_id == user_id).first()
  70. def validate_session(self, username, session_id):
  71. session = self.get_session(session_id)
  72. if session:
  73. if session.username != username:
  74. return None
  75. expired:timedelta = datetime.now() - session.updated
  76. if expired.seconds > 1800 : # 30 minutes
  77. logger.info(f"session expired: {session_id}")
  78. #self.delete_session(session_id)
  79. return None
  80. else:
  81. self.update_session(session_id)
  82. return session
  83. if __name__ == "__main__":
  84. print("hello world")