You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
2.2 KiB

from flask import Blueprint, request, jsonify
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity
from app import redis_client, LogService
from app.models.passenger_lib import Passenger, isAvailable
from presenter import PassengerPresenter
from utils import StateCode, create_response, checkMobile, checkIdCard, checkBankCard
register_bp = Blueprint('register', __name__)
@register_bp.route('/register', methods=['POST'])
def register():
data = request.json
account = data.get('account')
password = data.get('password')
mobile_no = data.get('mobileNo')
mobile_code = data.get('mobileCode')
id_card_no = data.get('idCardNo')
bank_card_no = data.get('bankCard')
if not account or not password:
return jsonify(create_response(StateCode.PARAMS_ERROR)), 400
if not checkMobile(mobile_no):
return jsonify(create_response(StateCode.MOBILE_ERROR)), 400
if not verifyCode(mobile_no, mobile_code):
return jsonify(create_response(StateCode.MOBILE_CODE_ERROR)), 400
if not checkIdCard(id_card_no):
return jsonify(create_response(StateCode.ID_CARD_ERROR)), 400
if isAvailable(account):
return jsonify(create_response(StateCode.USER_ALREADY_EXISTS)), 400
if not checkBankCard(bank_card_no):
return jsonify(create_response(StateCode.BANK_CARD_ERROR)), 400
new_passenger = Passenger.create(data=data)
access_token = create_access_token(identity=new_passenger.id)
user_presenter = PassengerPresenter(new_passenger, {"token": access_token}).as_dict()
LogService.log()
return jsonify(create_response(StateCode.SUCCESS, data=user_presenter)), 200
@register_bp.route('/auth', methods=['GET'])
@jwt_required()
def auth():
current_user = get_jwt_identity()
user = Passenger.query.get(current_user)
if not user:
return jsonify(create_response(StateCode.USER_NOT_FOUND)), 400
user_presenter = PassengerPresenter(user, {}).as_dict()
LogService.log()
return jsonify(create_response(code=StateCode.SUCCESS, data=user_presenter)), 200
def verifyCode(mobile_no, code):
stored_code = redis_client.get(mobile_no)
return stored_code == code