fix(admin): applied jwt token verification at ws and black/isort

darta 2022-05-24 08:52:42 +02:00
parent 9097f69273
commit e0eee87370
22 changed files with 96 additions and 86 deletions

View File

@ -1,8 +1,7 @@
import os
from flask_login import LoginManager, UserMixin
from admin import app
from flask_login import LoginManager, UserMixin
""" OIDC TESTS """
# from flask_oidc import OpenIDConnect

View File

@ -9,11 +9,10 @@ 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

View File

@ -6,19 +6,12 @@ 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
@ -31,16 +24,11 @@ options.num = 3
import secrets
from .api_exceptions import Error
from .events import Events
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"]
@ -396,6 +384,7 @@ class Admin:
# return users_list
def get_mix_users(self):
sio_event_send("get_users", {"you_win": "you got the users!"})
return self.internal["users"]
def _get_mix_users(self):
@ -1674,6 +1663,7 @@ class Admin:
ev.update_text("Syncing data from applications...")
self.resync_data()
ev.update_text("User deleted")
sio_event_send("delete_user", {"userid": userid})
return True
def get_user(self, userid):
@ -1826,6 +1816,7 @@ class Admin:
log.error(traceback.format_exc())
self.resync_data()
sio_event_send("new_user", u)
return uid
def add_group(self, g):

View File

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

View File

@ -2,13 +2,12 @@ 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,11 +7,10 @@ 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,19 +9,21 @@ 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):
app.socketio.emit(
event,
json.dumps(data),
namespace="/sio/events",
room="events",
)
sleep(0.001)
class Events:

View File

@ -3,6 +3,13 @@ import os
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
from requests import get, post
legal_path= os.path.join(app.root_path, "static/templates/pages/legal/")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,10 +1,9 @@
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,18 +11,10 @@ from pprint import pprint
from uuid import uuid4
import requests
from flask import (
Response,
jsonify,
redirect,
render_template,
request,
send_file,
url_for,
)
from flask_login import login_required
from admin import app
from flask import (Response, jsonify, redirect, render_template, request,
send_file, url_for)
from flask_login import login_required
from ..lib.avatars import Avatars
from .decorators import is_admin
@ -137,3 +129,10 @@ def web_sysadmin_external():
return render_template(
"pages/sysadmin/external.html", title="External", nav="External"
)
@app.route("/sockettest")
def web_sockettest():
return render_template(
"pages/sockettest.html", title="Sockettest Users", nav="SysAdminUsers"
)

View File

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

View File

@ -6,6 +6,7 @@ monkey_patch()
import json
<<<<<<< HEAD
from flask_login import login_required
from flask_socketio import (
SocketIO,
@ -18,7 +19,14 @@ 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)
@ -31,17 +39,41 @@ def socketio_connect():
"update", json.dumps("Joined admins room"), namespace="/sio", room="admin"
)
@app.socketio.on("disconnect", namespace="/sio")
def socketio_disconnect():
None
@app.socketio.on("connect", namespace="/sio/events")
def socketio_connect():
try:
jwt = get_token_payload(request.args.get("jwt"))
except:
return Error("bad_request", "Missing websocket jwt authorization bearer token")
payload = get_token_payload(jwt)
join_room("events")
app.socketio.emit(
"update",
json.dumps("Joined events room"),
namespace="/sio/events",
room="events",
)
@app.socketio.on("disconnect", namespace="/sio/events")
def socketio_events_disconnect():
None
if __name__ == "__main__":
app.socketio.run(
app,
host="0.0.0.0",
port=9000,
debug=True,
debug=False,
)
# ssl_context="adhoc",
# async_mode="threading",

View File

@ -3,12 +3,11 @@ import os
import secrets
import time
import traceback
from datetime import datetime, timedelta
from pprint import pprint
from datetime import datetime
from datetime import timedelta
from jose import jwt
import requests
from jose import jwt
## SETUP
domain = "admin.[YOURDOMAIN]"
@ -18,7 +17,7 @@ secret = "[your API_SECRET]"
auths = {}
dbconn = None
base = "https://"+domain+"/ddapi"
base = "https://" + domain + "/ddapi"
raw_jwt_data = {
"exp": datetime.utcnow() + timedelta(minutes=5),
@ -422,4 +421,3 @@ else:
+ " DESCRIPTION: "
+ json.loads(response.text)["description"]
)

View File

@ -9,15 +9,8 @@ import traceback
from uuid import uuid4
from api import app
from flask import (
Response,
jsonify,
redirect,
render_template,
request,
send_from_directory,
url_for,
)
from flask import (Response, jsonify, redirect, render_template, request,
send_from_directory, url_for)
from ..lib.avatars import Avatars

View File

@ -3,7 +3,8 @@
import os
from api 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 .decorators import is_internal

View File

@ -9,7 +9,8 @@ import traceback
from uuid import uuid4
from api 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 ..lib.menu import Menu