add ResourceType endpoints
This commit is contained in:
parent
cd70633d1f
commit
59a7206161
1 changed files with 74 additions and 11 deletions
|
|
@ -4,7 +4,7 @@ import uuid
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from decouple import config
|
from decouple import config
|
||||||
from fastapi import Depends, HTTPException, Header, Query, Response
|
from fastapi import Depends, HTTPException, Header, Query, Response, Request
|
||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse
|
||||||
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
|
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
@ -36,7 +36,6 @@ async def login(host: str = Header(..., alias="Host"), form_data: OAuth2Password
|
||||||
if form_data.username != config("SCIM_USER") or form_data.password != config("SCIM_PASSWORD"):
|
if form_data.username != config("SCIM_USER") or form_data.password != config("SCIM_PASSWORD"):
|
||||||
raise HTTPException(status_code=401, detail="Invalid credentials")
|
raise HTTPException(status_code=401, detail="Invalid credentials")
|
||||||
|
|
||||||
subdomain = "Openreplay EE"
|
|
||||||
tenant = tenants.get_by_name(subdomain)
|
tenant = tenants.get_by_name(subdomain)
|
||||||
access_token, refresh_token = create_tokens(tenant_id=tenant["tenantId"])
|
access_token, refresh_token = create_tokens(tenant_id=tenant["tenantId"])
|
||||||
|
|
||||||
|
|
@ -49,7 +48,71 @@ async def refresh_token(r: RefreshRequest):
|
||||||
payload = verify_refresh_token(r.refresh_token)
|
payload = verify_refresh_token(r.refresh_token)
|
||||||
new_access_token, _ = create_tokens(tenant_id=payload["tenant_id"])
|
new_access_token, _ = create_tokens(tenant_id=payload["tenant_id"])
|
||||||
|
|
||||||
return {"access_token": new_access_token, "token_type": "Bearer"}
|
return {"access_token": new_access_token, "token_type": "bearer"}
|
||||||
|
|
||||||
|
|
||||||
|
RESOURCE_TYPE_IDS_TO_RESOURCE_TYPE_DETAILS = {
|
||||||
|
"User": {
|
||||||
|
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:ResourceType"],
|
||||||
|
"id": "User",
|
||||||
|
"name": "User",
|
||||||
|
"endpoint": "/Users",
|
||||||
|
"description": "User account",
|
||||||
|
"schema": "urn:ietf:params:scim:schemas:core:2.0:User",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _not_found_error_response(resource_id: str):
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=404,
|
||||||
|
content={
|
||||||
|
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
|
||||||
|
"detail": f"Resource {resource_id} not found",
|
||||||
|
"status": "404",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@public_app.get("/ResourceTypes", dependencies=[Depends(auth_required)])
|
||||||
|
async def get_resource_types(r: Request):
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=200,
|
||||||
|
content={
|
||||||
|
"totalResults": len(RESOURCE_TYPE_IDS_TO_RESOURCE_TYPE_DETAILS),
|
||||||
|
"itemsPerPage": len(RESOURCE_TYPE_IDS_TO_RESOURCE_TYPE_DETAILS),
|
||||||
|
"startIndex": 1,
|
||||||
|
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
|
||||||
|
"Resources": sorted(
|
||||||
|
{
|
||||||
|
**value,
|
||||||
|
"meta": {
|
||||||
|
"location": str(r.url_for("get_resource_type", resource_id=value["id"])),
|
||||||
|
"resourceType": "ResourceType",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for value in RESOURCE_TYPE_IDS_TO_RESOURCE_TYPE_DETAILS.values()
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@public_app.get("/ResourceTypes/{resource_id}", dependencies=[Depends(auth_required)])
|
||||||
|
async def get_resource_type(r: Request, resource_id: str):
|
||||||
|
if resource_id not in RESOURCE_TYPE_IDS_TO_RESOURCE_TYPE_DETAILS:
|
||||||
|
return _not_found_error_response(resource_id)
|
||||||
|
content = {
|
||||||
|
**RESOURCE_TYPE_IDS_TO_RESOURCE_TYPE_DETAILS[resource_id],
|
||||||
|
"meta": {
|
||||||
|
"location": str(r.url),
|
||||||
|
"resourceType": "ResourceType",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=200,
|
||||||
|
content=content,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
User endpoints
|
User endpoints
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue