Added enumeration of all Users.
This commit is contained in:
parent
dd7f0aa4ac
commit
3513ef5530
1 changed files with 27 additions and 6 deletions
33
main.py
33
main.py
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue