Fix more foreing key usages
All checks were successful
ci/woodpecker/manual/woodpecker Pipeline was successful

Also refactors user info to class
This commit is contained in:
2023-08-06 05:43:47 +03:00
parent a637c2d2a1
commit c8b09d54f8
6 changed files with 56 additions and 51 deletions

View File

@@ -8,6 +8,8 @@ from flask import g, request
from flask_wtf import FlaskForm
from pymongo import MongoClient
from kubernetes import client, config
from typing import List
from dataclasses import dataclass, field
import const
@@ -16,14 +18,30 @@ OIDC_USERS_NAMESPACE = os.getenv("OIDC_USERS_NAMESPACE")
db = MongoClient(const.MONGO_URI).get_default_database()
@dataclass
class User:
username: str = None
display_name: str = None
groups: List[str] = field(default_factory=list)
def __getitem__(self, item):
return getattr(self, item)
def get_users():
config.load_incluster_config()
api_instance = client.CustomObjectsApi()
ret = api_instance.list_namespaced_custom_object("codemowers.io", "v1alpha1", OIDC_USERS_NAMESPACE, "oidcgatewayusers")
return ret["items"]
for item in ret["items"]:
username = item['metadata']['name']
display_name = item.get("spec", {}).get("customProfile", {}).get("name", None)
groups = []
for group in item.get("status", {}).get("groups", []):
groups.append(f"{group['prefix']}:{group['name']}")
yield User(username, display_name, groups)
users = get_users()
users_lookup = {u['metadata']['name'] : u for u in users}
users = list(get_users())
users_lookup = {u.username : u for u in users}
class CustomForm(FlaskForm):
# quite hacky
@@ -90,7 +108,7 @@ def build_query(base_query, fields=[], sort_fields={}):
val = request.args.get(key, type=tp)
results = db.inventory.find(base_query).distinct(attr)
if key in ("inventory_owner_username", "inventory_user_username"):
results = [{"username": u, "display_name": users_lookup.get(u, {}).get("spec", {}).get("customProfile", {}).get("name", u)} for u in results]
results = [{"username": u, "display_name": users_lookup.get(u, User()).display_name or u} for u in results]
results = sorted(results, key = lambda k: k["display_name"])
elif tp != list:
results = sorted(results)