from datetime import datetime from app import db from app.models import * from app.schema import * from marshmallow import ValidationError from pydoc import locate from werkzeug.security import check_password_hash def validate_schema(schema, data): schema_name = schema + "Schema" validation_schema = locate("app.schema." + schema_name) instance = validation_schema() instance.load(data) def validate_json(schema, data): validate_schema(schema=schema, data=data) model = locate("app.models." + schema) instance = model(**data) return instance def insert_data(schema, data): instance = validate_json(schema, data) db.session.add(instance) db.session.commit() def delete_data(data): db.session.delete(data) db.session.commit() def save_otp(mobile, otp): db.session.query(table="Users").filter_by(mobile=mobile).update(dict(otp=otp)) db.session.commit() def fetch_stored_otp(mobile): user = db.session.query(table="Users").filter_by(mobile=mobile) otp = user.otp return otp def activate_account(mobile): timestamp = datetime.now() db.session.query(table="Users").filter_by(mobile=mobile).update( dict(otp_valid_time=timestamp) ) db.session.query(table="Users").filter_by(mobile=mobile).update(dict(status=1)) def verify_otp(mobile, otp): stored_otp = fetch_stored_otp(mobile=mobile) if stored_otp == otp: activate_account(mobile=mobile) return True return False def fetch_user(data): user = db.session.query(table="Users").filter_by(email=data["email"]) email = user.email password = user.password return email, password def verify_login(data): user, password = fetch_user(data) if user == data["email"] and check_password_hash(password, data["password"]): return True return False