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 import os
from admin import app
from flask_login import LoginManager, UserMixin from flask_login import LoginManager, UserMixin
from admin import app
""" OIDC TESTS """ """ OIDC TESTS """
# from flask_oidc import OpenIDConnect # from flask_oidc import OpenIDConnect
# app.config.update({ # app.config.update({

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,11 +9,19 @@ import traceback
from time import sleep from time import sleep
from uuid import uuid4 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 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): def sio_event_send(event, data):

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -6,17 +6,18 @@ import logging as log
import os import os
import re import re
import sys import sys
# import Queue # import Queue
import threading import threading
import time import time
import traceback import traceback
from uuid import uuid4 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 flask_login import current_user, login_required
from admin import app
from ..lib.helpers import system_group from ..lib.helpers import system_group
from .decorators import login_or_token from .decorators import login_or_token

View File

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

View File

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

View File

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

View File

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