5
5
from typing import Annotated
6
6
7
7
from fastapi import APIRouter , Depends , HTTPException , Request , status
8
+ from pydantic import BaseModel
8
9
9
10
from soauth .core .app import AppData
10
11
from soauth .core .models import AppDetailResponse , AppRefreshResponse
@@ -36,6 +37,14 @@ async def handle_app_manager_user(request: Request) -> SOUserWithGrants:
36
37
app_management_routes = APIRouter (tags = ["App Management" ])
37
38
38
39
40
+ class AppCreationRequest (BaseModel ):
41
+ name : str
42
+ domain : str
43
+ redirect_url : str
44
+ visibility_grant : str | None = None
45
+ api_access : bool = False
46
+
47
+
39
48
@app_management_routes .put (
40
49
"/app" ,
41
50
summary = "Create a new application" ,
@@ -49,26 +58,22 @@ async def handle_app_manager_user(request: Request) -> SOUserWithGrants:
49
58
},
50
59
)
51
60
async def create_app (
52
- name : str ,
53
- domain : str ,
54
- redirect_url : str ,
55
- visibility_grant : str ,
56
- api_access : bool ,
61
+ model : AppCreationRequest ,
57
62
user : AppManagerUser ,
58
63
conn : DatabaseDependency ,
59
64
settings : SettingsDependency ,
60
65
log : LoggerDependency ,
61
66
) -> AppRefreshResponse :
62
- log = log .bind (user = user , domain = domain )
67
+ log = log .bind (user = user , creation_request = model )
63
68
# Note: the 'user' as given by the auth system is not the same as our database
64
69
# user, it's re-created from the webtoken.
65
70
database_user = await user_service .read_by_id (user_id = user .user_id , conn = conn )
66
71
app = await app_service .create (
67
- name = name ,
68
- domain = domain ,
69
- redirect_url = redirect_url ,
70
- visibility_grant = visibility_grant ,
71
- api_access = api_access ,
72
+ name = model . name ,
73
+ domain = model . domain ,
74
+ redirect_url = model . redirect_url ,
75
+ visibility_grant = model . visibility_grant ,
76
+ api_access = model . api_access ,
72
77
user = database_user ,
73
78
settings = settings ,
74
79
conn = conn ,
@@ -102,7 +107,10 @@ async def apps(
102
107
) -> list [AppData ]:
103
108
log = log .bind (user = user )
104
109
created_by = None if "admin" in user .grants else user .user_id
105
- result = await app_service .get_app_list (created_by_user_id = created_by , user_name = user .display_name , conn = conn )
110
+ database_user = await user_service .read_by_id (user_id = user .user_id , conn = conn )
111
+ result = await app_service .get_app_list (
112
+ created_by_user_id = created_by , user = database_user , conn = conn
113
+ )
106
114
log .bind (number_of_apps = len (result ))
107
115
await log .ainfo ("api.appmanager.apps" )
108
116
return result
0 commit comments