Skip to content
Snippets Groups Projects
Commit e67ac230 authored by robban64's avatar robban64
Browse files

fix: add allowed_views in more get routes

parent 805ddf8c
No related branches found
No related tags found
1 merge request!102Resolve "Add presentation authorization"
...@@ -17,7 +17,7 @@ question_alternative_parser.add_argument("value", type=int, default=None, locati ...@@ -17,7 +17,7 @@ question_alternative_parser.add_argument("value", type=int, default=None, locati
@api.route("") @api.route("")
@api.param("competition_id, slide_id, question_id") @api.param("competition_id, slide_id, question_id")
class QuestionAlternativeList(Resource): class QuestionAlternativeList(Resource):
@protect_route(allowed_roles=["*"], allowed_views=["Team", "Judge"]) @protect_route(allowed_roles=["*"], allowed_views=["*"])
def get(self, competition_id, slide_id, question_id): def get(self, competition_id, slide_id, question_id):
items = dbc.get.question_alternative_list(competition_id, slide_id, question_id) items = dbc.get.question_alternative_list(competition_id, slide_id, question_id)
return list_response(list_schema.dump(items)) return list_response(list_schema.dump(items))
...@@ -32,7 +32,7 @@ class QuestionAlternativeList(Resource): ...@@ -32,7 +32,7 @@ class QuestionAlternativeList(Resource):
@api.route("/<alternative_id>") @api.route("/<alternative_id>")
@api.param("competition_id, slide_id, question_id, alternative_id") @api.param("competition_id, slide_id, question_id, alternative_id")
class QuestionAlternatives(Resource): class QuestionAlternatives(Resource):
@protect_route(allowed_roles=["*"]) @protect_route(allowed_roles=["*"], allowed_views=["*"])
def get(self, competition_id, slide_id, question_id, alternative_id): def get(self, competition_id, slide_id, question_id, alternative_id):
items = dbc.get.question_alternative(competition_id, slide_id, question_id, alternative_id) items = dbc.get.question_alternative(competition_id, slide_id, question_id, alternative_id)
return item_response(schema.dump(items)) return item_response(schema.dump(items))
......
...@@ -12,6 +12,8 @@ from flask_jwt_extended import ( ...@@ -12,6 +12,8 @@ from flask_jwt_extended import (
) )
from flask_restx import Resource from flask_restx import Resource
from flask_restx import inputs, reqparse from flask_restx import inputs, reqparse
from datetime import timedelta
from app.core import sockets
api = AuthDTO.api api = AuthDTO.api
schema = AuthDTO.schema schema = AuthDTO.schema
...@@ -90,11 +92,16 @@ class AuthLoginCode(Resource): ...@@ -90,11 +92,16 @@ class AuthLoginCode(Resource):
code = args["code"] code = args["code"]
if not verify_code(code): if not verify_code(code):
api.abort(codes.BAD_REQUEST, "Invalid code") api.abort(codes.UNAUTHORIZED, "Invalid code")
item_code = dbc.get.code_by_code(code) item_code = dbc.get.code_by_code(code)
access_token = create_access_token(item_code.id, user_claims=get_code_claims(item_code)) if item_code.competition_id not in sockets.presentations:
api.abort(codes.UNAUTHORIZED, "Competition not active")
access_token = create_access_token(
item_code.id, user_claims=get_code_claims(item_code), expires_delta=timedelta(hours=8)
)
response = { response = {
"competition_id": item_code.competition_id, "competition_id": item_code.competition_id,
...@@ -107,11 +114,11 @@ class AuthLoginCode(Resource): ...@@ -107,11 +114,11 @@ class AuthLoginCode(Resource):
@api.route("/logout") @api.route("/logout")
class AuthLogout(Resource): class AuthLogout(Resource):
@protect_route(allowed_roles=["*"]) @protect_route(allowed_roles=["*"], allowed_views=["*"])
def post(self): def post(self):
jti = get_raw_jwt()["jti"] jti = get_raw_jwt()["jti"]
dbc.add.blacklist(jti) dbc.add.blacklist(jti)
return text_response("User logout") return text_response("Logout")
@api.route("/refresh") @api.route("/refresh")
......
...@@ -27,7 +27,7 @@ component_create_parser.add_argument("type_id", type=int, required=True, locatio ...@@ -27,7 +27,7 @@ component_create_parser.add_argument("type_id", type=int, required=True, locatio
@api.route("/<component_id>") @api.route("/<component_id>")
@api.param("competition_id, slide_id, component_id") @api.param("competition_id, slide_id, component_id")
class ComponentByID(Resource): class ComponentByID(Resource):
@protect_route(allowed_roles=["*"]) @protect_route(allowed_roles=["*"], allowed_views=["*"])
def get(self, competition_id, slide_id, component_id): def get(self, competition_id, slide_id, component_id):
item = dbc.get.component(competition_id, slide_id, component_id) item = dbc.get.component(competition_id, slide_id, component_id)
return item_response(schema.dump(item)) return item_response(schema.dump(item))
...@@ -50,7 +50,7 @@ class ComponentByID(Resource): ...@@ -50,7 +50,7 @@ class ComponentByID(Resource):
@api.route("") @api.route("")
@api.param("competition_id, slide_id") @api.param("competition_id, slide_id")
class ComponentList(Resource): class ComponentList(Resource):
@protect_route(allowed_roles=["*"]) @protect_route(allowed_roles=["*"], allowed_views=["*"])
def get(self, competition_id, slide_id): def get(self, competition_id, slide_id):
items = dbc.get.component_list(competition_id, slide_id) items = dbc.get.component_list(competition_id, slide_id)
return list_response(list_schema.dump(items)) return list_response(list_schema.dump(items))
......
...@@ -48,7 +48,7 @@ class ImageList(Resource): ...@@ -48,7 +48,7 @@ class ImageList(Resource):
@api.route("/images/<ID>") @api.route("/images/<ID>")
@api.param("ID") @api.param("ID")
class ImageList(Resource): class ImageList(Resource):
@protect_route(allowed_roles=["*"]) @protect_route(allowed_roles=["*"], allowed_views=["*"])
def get(self, ID): def get(self, ID):
item = dbc.get.one(Media, ID) item = dbc.get.one(Media, ID)
return item_response(schema.dump(item)) return item_response(schema.dump(item))
......
...@@ -23,7 +23,7 @@ name_parser.add_argument("name", type=str, required=True, location="json") ...@@ -23,7 +23,7 @@ name_parser.add_argument("name", type=str, required=True, location="json")
@api.route("/types") @api.route("/types")
class TypesList(Resource): class TypesList(Resource):
@protect_route(allowed_roles=["*"]) @protect_route(allowed_roles=["*"], allowed_views=["*"])
def get(self): def get(self):
result = {} result = {}
result["media_types"] = media_type_schema.dump(dbc.get.all(MediaType)) result["media_types"] = media_type_schema.dump(dbc.get.all(MediaType))
......
...@@ -151,9 +151,13 @@ def competition(name, year, city_id): ...@@ -151,9 +151,13 @@ def competition(name, year, city_id):
# Add code for Judge view # Add code for Judge view
code(2, item_competition.id) code(2, item_competition.id)
# Add code for Audience view # Add code for Audience view
code(3, item_competition.id) code(3, item_competition.id)
# Add code for Operator view
code(4, item_competition.id)
item_competition = utils.refresh(item_competition) item_competition = utils.refresh(item_competition)
return item_competition return item_competition
......
...@@ -5,6 +5,7 @@ This file tests the api function calls. ...@@ -5,6 +5,7 @@ This file tests the api function calls.
import app.core.http_codes as codes import app.core.http_codes as codes
from app.database.controller.add import competition from app.database.controller.add import competition
from app.database.models import Slide from app.database.models import Slide
from app.core import sockets
from tests import app, client, db from tests import app, client, db
from tests.test_helpers import add_default_values, change_order_test, delete, get, post, put from tests.test_helpers import add_default_values, change_order_test, delete, get, post, put
...@@ -391,6 +392,9 @@ def test_question_api(client): ...@@ -391,6 +392,9 @@ def test_question_api(client):
def test_authorization(client): def test_authorization(client):
add_default_values() add_default_values()
# Fake that competition 1 is active
sockets.presentations[1] = {}
#### TEAM #### #### TEAM ####
# Login in with team code # Login in with team code
response, body = post(client, "/api/auth/login/code", {"code": "111111"}) response, body = post(client, "/api/auth/login/code", {"code": "111111"})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment