From 8cd08567281b53c3fd24e48dfd849e7db9d1292c Mon Sep 17 00:00:00 2001 From: Sorrel Bri Date: Tue, 8 Oct 2019 22:53:37 -0700 Subject: [PATCH] add rooms post route --- api/decorators.py | 10 ++++++++-- api/rooms/api_rooms.py | 26 +++++++++++++++++++++++++- models/GameRoom.py | 23 ++++++++++++++++++++--- models/User.py | 6 ++---- 4 files changed, 55 insertions(+), 10 deletions(-) diff --git a/api/decorators.py b/api/decorators.py index a34620f..58f1a65 100644 --- a/api/decorators.py +++ b/api/decorators.py @@ -1,12 +1,18 @@ from flask import Blueprint, request, jsonify, session +import os +import jwt def jwt_required(): def decorator(func): def authorized(*args, **kwargs): auth_header = request.headers.get('Authorization') or None + print(User.decode_auth_token(auth_header.split(" ")[1])) if auth_header: - # check secret on auth header - return func(*args, **kwargs) + auth_token = auth_header.split(" ")[1] + if jwt.decode(auth_token, os.environ.get('SECRET_KEY')): + return func(*args, **kwargs) + else: + abort(401) else: abort(401) return authorized diff --git a/api/rooms/api_rooms.py b/api/rooms/api_rooms.py index 19c3346..f470349 100644 --- a/api/rooms/api_rooms.py +++ b/api/rooms/api_rooms.py @@ -1,6 +1,7 @@ from models.User import User, user_schema, users_schema from models.GameRoom import GameRoom from flask import Blueprint, request, jsonify, session +from ..decorators import jwt_required api_rooms = Blueprint('api_rooms', __name__, url_prefix='/api/rooms') @@ -15,5 +16,28 @@ def get_rooms(): # protected route @api_rooms.route('/', methods=['POST']) +@jwt_required() def post_room(): - pass \ No newline at end of file + data = request.get_json() + try: + room = GameRoom( + name = data['name'], + description = data['description'], + private = data['private'], + language = data['language'] + ) + db.session.add(room) + db.session.commit() + response = { + 'status': 'success', + 'message': 'Succesfully registered.', + 'gameRoom': room.id + } + 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 \ No newline at end of file diff --git a/models/GameRoom.py b/models/GameRoom.py index 3e5239c..0a83fb3 100644 --- a/models/GameRoom.py +++ b/models/GameRoom.py @@ -1,8 +1,14 @@ from app import db, ma +# TODO User >---< GameRoom import enum +game_rooms_users = db.Table('game_rooms_users', + db.Column('user_id', db.Integer, db.ForeignKey('users.id'), primary_key=True), + db.Column('game_rooms_id', db.Integer, db.ForeignKey('game_rooms.id'), primary_key=True) +) + class Languages(enum.Enum): - EN: "English" + EN = "English" class GameRoom(db.Model): __tablename__ = "game_rooms" @@ -14,5 +20,16 @@ class GameRoom(db.Model): private = db.Column(db.Boolean(), nullable=False, default=False) language = db.Column(db.Enum(Languages), nullable=False) - def __init__(self): - pass \ No newline at end of file + # ! Foreign Keys + users = db.relationship( + 'User', + secondary=game_rooms_users, + lazy='subquery', + backref=db.backref('game_rooms', lazy=True) + ) + + def __init__(self, name, description, private=False, language=Languages.EN): + self.name = name + self.description = description + self.private = private + self.language = language diff --git a/models/User.py b/models/User.py index 917df4c..73c6bea 100644 --- a/models/User.py +++ b/models/User.py @@ -46,7 +46,7 @@ class Ranks(enum.Enum): # with minimal Elo rating K28 = "Twenty-Eight Kyu" K29 = "Twenty-Nine Kyu" K30 = "Thirty Kyu" # Elo -900 - RU = "Unknown Rank" + UR = "Unknown Rank" class User(db.Model): __tablename__ = "users" @@ -61,9 +61,7 @@ class User(db.Model): elo = db.Column(db.Integer) rank_certainty = db.Column(db.Boolean, nullable=False, default=False) - def __init__(self, username, email, password, rank=Ranks.K1, admin=False): - print(rank) - print(Ranks) + def __init__(self, username, email, password, rank=Ranks.UR, admin=False): self.username = username self.email = email self.password = bcrypt.generate_password_hash(