1- from fastapi import APIRouter , Depends , HTTPException , Request
1+ from fastapi import APIRouter , Depends , HTTPException , Request , status
22from pydantic import BaseModel
33import logging
44import asyncio
1010from open_webui .internal .db import get_session
1111from sqlalchemy .orm import Session
1212
13+ from open_webui .utils .access_control import has_permission
14+ from open_webui .constants import ERROR_MESSAGES
15+
1316log = logging .getLogger (__name__ )
1417
1518router = APIRouter ()
1619
1720
21+
22+
1823@router .get ("/ef" )
1924async def get_embeddings (request : Request ):
2025 return {"result" : await request .app .state .EMBEDDING_FUNCTION ("hello world" )}
@@ -26,7 +31,21 @@ async def get_embeddings(request: Request):
2631
2732
2833@router .get ("/" , response_model = list [MemoryModel ])
29- async def get_memories (user = Depends (get_verified_user ), db : Session = Depends (get_session )):
34+ async def get_memories (
35+ request : Request , user = Depends (get_verified_user ), db : Session = Depends (get_session )
36+ ):
37+ if not request .app .state .config .ENABLE_MEMORIES :
38+ raise HTTPException (
39+ status_code = status .HTTP_404_NOT_FOUND ,
40+ detail = ERROR_MESSAGES .NOT_FOUND ,
41+ )
42+
43+ if not has_permission (user .id , "features.memories" , request .app .state .config .USER_PERMISSIONS ):
44+ raise HTTPException (
45+ status_code = status .HTTP_403_FORBIDDEN ,
46+ detail = ERROR_MESSAGES .ACCESS_PROHIBITED ,
47+ )
48+
3049 return Memories .get_memories_by_user_id (user .id , db = db )
3150
3251
@@ -50,6 +69,18 @@ async def add_memory(
5069 user = Depends (get_verified_user ),
5170 db : Session = Depends (get_session ),
5271):
72+ if not request .app .state .config .ENABLE_MEMORIES :
73+ raise HTTPException (
74+ status_code = status .HTTP_404_NOT_FOUND ,
75+ detail = ERROR_MESSAGES .NOT_FOUND ,
76+ )
77+
78+ if not has_permission (user .id , "features.memories" , request .app .state .config .USER_PERMISSIONS ):
79+ raise HTTPException (
80+ status_code = status .HTTP_403_FORBIDDEN ,
81+ detail = ERROR_MESSAGES .ACCESS_PROHIBITED ,
82+ )
83+
5384 memory = Memories .insert_new_memory (user .id , form_data .content , db = db )
5485
5586 vector = await request .app .state .EMBEDDING_FUNCTION (memory .content , user = user )
@@ -83,6 +114,18 @@ class QueryMemoryForm(BaseModel):
83114async def query_memory (
84115 request : Request , form_data : QueryMemoryForm , user = Depends (get_verified_user ), db : Session = Depends (get_session )
85116):
117+ if not request .app .state .config .ENABLE_MEMORIES :
118+ raise HTTPException (
119+ status_code = status .HTTP_404_NOT_FOUND ,
120+ detail = ERROR_MESSAGES .NOT_FOUND ,
121+ )
122+
123+ if not has_permission (user .id , "features.memories" , request .app .state .config .USER_PERMISSIONS ):
124+ raise HTTPException (
125+ status_code = status .HTTP_403_FORBIDDEN ,
126+ detail = ERROR_MESSAGES .ACCESS_PROHIBITED ,
127+ )
128+
86129 memories = Memories .get_memories_by_user_id (user .id , db = db )
87130 if not memories :
88131 raise HTTPException (status_code = 404 , detail = "No memories found for user" )
@@ -105,6 +148,18 @@ async def query_memory(
105148async def reset_memory_from_vector_db (
106149 request : Request , user = Depends (get_verified_user ), db : Session = Depends (get_session )
107150):
151+ if not request .app .state .config .ENABLE_MEMORIES :
152+ raise HTTPException (
153+ status_code = status .HTTP_404_NOT_FOUND ,
154+ detail = ERROR_MESSAGES .NOT_FOUND ,
155+ )
156+
157+ if not has_permission (user .id , "features.memories" , request .app .state .config .USER_PERMISSIONS ):
158+ raise HTTPException (
159+ status_code = status .HTTP_403_FORBIDDEN ,
160+ detail = ERROR_MESSAGES .ACCESS_PROHIBITED ,
161+ )
162+
108163 VECTOR_DB_CLIENT .delete_collection (f"user-memory-{ user .id } " )
109164
110165 memories = Memories .get_memories_by_user_id (user .id , db = db )
@@ -142,7 +197,21 @@ async def reset_memory_from_vector_db(
142197
143198
144199@router .delete ("/delete/user" , response_model = bool )
145- async def delete_memory_by_user_id (user = Depends (get_verified_user ), db : Session = Depends (get_session )):
200+ async def delete_memory_by_user_id (
201+ request : Request , user = Depends (get_verified_user ), db : Session = Depends (get_session )
202+ ):
203+ if not request .app .state .config .ENABLE_MEMORIES :
204+ raise HTTPException (
205+ status_code = status .HTTP_404_NOT_FOUND ,
206+ detail = ERROR_MESSAGES .NOT_FOUND ,
207+ )
208+
209+ if not has_permission (user .id , "features.memories" , request .app .state .config .USER_PERMISSIONS ):
210+ raise HTTPException (
211+ status_code = status .HTTP_403_FORBIDDEN ,
212+ detail = ERROR_MESSAGES .ACCESS_PROHIBITED ,
213+ )
214+
146215 result = Memories .delete_memories_by_user_id (user .id , db = db )
147216
148217 if result :
@@ -168,6 +237,18 @@ async def update_memory_by_id(
168237 user = Depends (get_verified_user ),
169238 db : Session = Depends (get_session ),
170239):
240+ if not request .app .state .config .ENABLE_MEMORIES :
241+ raise HTTPException (
242+ status_code = status .HTTP_404_NOT_FOUND ,
243+ detail = ERROR_MESSAGES .NOT_FOUND ,
244+ )
245+
246+ if not has_permission (user .id , "features.memories" , request .app .state .config .USER_PERMISSIONS ):
247+ raise HTTPException (
248+ status_code = status .HTTP_403_FORBIDDEN ,
249+ detail = ERROR_MESSAGES .ACCESS_PROHIBITED ,
250+ )
251+
171252 memory = Memories .update_memory_by_id_and_user_id (
172253 memory_id , user .id , form_data .content , db = db
173254 )
@@ -201,7 +282,21 @@ async def update_memory_by_id(
201282
202283
203284@router .delete ("/{memory_id}" , response_model = bool )
204- async def delete_memory_by_id (memory_id : str , user = Depends (get_verified_user ), db : Session = Depends (get_session )):
285+ async def delete_memory_by_id (
286+ memory_id : str , request : Request , user = Depends (get_verified_user ), db : Session = Depends (get_session )
287+ ):
288+ if not request .app .state .config .ENABLE_MEMORIES :
289+ raise HTTPException (
290+ status_code = status .HTTP_404_NOT_FOUND ,
291+ detail = ERROR_MESSAGES .NOT_FOUND ,
292+ )
293+
294+ if not has_permission (user .id , "features.memories" , request .app .state .config .USER_PERMISSIONS ):
295+ raise HTTPException (
296+ status_code = status .HTTP_403_FORBIDDEN ,
297+ detail = ERROR_MESSAGES .ACCESS_PROHIBITED ,
298+ )
299+
205300 result = Memories .delete_memory_by_id_and_user_id (memory_id , user .id , db = db )
206301
207302 if result :
0 commit comments