apeters 519dbc73c6 Cat.
Signed-off-by: apeters <apeters@korves.net>
2025-06-03 11:40:56 +00:00

62 lines
1.7 KiB
Python

import components.users
from components.models.users import UserGroups
from components.web.utils import *
blueprint = Blueprint("groups", __name__, url_prefix="/system/groups")
@blueprint.context_processor
def load_context():
from components.models.users import UserProfile
context = dict()
context["schemas"] = {"user_profile": UserProfile.model_json_schema()}
return context
@blueprint.route("/", methods=["PATCH"])
@acl("system")
async def user_group():
try:
request_data = UserGroups.parse_obj(request.form_parsed)
assigned_to = [
u
for u in await components.users.search(name="")
if request_data.name in u.groups
]
assign_to = []
for user_id in request_data.members:
assign_to.append(await components.users.get(user_id=user_id))
_all = assigned_to + assign_to
async with ClusterLock("users", current_app):
for user in _all:
if request_data.name in user.groups:
user.groups.remove(request_data.name)
if request_data.new_name not in user.groups and user in assign_to:
user.groups.append(request_data.new_name)
await components.users.patch(
user_id=user.id, data=user.model_dump(mode="json")
)
return "", 204
except ValidationError as e:
return validation_error(e.errors())
except ValueError as e:
name, message = e.args
return validation_error([{"loc": [name], "msg": message}])
@blueprint.route("/")
@acl("system")
@formoptions(["users"])
async def get_groups():
return await render_template("system/groups.html", data={})