improved register endpoint, etc.
This commit is contained in:
@@ -175,6 +175,9 @@ app.register_blueprint(fe_bp)
|
|||||||
|
|
||||||
CORS(app)
|
CORS(app)
|
||||||
CORS(api_bp)
|
CORS(api_bp)
|
||||||
|
CORS(auth_api_bp)
|
||||||
|
|
||||||
|
logging.getLogger('flask_cors').level = logging.DEBUG
|
||||||
|
|
||||||
# Fix jwt_extended by 'duck typing' error handlers
|
# Fix jwt_extended by 'duck typing' error handlers
|
||||||
# jwt_extended._set_error_handler_callbacks(api_v1) # removed for the moment, might raise new (old) problems
|
# jwt_extended._set_error_handler_callbacks(api_v1) # removed for the moment, might raise new (old) problems
|
||||||
|
|||||||
@@ -22,11 +22,13 @@ from random import randint
|
|||||||
from flask_login import logout_user, login_user
|
from flask_login import logout_user, login_user
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
|
|
||||||
from flask_restx import Resource, fields
|
from flask_restx import Resource, fields, abort, inputs
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
from werkzeug.routing import BuildError
|
from werkzeug.routing import BuildError
|
||||||
|
|
||||||
from backend import db, app, jwt_extended
|
from backend import db, app, jwt_extended
|
||||||
from backend.api import auth_api_bp, auth_api_providers_ns, auth_api_register_ns
|
from backend.api import auth_api_bp, auth_api_providers_ns, auth_api_register_ns
|
||||||
|
from backend.api.models import user_model
|
||||||
from backend.auth import AUTH_PROVIDERS, oidc_auth
|
from backend.auth import AUTH_PROVIDERS, oidc_auth
|
||||||
from backend.auth.oidc_config import PROVIDER_NAME
|
from backend.auth.oidc_config import PROVIDER_NAME
|
||||||
from backend.models.user_model import User, Group, BlacklistToken
|
from backend.models.user_model import User, Group, BlacklistToken
|
||||||
@@ -53,15 +55,6 @@ class AuthProviders(Resource):
|
|||||||
return get_auth_providers()
|
return get_auth_providers()
|
||||||
|
|
||||||
|
|
||||||
@auth_api_bp.route('/register', methods=('POST',))
|
|
||||||
def register():
|
|
||||||
data = request.get_json()
|
|
||||||
user = User(**data)
|
|
||||||
db.session.add(user)
|
|
||||||
db.session.commit()
|
|
||||||
return jsonify(user.to_dict()), 201
|
|
||||||
|
|
||||||
|
|
||||||
@auth_api_register_ns.route('/')
|
@auth_api_register_ns.route('/')
|
||||||
@auth_api_register_ns.expect(auth_api_register_ns.model('RegisterModel', {
|
@auth_api_register_ns.expect(auth_api_register_ns.model('RegisterModel', {
|
||||||
'nickname': fields.String(required=False, description='The user\'s nickname'),
|
'nickname': fields.String(required=False, description='The user\'s nickname'),
|
||||||
@@ -69,12 +62,24 @@ def register():
|
|||||||
'last_name': fields.String(required=False, description='The user\'s last name'),
|
'last_name': fields.String(required=False, description='The user\'s last name'),
|
||||||
'lang': fields.String(required=False, description='The user\'s preferred language'),
|
'lang': fields.String(required=False, description='The user\'s preferred language'),
|
||||||
'timezone': fields.String(required=False, description='The user\'s preferred timezone'),
|
'timezone': fields.String(required=False, description='The user\'s preferred timezone'),
|
||||||
'email': fields.String(required=True, description='The user\'s e-mail address'),
|
'email': fields.String(required=True, type=inputs.email(), description='The user\'s e-mail address'),
|
||||||
'password': fields.String(required=False, description='The group\'s name')
|
'password': fields.String(required=False, description='The group\'s name')
|
||||||
}))
|
}))
|
||||||
class AuthProviders(Resource):
|
class Registration(Resource):
|
||||||
def get(self):
|
@auth_api_register_ns.marshal_list_with(user_model)
|
||||||
return register()
|
def post(self):
|
||||||
|
print("in registration")
|
||||||
|
data = request.get_json()
|
||||||
|
try:
|
||||||
|
user = User(**data)
|
||||||
|
db.session.add(user)
|
||||||
|
db.session.commit()
|
||||||
|
pprint(user.to_dict())
|
||||||
|
return user, 201
|
||||||
|
except IntegrityError as e:
|
||||||
|
abort(400, message=str(e).split('\n')[0].split(')')[1].strip())
|
||||||
|
except AssertionError as e:
|
||||||
|
abort(400, message=str(e))
|
||||||
|
|
||||||
|
|
||||||
@auth_api_bp.route('/login', methods=('GET', 'POST',))
|
@auth_api_bp.route('/login', methods=('GET', 'POST',))
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ class RecorderList(Resource):
|
|||||||
return recorder
|
return recorder
|
||||||
except LrcException as e:
|
except LrcException as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
return api_recorder.abort(400, str(e))
|
return api_recorder.abort(400, message=str(e))
|
||||||
|
|
||||||
|
|
||||||
@api_recorder.route('/model/<int:id>')
|
@api_recorder.route('/model/<int:id>')
|
||||||
|
|||||||
@@ -128,4 +128,4 @@ class RoomList(Resource):
|
|||||||
return str(e.detail), 400
|
return str(e.detail), 400
|
||||||
except LrcException as e:
|
except LrcException as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
return api_room.abort(400, str(e))
|
return api_room.abort(400, message=str(e))
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Example user model and related models
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from sqlalchemy.orm import relation
|
from sqlalchemy.orm import relation, validates
|
||||||
from sqlalchemy import MetaData, any_
|
from sqlalchemy import MetaData, any_
|
||||||
|
|
||||||
from backend import db, app, login_manager
|
from backend import db, app, login_manager
|
||||||
@@ -20,6 +20,7 @@ from datetime import datetime, timedelta
|
|||||||
from passlib.hash import sha256_crypt
|
from passlib.hash import sha256_crypt
|
||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
|
|
||||||
|
|
||||||
metadata = MetaData()
|
metadata = MetaData()
|
||||||
|
|
||||||
followers = db.Table('followers',
|
followers = db.Table('followers',
|
||||||
@@ -137,6 +138,11 @@ class User(UserMixin, db.Model):
|
|||||||
if external_user is not None:
|
if external_user is not None:
|
||||||
self.external_user = external_user
|
self.external_user = external_user
|
||||||
|
|
||||||
|
@validates('email')
|
||||||
|
def validate_address(self, key, email):
|
||||||
|
assert re.match(r"[^@]+@[^@]+\.[^@]+", email), "email is invalid"
|
||||||
|
return email
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@login_manager.user_loader
|
@login_manager.user_loader
|
||||||
def get_by_identifier(identifier):
|
def get_by_identifier(identifier):
|
||||||
|
|||||||
Reference in New Issue
Block a user