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
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
|