Added enumeration of all Users.

This commit is contained in:
Mikael Frykholm 2024-07-25 15:32:42 +02:00
parent dd7f0aa4ac
commit 3513ef5530
Signed by: mifr
GPG key ID: 1467F9D69135C236

33
main.py
View file

@ -1,11 +1,13 @@
from typing import Union
import uuid
from fastapi import FastAPI
import json
from datetime import datetime, timezone
from dulwich import porcelain
from dulwich.objects import Blob
from dulwich.repo import MemoryRepo
from fastapi import FastAPI
from fastapi.responses import JSONResponse
import json
import uuid
class SCIMResponse(JSONResponse):
media_type = "application/scim+json"
#Clone repo into memory
local_repo = MemoryRepo()
@ -14,12 +16,31 @@ fetch_result = porcelain.fetch(local_repo, "ssh://git@platform.sunet.se:22022/mi
local_repo.refs[b"refs/heads/main"] = fetch_result.refs[b"refs/heads/main"]
last_tree = local_repo[local_repo[b"HEAD"].tree]
app = FastAPI()
app = FastAPI(default_response_class=SCIMResponse)
def list_below(store, treeid, base):
for name, mode, sha in store[treeid.id].iteritems():
if not base:
base = b""
if name == base:
for name, mode, sha in store[sha].iteritems():
yield name, mode, sha
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/v2/Users")
def read_all_user():
all_entries = list(list_below(local_repo, last_tree, b'Users'))
response = {}
response["schemas"] = ("urn:ietf:params:scim:api:messages:2.0:ListResponse")
response["totalResults"] = len(all_entries)
response['Resources'] = []
for entry in all_entries:
response['Resources'].append(read_user(entry[0].split(b'.json')[0].decode('utf-8')))
return response
@app.get("/v2/Users/{item_id}")
def read_user(item_id: uuid.UUID):
try: