debug server problems, implement auth route

This commit is contained in:
Sorrel Bri 2019-10-05 22:40:02 -07:00
parent 7c14f451bb
commit cc3b9eebf5
15 changed files with 185 additions and 40 deletions

View file

@ -1,5 +1,7 @@
from models.User import User, user_schema
class UserEndpoint(object):
def users():
response = {"message": "users page"}
user = User.query.first()
response = user_schema.dumps(user)
return response

20
app.py Normal file
View file

@ -0,0 +1,20 @@
import os
from database import db, ma
from flask import Flask
from configuration.config import DevelopmentConfig
from flask_bcrypt import Bcrypt
from flask_cors import CORS
def create_app():
app = Flask(__name__)
CORS(app)
app.config.from_object(DevelopmentConfig)
db.init_app(app)
ma.init_app(app)
return app
bcrypt = Bcrypt(create_app())

View file

@ -1,12 +1,47 @@
from flask import Blueprint, request, jsonify, session
from models import User
print(User)
from database import db
from models.User import User
auth = Blueprint('auth', __name__, url_prefix='/auth')
@auth.route('/signup', methods=['POST'])
def auth_signup():
response = {"message": "signup post"}
return jsonify(response)
data = request.get_json()
user = User.query.filter_by(email=data.get('email')).first()
if not user:
try:
print('getting here 1')
user = User(
email = data['email'],
password = data['password'],
)
print('getting here 2')
db.session.add(user)
print('wtf')
db.session.commit()
print('user')
auth_token = user.encode_auth_token(user.id)
print('getting here 4')
response = {
'status': 'success',
'message': 'Succesfully registered.',
'auth_token': auth_token.decode()
}
return jsonify(response), 201
except Exception as e:
print(e.__dict__)
response = {
'status': 'fail',
'message': 'There was an error. Please try again.'
}
return jsonify(response), 401
else:
response = {
'status': 'fail',
'message': 'User already exists. Please login.'
}
return jsonify(response), 202
@auth.route('/login', methods=['POST'])
def auth_login():

View file

View file

@ -2,12 +2,7 @@
# ! SQLAlchemy > Marshmallow - these must be imported in this order
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from flask_bcrypt import Bcrypt
# init bcrypt
def bcrypt(app):
Bcrypt(app)
# init database
db = SQLAlchemy()

View file

@ -4,11 +4,20 @@ import unittest
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import app, db
from database import db
from app import create_app
app = create_app()
migrate = Migrate(app, db)
manager = Manager(app)
from models.Game import Game
from models.GameRoom import GameRoom
from models.Message import Message
from models.Move import Move
from models.TimeSettings import TimeSettings
from models.User import User
# migrations
manager.add_command('db', MigrateCommand)

View file

@ -0,0 +1,28 @@
"""empty message
Revision ID: 50aab465cf44
Revises: bfa4b406e22f
Create Date: 2019-10-05 22:37:07.643522
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '50aab465cf44'
down_revision = 'bfa4b406e22f'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('users', sa.Column('password', sa.String(length=255), nullable=False))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('users', 'password')
# ### end Alembic commands ###

View file

@ -39,7 +39,7 @@ def upgrade():
op.create_table('users',
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
sa.Column('email', sa.String(length=255), nullable=False),
sa.Column('password', sa.DateTime(), nullable=False),
sa.Column('password', sa.Integer(length=255), nullable=False),
sa.Column('registered_on', sa.DateTime(), nullable=False),
sa.Column('admin', sa.Boolean(), nullable=False),
sa.Column('rank', sa.Enum('D7', 'D6', 'D5', 'D4', 'D3', 'D2', 'D1', 'K1', 'K2', 'K3', 'K4', 'K5', 'K6', 'K7', 'K8', 'K9', 'K10', 'K11', 'K12', 'K13', 'K14', 'K15', 'K16', 'K17', 'K18', 'K19', 'K20', 'K21', 'K22', 'K23', 'K24', 'K25', 'K26', 'K27', 'K28', 'K29', 'K30', name='ranks'), nullable=True),

View file

@ -0,0 +1,28 @@
"""empty message
Revision ID: bdc3cd5d7499
Revises: 16c70b11242e
Create Date: 2019-10-05 22:34:04.358841
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'bdc3cd5d7499'
down_revision = '16c70b11242e'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('moves', sa.Column('is_pass', sa.Boolean(), nullable=False))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('moves', 'is_pass')
# ### end Alembic commands ###

View file

@ -0,0 +1,28 @@
"""empty message
Revision ID: bfa4b406e22f
Revises: bdc3cd5d7499
Create Date: 2019-10-05 22:36:45.420054
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = 'bfa4b406e22f'
down_revision = 'bdc3cd5d7499'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('users', 'password')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('users', sa.Column('password', postgresql.TIMESTAMP(), autoincrement=False, nullable=False))
# ### end Alembic commands ###

View file

@ -1,4 +1,6 @@
from database import db, ma, bcrypt
from database import db, ma
from app import bcrypt
from configuration import config
import datetime
import enum
import jwt
@ -48,7 +50,7 @@ class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
email = db.Column(db.String(255), unique=True, nullable=False)
password = db.Column(db.DateTime, nullable=False)
password = db.Column(db.String(255), nullable=False)
registered_on = db.Column(db.DateTime, nullable=False)
admin = db.Column(db.Boolean, nullable=False, default=False)
rank = db.Column(db.Enum(Ranks))
@ -56,10 +58,13 @@ class User(db.Model):
rank_certainty = db.Column(db.Boolean, nullable=False, default=False)
def __init__(self, email, password, admin=False,):
print('user init')
self.email = email
print('user email init')
self.password = bcrypt.generate_password_hash(
password, app.config.get('BCRYPT_LOG_ROUNDS')
password, 13
).decode()
print('user password init')
self.registered_on = datetime.datetime.now()
self.admin = admin
@ -96,3 +101,17 @@ class User(db.Model):
return 'Signature expired. Please log in again.'
except jwt.InvalidTokenError:
return 'Invalid token. Please log in again.'
class UserSchema(ma.ModelSchema):
class Meta:
fields = (
'id',
'name',
'registered_on',
'rank',
'rank_certainty',
'elo'
)
user_schema = UserSchema()
users_schema = UserSchema(many=True)

View file

@ -1,36 +1,17 @@
import os
from database import db, ma, bcrypt
from flask import Flask
from flask_migrate import Migrate
from flask_cors import CORS
from app import create_app, db
# Blueprints
from api.api import api
from auth.auth import auth
import config.models_mount
import configuration.models_mount
from flask_migrate import Migrate
def create_app():
app = Flask(__name__)
bcrypt(app)
CORS(app)
app_settings = os.getenv(
'APP_SETTINGS',
'config.config.DevelopmentConfig'
)
app.config.from_object(app_settings)
db.init_app(app)
ma.init_app(app)
app.register_blueprint(api)
app.register_blueprint(auth)
migrate = Migrate(app, db)
return app
if __name__ == '__main__':
app = create_app()
app.register_blueprint(api)
app.register_blueprint(auth)
migrate = Migrate(app, db)
app.run(port=8000, debug=True)