diff --git a/app/api/routes/routes.py b/app/api/routes/routes.py index f7e12f0..ecd43b6 100644 --- a/app/api/routes/routes.py +++ b/app/api/routes/routes.py @@ -69,11 +69,11 @@ def merms_register_verify(): response = RegisterService.process_verify(data) return response -@api.route("/panel/RegisterComplete", methods=["POST"]) +@api.route("/panel/Register/complete", methods=["POST"]) @jwt_required() def merms_register_complete(): data = request.get_json() - response = RegisterService.process_request(data) + response = RegisterService.process_complete(data) return response @api.route("/panel/account", methods=["POST"]) diff --git a/app/api/schemas/register_complete.py b/app/api/schemas/register_complete.py new file mode 100644 index 0000000..289860c --- /dev/null +++ b/app/api/schemas/register_complete.py @@ -0,0 +1,16 @@ +from marshmallow import Schema, fields + +class RegisterCompleteSchema(Schema): + country = fields.Str(required=True) + username = fields.Str(required=True) + verify_link = fields.Str(required=True) + password = fields.Str(required=True) + + + +# { +# "country": "US", +# "username": "testaccount", +# "password": "merms.user.panel" +# "verify_link": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImVtYWlsIjoiYW1leWVAY2hpZWZzb2Z0LmNvbSIsInBlbmRpbmdfdWlkIjoiM2YzZTJmN2EtMzhhMy00MjQ0LWE1MGItNTEzZDM1ZWM1NzA3IiwiZmlyc3RfbmFtZSI6Ik9sdXNlc2FuIiwibGFzdF9uYW1lIjoiQW1leWUiLCJwZW5kaW5nX2lkIjpudWxsfSwiZXhwIjoxNzUyMzEwMjY1fQ.etgqBztn1Wjk9mPh50NYwDI3twc94UmJ9gqbK-ktXOM" +# } diff --git a/app/api/services/register.py b/app/api/services/register.py index 465f3ab..aa10385 100644 --- a/app/api/services/register.py +++ b/app/api/services/register.py @@ -6,8 +6,11 @@ from app.extensions import db from app.models import Offer, MembersPending, Members from app.api.helpers.response_helper import ResponseHelper from werkzeug.security import generate_password_hash, check_password_hash + from app.api.schemas.register import RegisterSchema from app.api.schemas.register_verify import RegisterVerifySchema +from app.api.schemas.register_complete import RegisterCompleteSchema + from flask_mail import Mail, Message import smtplib @@ -27,6 +30,68 @@ class RegisterService(BaseService): SEND_EMAIL_FROM = Config.SEND_EMAIL_FROM SEND_EMAIL_PASS = Config.SEND_EMAIL_PASS + + @staticmethod + def process_complete(data): + try: + with db.session.begin(): + + validated_data = RegisterService.validate_data(data, RegisterCompleteSchema()) + # Simulate processing + verify_link = validated_data.get('verify_link') + username = validated_data.get('username') + + data ={} + if not verify_link: + return jsonify({'message': 'Error - missing verify link'}), 403 + try: + data = jwt.decode(verify_link, RegisterService.JWT_SECRET_KEY, algorithms=["HS256"]) + except: + return jsonify({'status': 'INVALID', 'message': 'Link is invalid'}), 403 + + previousAcc = Members.get_member_by_username(username) + if previousAcc: + response_data = { + "error_message": "try another username ", + "error_message_key": "use_another_username", + } + return ResponseHelper.error(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: + + 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 process_verify(data): #"verify_link": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiMThmYzg0YTQtYjQzMC00ZWFkLWE4ZjEtMTk2MTJmNzA5ZDE0IiwiZXhwIjoxNzUyMjc2NjQzfQ.UEsSpCkMq8xNTLiqzyCB572tK-9WkeYaSBF4gfvX7vk" @@ -36,17 +101,7 @@ class RegisterService(BaseService): validated_data = RegisterService.validate_data(data, RegisterVerifySchema()) # Simulate processing verify_link = validated_data.get('verify_link') - - # pending_member = { - # "email": signup_email, - # "uid": email_uid, - # "first_name": firstname, - # "last_name": signup_email, - # "member_id":last_row_id, - # } - data ={} - if not verify_link: return jsonify({'message': 'Error - missing verify link'}), 403 try: @@ -62,11 +117,6 @@ class RegisterService(BaseService): ] } - # response_data = { - # "member_id": data['member_id'], - # "uid": data['uid'], - # "country": country, - # } response_data = { "user": data["user"], "country": country, diff --git a/app/models/members.py b/app/models/members.py index f41bf8c..4981133 100644 --- a/app/models/members.py +++ b/app/models/members.py @@ -41,14 +41,9 @@ class Members(db.Model): @classmethod def get_member_by_username(cls, username): - """ - Return an offer by its ID. - """ member = cls.query.filter_by(username=str(username)).first() - if not member: raise None - #ValueError(f"Username = {username} not found") return member @classmethod