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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -10,7 +10,6 @@ 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,7 +4,6 @@ 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
@ -14,7 +13,6 @@ 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,8 @@ import sys
import time import time
import traceback import traceback
from flask import request
from admin import app from admin import app
from flask import request
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,16 @@ 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 flask import Response, jsonify, redirect, render_template, request, url_for
from flask_login import current_user, login_required
from admin import app 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 ..lib.helpers import system_group
from .decorators import login_or_token from .decorators import login_or_token

View File

@ -1,10 +1,9 @@
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,18 +11,10 @@ from pprint import pprint
from uuid import uuid4 from uuid import uuid4
import requests 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 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 ..lib.avatars import Avatars
from .decorators import is_admin from .decorators import is_admin
@ -137,3 +129,10 @@ def web_sysadmin_external():
return render_template( return render_template(
"pages/sysadmin/external.html", title="External", nav="External" "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 time
import traceback import traceback
from flask import request
from admin import app from admin import app
from flask import request
from .decorators import is_internal from .decorators import is_internal

View File

@ -6,6 +6,7 @@ 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,
@ -18,7 +19,14 @@ 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.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) app.socketio = SocketIO(app)
@ -31,17 +39,41 @@ def socketio_connect():
"update", json.dumps("Joined admins room"), namespace="/sio", room="admin" "update", json.dumps("Joined admins room"), namespace="/sio", room="admin"
) )
@app.socketio.on("disconnect", namespace="/sio") @app.socketio.on("disconnect", namespace="/sio")
def socketio_disconnect(): def socketio_disconnect():
None 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__": if __name__ == "__main__":
app.socketio.run( app.socketio.run(
app, app,
host="0.0.0.0", host="0.0.0.0",
port=9000, port=9000,
debug=True, debug=False,
) )
# ssl_context="adhoc", # ssl_context="adhoc",
# async_mode="threading", # async_mode="threading",

View File

@ -3,12 +3,11 @@ import os
import secrets import secrets
import time import time
import traceback import traceback
from datetime import datetime, timedelta
from pprint import pprint from pprint import pprint
from datetime import datetime
from datetime import timedelta
from jose import jwt
import requests import requests
from jose import jwt
## SETUP ## SETUP
domain = "admin.[YOURDOMAIN]" domain = "admin.[YOURDOMAIN]"
@ -422,4 +421,3 @@ else:
+ " DESCRIPTION: " + " DESCRIPTION: "
+ json.loads(response.text)["description"] + json.loads(response.text)["description"]
) )

View File

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

View File

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

View File

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