refactor(api): black

darta 2021-12-28 22:34:14 +01:00
parent cb187f6bef
commit 6c07d1dd1b
8 changed files with 185 additions and 142 deletions

View File

@ -1,65 +1,53 @@
#!flask/bin/python
# coding=utf-8
import os
import logging as log
import os
from flask import Flask, send_from_directory, render_template
app = Flask(__name__, static_url_path='')
app = Flask(__name__, template_folder='static/templates')
from flask import Flask, render_template, send_from_directory
app = Flask(__name__, static_url_path="")
app = Flask(__name__, template_folder="static/templates")
app.url_map.strict_slashes = False
'''
"""
App secret key for encrypting cookies
You can generate one with:
import os
os.urandom(24)
And paste it here.
'''
"""
app.secret_key = "Change this key!//\xf7\x83\xbe\x17\xfa\xa3zT\n\\]m\xa6\x8bF\xdd\r\xf7\x9e\x1d\x1f\x14'"
print('Starting isard-sso api...')
print("Starting isard-sso api...")
from api.lib.load_config import loadConfig
try:
loadConfig(app)
except:
print('Could not get environment variables...')
print("Could not get environment variables...")
'''
"""
Debug should be removed on production!
'''
"""
if app.debug:
log.warning('Debug mode: {}'.format(app.debug))
log.warning("Debug mode: {}".format(app.debug))
else:
log.info('Debug mode: {}'.format(app.debug))
log.info("Debug mode: {}".format(app.debug))
'''
"""
Serve static files
'''
@app.route('/templates/<path:path>')
"""
@app.route("/templates/<path:path>")
def send_templates(path):
return send_from_directory(os.path.join(app.root_path, 'static/templates'), path)
return send_from_directory(os.path.join(app.root_path, "static/templates"), path)
# @app.route('/static/<path:path>')
# def send_static_js(path):
# return send_from_directory(os.path.join(app.root_path, 'static'), path)
# @app.errorhandler(404)
# def not_found_error(error):
# return render_template('page_404.html'), 404
# @app.errorhandler(500)
# def internal_error(error):
# return render_template('page_500.html'), 500
'''
"""
Import all views
'''
from .views import MenuViews
from .views import AvatarsViews
"""
from .views import AvatarsViews, MenuViews

View File

@ -1,51 +1,52 @@
#!/usr/bin/env python
# coding=utf-8
import time
from api import app as application
from datetime import datetime, timedelta
import pprint
import json
import logging
import traceback
import yaml, json
import os
import pprint
import time
import traceback
from datetime import datetime, timedelta
import yaml
from keycloak import KeycloakAdmin
from api import app as application
class Avatars():
def __init__(self,
url="http://isard-sso-keycloak:8080/auth/",
username=os.environ['KEYCLOAK_USER'],
password=os.environ['KEYCLOAK_PASSWORD'],
realm='master',
verify=True):
self.url=url
self.username=username
self.password=password
self.realm=realm
self.verify=verify
class Avatars:
def __init__(
self,
url="http://isard-sso-keycloak:8080/auth/",
username=os.environ["KEYCLOAK_USER"],
password=os.environ["KEYCLOAK_PASSWORD"],
realm="master",
verify=True,
):
self.url = url
self.username = username
self.password = password
self.realm = realm
self.verify = verify
def connect(self):
self.keycloak_admin = KeycloakAdmin(server_url=self.url,
username=self.username,
password=self.password,
realm_name=self.realm,
verify=self.verify)
self.keycloak_admin = KeycloakAdmin(
server_url=self.url,
username=self.username,
password=self.password,
realm_name=self.realm,
verify=self.verify,
)
def get_user_avatar(self,username):
def get_user_avatar(self, username):
self.connect()
return self.keycloak_admin.get_user_id(username)
# # Add user
# new_user = keycloak_admin.create_user({"email": "example@example.com",
# "username": "example@example.com",
# "enabled": True,
# "firstName": "Example",
# "lastName": "Example"})
# print(new_user)
# print(new_user)

View File

@ -1,17 +1,18 @@
#!/usr/bin/env python
# coding=utf-8
from api import app
import os, sys
import logging as log
import os
import sys
import traceback
class loadConfig():
from api import app
def __init__(self, app=None):
class loadConfig:
def __init__(self, app=None):
try:
app.config.setdefault('DOMAIN', os.environ['DOMAIN'])
app.config.setdefault("DOMAIN", os.environ["DOMAIN"])
except Exception as e:
log.error(traceback.format_exc())

View File

@ -4,22 +4,23 @@
# Josep Maria Viñolas Auquer
# Alberto Larraz Dalmases
# License: AGPLv3
import time
from api import app as application
from datetime import datetime, timedelta
import pprint
import json
import logging
import pprint
import time
import traceback
import yaml, json
from datetime import datetime, timedelta
import yaml
from jinja2 import Environment, FileSystemLoader
from api import app as application
def write_css():
env = Environment(loader=FileSystemLoader('api/static/_templates'))
css_template = env.get_template('dd.css')
with open('menu/custom.yaml', 'r') as menu_custom_file:
env = Environment(loader=FileSystemLoader("api/static/_templates"))
css_template = env.get_template("dd.css")
with open("menu/custom.yaml", "r") as menu_custom_file:
menu_custom_yaml = menu_custom_file.read()
menu_custom = yaml.full_load(menu_custom_yaml)
css = css_template.render(data=menu_custom)
@ -27,51 +28,74 @@ def write_css():
css_file.write(css)
class Menu():
class Menu:
def __init__(self):
# self.user_menudict=self.gen_user_menu()
# pprint.pprint(self.user_menudict)
# self.write_user_menu()
self.menudict=self.gen_header()
self.menudict = self.gen_header()
pprint.pprint(self.menudict)
self.write_headers()
write_css()
''' HEADER & APP MENU '''
""" HEADER & APP MENU """
def gen_header(self):
with open(r'menu/system.yaml') as yml:
system=yaml.load(yml, Loader=yaml.FullLoader)
with open(r"menu/system.yaml") as yml:
system = yaml.load(yml, Loader=yaml.FullLoader)
user_menu = []
for item in system['user_menu']:
item['href']='https://'+item['subdomain']+'.'+application.config['DOMAIN']+item['href']
del item['subdomain']
for item in system["user_menu"]:
item["href"] = (
"https://"
+ item["subdomain"]
+ "."
+ application.config["DOMAIN"]
+ item["href"]
)
del item["subdomain"]
user_menu.append(item)
user_menu_dict={'user_menu':user_menu,
'user_avatar':'https://sso.'+application.config['DOMAIN']+'/auth/realms/master/avatar-provider'}
user_menu_dict = {
"user_menu": user_menu,
"user_avatar": "https://sso."
+ application.config["DOMAIN"]
+ "/auth/realms/master/avatar-provider",
}
apps_internal = []
for app in system['apps_internal']:
app['href']='https://'+app['subdomain']+'.'+application.config['DOMAIN']+app['href']
del app['subdomain']
for app in system["apps_internal"]:
app["href"] = (
"https://"
+ app["subdomain"]
+ "."
+ application.config["DOMAIN"]
+ app["href"]
)
del app["subdomain"]
apps_internal.append(app)
with open(r'menu/custom.yaml') as yml:
custom=yaml.load(yml, Loader=yaml.FullLoader)
custom['background_login']='https://api.'+application.config['DOMAIN']+custom['background_login']
custom['logo']='https://api.'+application.config['DOMAIN']+custom['logo']
with open(r"menu/custom.yaml") as yml:
custom = yaml.load(yml, Loader=yaml.FullLoader)
custom["background_login"] = (
"https://api." + application.config["DOMAIN"] + custom["background_login"]
)
custom["logo"] = "https://api." + application.config["DOMAIN"] + custom["logo"]
menudict={**custom,**{'apps_internal':apps_internal,**user_menu_dict}}
menudict['user']={}
menudict['user']['account']='https://sso.'+application.config['DOMAIN']+system['user']['account']
menudict['user']['avatar']='https://sso.'+application.config['DOMAIN']+system['user']['avatar']
menudict = {**custom, **{"apps_internal": apps_internal, **user_menu_dict}}
menudict["user"] = {}
menudict["user"]["account"] = (
"https://sso." + application.config["DOMAIN"] + system["user"]["account"]
)
menudict["user"]["avatar"] = (
"https://sso." + application.config["DOMAIN"] + system["user"]["avatar"]
)
return menudict
def write_headers(self):
env = Environment(loader=FileSystemLoader('api/static/_templates'))
env = Environment(loader=FileSystemLoader("api/static/_templates"))
template = env.get_template('user_menu.html')
template = env.get_template("user_menu.html")
output_from_parsed_template = template.render(data=self.menudict)
print(output_from_parsed_template)
with open("api/static/templates/user_menu_header.html", "w") as fh:
@ -80,7 +104,7 @@ class Menu():
# with open("api/static/templates/user_menu_header.json", "w") as fh:
# fh.write(json.dumps(self.menudict))
template = env.get_template('apps_menu.html')
template = env.get_template("apps_menu.html")
output_from_parsed_template = template.render(data=self.menudict)
print(output_from_parsed_template)
with open("api/static/templates/header.html", "w") as fh:

View File

@ -1,19 +1,34 @@
#!flask/bin/python
# coding=utf-8
from api import app
import json
import logging as log
import os
import sys
import time
import traceback
from uuid import uuid4
import time,json
import sys,os
from flask import render_template, Response, request, redirect, url_for, jsonify, send_from_directory
from flask import (
Response,
jsonify,
redirect,
render_template,
request,
send_from_directory,
url_for,
)
from api import app
from ..lib.avatars import Avatars
avatars = Avatars()
@app.route("/avatar/<username>", methods=["GET"])
def avatar(username):
print(app.root_path)
log.error(app.root_path)
return send_from_directory(os.path.join(app.root_path, '../avatars/master-avatars/'), avatars.get_user_avatar(username), mimetype='image/jpg')
return send_from_directory(
os.path.join(app.root_path, "../avatars/master-avatars/"),
avatars.get_user_avatar(username),
mimetype="image/jpg",
)

View File

@ -1,31 +1,41 @@
#!flask/bin/python
# coding=utf-8
from api import app
import json
import logging as log
import os
import sys
import time
import traceback
from uuid import uuid4
import time,json
import sys,os
from flask import render_template, Response, request, redirect, url_for, jsonify
from flask import Response, jsonify, redirect, render_template, request, url_for
from api import app
from ..lib.menu import Menu
menu = Menu()
@app.route('/header/<format>', methods=['GET'])
@app.route('/header/<format>/<application>', methods=['GET'])
def api_v2_header(format,application=False):
@app.route("/header/<format>", methods=["GET"])
@app.route("/header/<format>/<application>", methods=["GET"])
def api_v2_header(format, application=False):
if application == False:
if format == 'json':
if format == "json":
if application == False:
return json.dumps(menu.get_header()), 200, {'Content-Type': 'application/json'}
if format == 'html':
return (
json.dumps(menu.get_header()),
200,
{"Content-Type": "application/json"},
)
if format == "html":
if application == False:
return render_template('header.html')
if application == 'nextcloud':
return render_template('header_nextcloud.html')
if application == 'wordpress':
return render_template('header_wordpress.html')
return render_template("header.html")
if application == "nextcloud":
return render_template("header_nextcloud.html")
if application == "wordpress":
return render_template("header_wordpress.html")
# @app.route('/user_menu/<format>', methods=['GET'])
# @app.route('/user_menu/<format>/<application>', methods=['GET'])
@ -33,4 +43,4 @@ def api_v2_header(format,application=False):
# if application == False:
# if format == 'json':
# if application == False:
# return json.dumps(menu.get_user_nenu()), 200, {'Content-Type': 'application/json'}
# return json.dumps(menu.get_user_nenu()), 200, {'Content-Type': 'application/json'}

View File

@ -18,6 +18,4 @@ if __name__ == "__main__":
engineio_logger = logging.getLogger("engineio")
engineio_logger.setLevel("ERROR")
socketio.run(
app, host="0.0.0.0", port=7039, debug=False
)
socketio.run(app, host="0.0.0.0", port=7039, debug=False)

View File

@ -3,23 +3,29 @@ from pprint import pprint
from keycloak import KeycloakAdmin
def keycloak_connect():
keycloak_admin = KeycloakAdmin(server_url="http://isard-sso-keycloak:8080/auth/",
username='admin',
password='keycloakkeycloak',
realm_name="master",
user_realm_name="only_if_other_realm_than_master",
client_secret_key="client-secret",
verify=True)
keycloak_admin = KeycloakAdmin(
server_url="http://isard-sso-keycloak:8080/auth/",
username="admin",
password="keycloakkeycloak",
realm_name="master",
user_realm_name="only_if_other_realm_than_master",
client_secret_key="client-secret",
verify=True,
)
def keycloak_dumps():
print('Dumping keycloak config...')
print("Dumping keycloak config...")
def Keycloak_imports():
with open('saml_client.json') as json_file:
with open("saml_client.json") as json_file:
data = json.load(json_file)
if __name__ == "__main__":
keycloak_connect()
if sys.argv[1]=='dump':
if sys.argv[1] == "dump":
keycloak_dumps()