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 datetime import datetime, timezone
|
||||||
from dulwich import porcelain
|
from dulwich import porcelain
|
||||||
from dulwich.objects import Blob
|
|
||||||
from dulwich.repo import MemoryRepo
|
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
|
#Clone repo into memory
|
||||||
local_repo = MemoryRepo()
|
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"]
|
local_repo.refs[b"refs/heads/main"] = fetch_result.refs[b"refs/heads/main"]
|
||||||
last_tree = local_repo[local_repo[b"HEAD"].tree]
|
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("/")
|
@app.get("/")
|
||||||
def read_root():
|
def read_root():
|
||||||
return {"Hello": "World"}
|
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}")
|
@app.get("/v2/Users/{item_id}")
|
||||||
def read_user(item_id: uuid.UUID):
|
def read_user(item_id: uuid.UUID):
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Add table
Reference in a new issue