@@ -1129,6 +1129,7 @@ async def get_server(server_id: str, db: Session = Depends(get_db), user=Depends
1129
1129
@require_permission ("servers.create" )
1130
1130
async def create_server (
1131
1131
server : ServerCreate ,
1132
+ request : Request ,
1132
1133
team_id : Optional [str ] = Body (None , description = "Team ID to assign server to" ),
1133
1134
visibility : str = Body ("private" , description = "Server visibility: private, team, public" ),
1134
1135
db : Session = Depends (get_db ),
@@ -1139,6 +1140,7 @@ async def create_server(
1139
1140
1140
1141
Args:
1141
1142
server (ServerCreate): The data for the new server.
1143
+ request (Request): The incoming request object for extracting metadata.
1142
1144
team_id (Optional[str]): Team ID to assign the server to.
1143
1145
visibility (str): Server visibility level (private, team, public).
1144
1146
db (Session): The database session used to interact with the data store.
@@ -1151,6 +1153,9 @@ async def create_server(
1151
1153
HTTPException: If there is a conflict with the server name or other errors.
1152
1154
"""
1153
1155
try :
1156
+ # Extract metadata from request
1157
+ metadata = MetadataCapture .extract_creation_metadata (request , user )
1158
+
1154
1159
# Get user email and handle team assignment
1155
1160
user_email = get_user_email (user )
1156
1161
@@ -1165,7 +1170,17 @@ async def create_server(
1165
1170
team_id = personal_team .id if personal_team else None
1166
1171
1167
1172
logger .debug (f"User { user_email } is creating a new server for team { team_id } " )
1168
- return await server_service .register_server (db , server , created_by = user_email , team_id = team_id , owner_email = user_email , visibility = visibility )
1173
+ return await server_service .register_server (
1174
+ db ,
1175
+ server ,
1176
+ created_by = metadata ["created_by" ],
1177
+ created_from_ip = metadata ["created_from_ip" ],
1178
+ created_via = metadata ["created_via" ],
1179
+ created_user_agent = metadata ["created_user_agent" ],
1180
+ team_id = team_id ,
1181
+ owner_email = user_email ,
1182
+ visibility = visibility ,
1183
+ )
1169
1184
except ServerNameConflictError as e :
1170
1185
raise HTTPException (status_code = 409 , detail = str (e ))
1171
1186
except ServerError as e :
@@ -1183,6 +1198,7 @@ async def create_server(
1183
1198
async def update_server (
1184
1199
server_id : str ,
1185
1200
server : ServerUpdate ,
1201
+ request : Request ,
1186
1202
db : Session = Depends (get_db ),
1187
1203
user = Depends (get_current_user_with_permissions ),
1188
1204
) -> ServerRead :
@@ -1192,6 +1208,7 @@ async def update_server(
1192
1208
Args:
1193
1209
server_id (str): The ID of the server to update.
1194
1210
server (ServerUpdate): The updated server data.
1211
+ request (Request): The incoming request object containing metadata.
1195
1212
db (Session): The database session used to interact with the data store.
1196
1213
user (str): The authenticated user making the request.
1197
1214
@@ -1203,7 +1220,18 @@ async def update_server(
1203
1220
"""
1204
1221
try :
1205
1222
logger .debug (f"User { user } is updating server with ID { server_id } " )
1206
- return await server_service .update_server (db , server_id , server )
1223
+ # Extract modification metadata
1224
+ mod_metadata = MetadataCapture .extract_modification_metadata (request , user , 0 ) # Version will be incremented in service
1225
+
1226
+ return await server_service .update_server (
1227
+ db ,
1228
+ server_id ,
1229
+ server ,
1230
+ modified_by = mod_metadata ["modified_by" ],
1231
+ modified_from_ip = mod_metadata ["modified_from_ip" ],
1232
+ modified_via = mod_metadata ["modified_via" ],
1233
+ modified_user_agent = mod_metadata ["modified_user_agent" ],
1234
+ )
1207
1235
except ServerNotFoundError as e :
1208
1236
raise HTTPException (status_code = 404 , detail = str (e ))
1209
1237
except ServerNameConflictError as e :
@@ -2281,6 +2309,7 @@ async def read_resource(uri: str, request: Request, db: Session = Depends(get_db
2281
2309
async def update_resource (
2282
2310
uri : str ,
2283
2311
resource : ResourceUpdate ,
2312
+ request : Request ,
2284
2313
db : Session = Depends (get_db ),
2285
2314
user = Depends (get_current_user_with_permissions ),
2286
2315
) -> ResourceRead :
@@ -2290,6 +2319,7 @@ async def update_resource(
2290
2319
Args:
2291
2320
uri (str): URI of the resource.
2292
2321
resource (ResourceUpdate): New resource data.
2322
+ request (Request): The FastAPI request object for metadata extraction.
2293
2323
db (Session): Database session.
2294
2324
user (str): Authenticated user.
2295
2325
@@ -2301,7 +2331,18 @@ async def update_resource(
2301
2331
"""
2302
2332
try :
2303
2333
logger .debug (f"User { user } is updating resource with URI { uri } " )
2304
- result = await resource_service .update_resource (db , uri , resource )
2334
+ # Extract modification metadata
2335
+ mod_metadata = MetadataCapture .extract_modification_metadata (request , user , 0 ) # Version will be incremented in service
2336
+
2337
+ result = await resource_service .update_resource (
2338
+ db ,
2339
+ uri ,
2340
+ resource ,
2341
+ modified_by = mod_metadata ["modified_by" ],
2342
+ modified_from_ip = mod_metadata ["modified_from_ip" ],
2343
+ modified_via = mod_metadata ["modified_via" ],
2344
+ modified_user_agent = mod_metadata ["modified_user_agent" ],
2345
+ )
2305
2346
except ResourceNotFoundError as e :
2306
2347
raise HTTPException (status_code = 404 , detail = str (e ))
2307
2348
except ValidationError as e :
@@ -2654,6 +2695,7 @@ async def get_prompt_no_args(
2654
2695
async def update_prompt (
2655
2696
name : str ,
2656
2697
prompt : PromptUpdate ,
2698
+ request : Request ,
2657
2699
db : Session = Depends (get_db ),
2658
2700
user = Depends (get_current_user_with_permissions ),
2659
2701
) -> PromptRead :
@@ -2663,6 +2705,7 @@ async def update_prompt(
2663
2705
Args:
2664
2706
name (str): Identifier of the prompt to update.
2665
2707
prompt (PromptUpdate): New prompt content and metadata.
2708
+ request (Request): The FastAPI request object for metadata extraction.
2666
2709
db (Session): Active SQLAlchemy session.
2667
2710
user (str): Authenticated username.
2668
2711
@@ -2676,7 +2719,18 @@ async def update_prompt(
2676
2719
logger .info (f"User: { user } requested to update prompt: { name } with data={ prompt } " )
2677
2720
logger .debug (f"User: { user } requested to update prompt: { name } with data={ prompt } " )
2678
2721
try :
2679
- return await prompt_service .update_prompt (db , name , prompt )
2722
+ # Extract modification metadata
2723
+ mod_metadata = MetadataCapture .extract_modification_metadata (request , user , 0 ) # Version will be incremented in service
2724
+
2725
+ return await prompt_service .update_prompt (
2726
+ db ,
2727
+ name ,
2728
+ prompt ,
2729
+ modified_by = mod_metadata ["modified_by" ],
2730
+ modified_from_ip = mod_metadata ["modified_from_ip" ],
2731
+ modified_via = mod_metadata ["modified_via" ],
2732
+ modified_user_agent = mod_metadata ["modified_user_agent" ],
2733
+ )
2680
2734
except Exception as e :
2681
2735
if isinstance (e , PromptNotFoundError ):
2682
2736
raise HTTPException (status_code = status .HTTP_404_NOT_FOUND , detail = str (e ))
@@ -2890,6 +2944,7 @@ async def get_gateway(gateway_id: str, db: Session = Depends(get_db), user=Depen
2890
2944
async def update_gateway (
2891
2945
gateway_id : str ,
2892
2946
gateway : GatewayUpdate ,
2947
+ request : Request ,
2893
2948
db : Session = Depends (get_db ),
2894
2949
user = Depends (get_current_user_with_permissions ),
2895
2950
) -> GatewayRead :
@@ -2899,6 +2954,7 @@ async def update_gateway(
2899
2954
Args:
2900
2955
gateway_id: Gateway ID.
2901
2956
gateway: Gateway update data.
2957
+ request (Request): The FastAPI request object for metadata extraction.
2902
2958
db: Database session.
2903
2959
user: Authenticated user.
2904
2960
@@ -2907,7 +2963,18 @@ async def update_gateway(
2907
2963
"""
2908
2964
logger .debug (f"User '{ user } ' requested update on gateway { gateway_id } with data={ gateway } " )
2909
2965
try :
2910
- return await gateway_service .update_gateway (db , gateway_id , gateway )
2966
+ # Extract modification metadata
2967
+ mod_metadata = MetadataCapture .extract_modification_metadata (request , user , 0 ) # Version will be incremented in service
2968
+
2969
+ return await gateway_service .update_gateway (
2970
+ db ,
2971
+ gateway_id ,
2972
+ gateway ,
2973
+ modified_by = mod_metadata ["modified_by" ],
2974
+ modified_from_ip = mod_metadata ["modified_from_ip" ],
2975
+ modified_via = mod_metadata ["modified_via" ],
2976
+ modified_user_agent = mod_metadata ["modified_user_agent" ],
2977
+ )
2911
2978
except Exception as ex :
2912
2979
if isinstance (ex , GatewayNotFoundError ):
2913
2980
return JSONResponse (content = {"message" : "Gateway not found" }, status_code = status .HTTP_404_NOT_FOUND )
0 commit comments