fix(api): fixed websocket /sio/events namespace with jwt

darta 2022-05-24 20:16:51 +02:00
parent e0eee87370
commit 267d1e26a1
18 changed files with 73 additions and 34 deletions

View File

@ -1,8 +1,9 @@
import os
from admin import app
from flask_login import LoginManager, UserMixin
from admin import app
""" OIDC TESTS """
# from flask_oidc import OpenIDConnect
# app.config.update({

View File

@ -9,10 +9,11 @@ import os
import traceback
from functools import wraps
from admin import app
from flask import request
from jose import jwt
from admin import app
from ..lib.api_exceptions import Error
@ -55,12 +56,15 @@ def get_token_auth_header():
def get_token_payload(token):
log.warning("The received token in get_token_payload is: " + str(token))
try:
claims = jwt.get_unverified_claims(token)
secret = app.config["API_SECRET"]
except:
log.warning("JWT token with invalid parameters. Can not parse it.")
log.warning(
"JWT token with invalid parameters. Can not parse it.: " + str(token)
)
raise Error(
"unauthorized",
"Unable to parse authentication parameters token.",
@ -75,7 +79,7 @@ def get_token_payload(token):
options=dict(verify_aud=False, verify_sub=False, verify_exp=True),
)
except jwt.ExpiredSignatureError:
log.info("Token expired")
log.warning("Token expired")
raise Error("unauthorized", "Token is expired", traceback.format_stack())
except jwt.JWTClaimsError:

View File

@ -6,12 +6,19 @@ from pprint import pprint
from time import sleep
import diceware
from admin import app
from .avatars import Avatars
from .helpers import (filter_roles_list, filter_roles_listofdicts,
get_gids_from_kgroup_ids, get_group_from_group_id,
gid2kpath, kpath2gid, system_username)
from .helpers import (
filter_roles_list,
filter_roles_listofdicts,
get_gids_from_kgroup_ids,
get_group_from_group_id,
gid2kpath,
kpath2gid,
system_username,
)
from .keycloak_client import KeycloakClient
from .moodle import Moodle
from .nextcloud import Nextcloud
@ -26,9 +33,14 @@ import secrets
from .api_exceptions import Error
from .events import Events, sio_event_send
from .exceptions import UserExists, UserNotFound
from .helpers import (count_repeated, get_group_with_childs,
get_kid_from_kpath, kpath2gids, kpath2kpaths,
rand_password)
from .helpers import (
count_repeated,
get_group_with_childs,
get_kid_from_kpath,
kpath2gids,
kpath2kpaths,
rand_password,
)
MANAGER = os.environ["CUSTOM_ROLE_MANAGER"]
TEACHER = os.environ["CUSTOM_ROLE_TEACHER"]

View File

@ -4,9 +4,10 @@ import logging as log
import os
import traceback
from admin import app
from flask import jsonify, request
from admin import app
content_type = {"Content-Type": "application/json"}
ex = {
"bad_request": {

View File

@ -2,12 +2,13 @@ import logging as log
import os
from pprint import pprint
from admin import app
from minio import Minio
from minio.commonconfig import REPLACE, CopySource
from minio.deleteobjects import DeleteObject
from requests import get, post
from admin import app
class Avatars:
def __init__(self):

View File

@ -7,10 +7,11 @@ from pprint import pprint
import requests
import yaml
from admin import app
from PIL import Image
from schema import And, Optional, Schema, SchemaError, Use
from admin import app
class Dashboard:
def __init__(

View File

@ -9,11 +9,19 @@ import traceback
from time import sleep
from uuid import uuid4
from flask import Response, jsonify, redirect, render_template, request, url_for
from flask_socketio import (
SocketIO,
close_room,
disconnect,
emit,
join_room,
leave_room,
rooms,
send,
)
from admin import app
from flask import (Response, jsonify, redirect, render_template, request,
url_for)
from flask_socketio import (SocketIO, close_room, disconnect, emit, join_room,
leave_room, rooms, send)
def sio_event_send(event, data):

View File

@ -5,7 +5,6 @@ import traceback
from admin import app
from pprint import pprint
from admin import app
from minio import Minio
from minio.commonconfig import REPLACE, CopySource
from minio.deleteobjects import DeleteObject

View File

@ -7,9 +7,10 @@ import sys
import traceback
import yaml
from admin import app
from cerberus import Validator, rules_set_registry, schema_registry
from admin import app
class AdminValidator(Validator):
None

View File

@ -2,9 +2,10 @@ import logging as log
import traceback
from pprint import pprint
from admin import app
from requests import get, post
from admin import app
from .exceptions import UserExists, UserNotFound
from .postgres import Postgres

View File

@ -10,6 +10,7 @@ import traceback
import urllib
import requests
# from ..lib.log import *
from admin import app

View File

@ -4,6 +4,7 @@ import json
import logging as log
import os
import random
# from .keycloak import Keycloak
# from .moodle import Moodle
import string
@ -13,6 +14,7 @@ from datetime import datetime, timedelta
import psycopg2
import yaml
from admin import app
from .postgres import Postgres

View File

@ -8,9 +8,10 @@ import sys
import time
import traceback
from admin import app
from flask import request
from admin import app
from ..lib.api_exceptions import Error
from .decorators import has_token

View File

@ -6,17 +6,18 @@ import logging as log
import os
import re
import sys
# import Queue
import threading
import time
import traceback
from uuid import uuid4
from admin import app
from flask import (Response, jsonify, redirect, render_template, request,
url_for)
from flask import Response, jsonify, redirect, render_template, request, url_for
from flask_login import current_user, login_required
from admin import app
from ..lib.helpers import system_group
from .decorators import login_or_token

View File

@ -1,9 +1,10 @@
import os
from admin import app
from flask import flash, redirect, render_template, request, url_for
from flask_login import current_user, login_required, login_user, logout_user
from admin import app
from ..auth.authentication import *

View File

@ -11,11 +11,19 @@ from pprint import pprint
from uuid import uuid4
import requests
from admin import app
from flask import (Response, jsonify, redirect, render_template, request,
send_file, url_for)
from flask import (
Response,
jsonify,
redirect,
render_template,
request,
send_file,
url_for,
)
from flask_login import login_required
from admin import app
from ..lib.avatars import Avatars
from .decorators import is_admin

View File

@ -8,9 +8,10 @@ import sys
import time
import traceback
from admin import app
from flask import request
from admin import app
from .decorators import is_internal

View File

@ -6,7 +6,6 @@ monkey_patch()
import json
<<<<<<< HEAD
from flask_login import login_required
from flask_socketio import (
SocketIO,
@ -19,14 +18,10 @@ from flask_socketio import (
send,
)
=======
>>>>>>> fix(admin): applied jwt token verification at ws and black/isort
from admin import app
from admin.auth.tokens import get_token_payload
from admin.lib.api_exceptions import Error
from flask import request
from flask_socketio import (SocketIO, close_room, disconnect, emit, join_room,
leave_room, rooms, send)
app.socketio = SocketIO(app)