From 9b32ed6cd5e585b126655df18a41fab70df7e19b Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Thu, 10 Jul 2025 19:07:08 -0400 Subject: [PATCH] Added login logic --- app/api/services/login.py | 77 +++++++++++++++++++++++++++++++----- app/api/services/register.py | 31 ++++++++------- 2 files changed, 84 insertions(+), 24 deletions(-) diff --git a/app/api/services/login.py b/app/api/services/login.py index 12af1b5..f31654c 100644 --- a/app/api/services/login.py +++ b/app/api/services/login.py @@ -22,15 +22,6 @@ class LoginService(BaseService): @staticmethod def process_request(data): - """ - Process the Login request. - - Args: - data (dict): The request data. - - Returns: - dict: A standardized response. - """ try: with db.session.begin(): @@ -98,6 +89,74 @@ class LoginService(BaseService): db.session.rollback() return ResponseHelper.internal_server_error() + @staticmethod + def login_user(username, password): + try: + with db.session.begin(): + + # validated_data = LoginService.validate_data(data, LoginSchema()) + # username = validated_data.get('username') + # password = validated_data.get('password') + member = Members.get_member_by_username(username) + # pass22 = generate_password_hash(password) + # logger.info("Password generated = > {}".format(pass22) ) + if not member: + invalid_data = { + "error_message": "invalid username or password", + "message_key": "invalid_username_or_password", + } + return ResponseHelper.success(data=invalid_data) + + pass_check = check_password_hash(member.password, password) + logger.info("Password check: {}".format(pass_check)) + if not member or not pass_check: + invalid_data = { + "error_message": "invalid username or password", + "message_key": "invalid_username_or_password", + } + return ResponseHelper.success(data=invalid_data) + + user_data = {} + user_data["id"] = member.id, + user_data["member_id"]= member.id, + user_data["uid"] = str(member.uid), + + user_token = jwt.encode( + {"user": user_data, 'exp' : datetime.datetime.utcnow() + datetime.timedelta(minutes=3330)}, + Config.JWT_SECRET_KEY, + algorithm="HS256" + ) + + # Simulate processing + response_data = { + "member_id": member.id, + "uid": str(member.uid), + "username": member.username, + "account_name": member.account_name, + "firstname":member.firstname, + "lastname": member.lastname, + "room": member.uid, + "token": user_token + } + + return ResponseHelper.success(data=response_data) + + except ValidationError as err: + + logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}") + db.session.rollback() + return ResponseHelper.unprocessable_entity(result_description="Validation exception") + + except ValueError as err: + logger.error(f"{getattr(err, 'messages', str(err))}") + db.session.rollback() + return ResponseHelper.error(result_description=str(err)) + + except Exception as e: + logger.error(f"An error occurred: {str(e)}", exc_info=True) + db.session.rollback() + return ResponseHelper.internal_server_error() + @staticmethod def check_loan_limits(customer_id): """ diff --git a/app/api/services/register.py b/app/api/services/register.py index 3f9f101..a9894db 100644 --- a/app/api/services/register.py +++ b/app/api/services/register.py @@ -11,6 +11,7 @@ from app.api.schemas.register import RegisterSchema from app.api.schemas.register_verify import RegisterVerifySchema from app.api.schemas.register_complete import RegisterCompleteSchema +from app.api.services.login import LoginService from flask_mail import Mail, Message import smtplib @@ -67,25 +68,25 @@ class RegisterService(BaseService): lastname = user['last_name'] email = user['email'] - encrypted_pass = generate_password_hash(password) newAccount = Members.add_member(firstname, lastname, email, username,encrypted_pass, country) + return LoginService.login_user(username,password) - country = { - "last_update": datetime.datetime.utcnow(), - "list": [ - {"code": "US", "description": "United States"}, - {"code": "CA", "description": "Canada"}, - ] - } - - response_data = { - "user": data["user"], - "country": country, - } - - return ResponseHelper.success(data=response_data) + # country = { + # "last_update": datetime.datetime.utcnow(), + # "list": [ + # {"code": "US", "description": "United States"}, + # {"code": "CA", "description": "Canada"}, + # ] + # } + # + # response_data = { + # "user": data["user"], + # "country": country, + # } + # + # return ResponseHelper.success(data=response_data) except ValidationError as err: