2626# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2727# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2828
29- from fastapi import APIRouter , Query , Depends
29+ from fastapi import APIRouter , Depends
3030from starlette .responses import JSONResponse
3131
32- from chat_server .utils .enums import RequestModelType , UserRoles
3332from chat_server .utils .http_exceptions import (
3433 ItemNotFoundException ,
3534 DuplicatedItemException ,
4342 TogglePersonaStatusModel ,
4443 ListPersonasQueryModel ,
4544)
45+ from chat_server .utils .api_dependencies .models .personas import PersonaModel
4646from chat_server .utils .api_dependencies .extractors import (
4747 CurrentUserData ,
48- PersonaData ,
4948)
50- from chat_server .utils .api_dependencies .validators import permitted_access
51- from chat_server .utils .api_dependencies .direct_query import list_personas_query
49+ from chat_server .utils .api_dependencies .direct_query import (
50+ list_personas_query ,
51+ get_persona_query ,
52+ add_persona_body ,
53+ set_persona_body ,
54+ delete_persona_query ,
55+ toggle_persona_body ,
56+ )
5257from klatchat_utils .database_utils .mongo_utils import MongoFilter , MongoLogicalOperators
5358from klatchat_utils .database_utils .mongo_utils .queries .wrapper import MongoDocumentsAPI
5459
@@ -92,7 +97,10 @@ async def list_personas(
9297
9398
9499@router .get ("/get/{persona_id}" )
95- async def get_persona (request_model : PersonaData = permitted_access (PersonaData )):
100+ async def get_persona (
101+ current_user : CurrentUserData ,
102+ request_model : PersonaModel = Depends (get_persona_query ),
103+ ):
96104 """Gets persona details for a given persona_id"""
97105 item = MongoDocumentsAPI .PERSONAS .get_item (item_id = request_model .persona_id )
98106 if not item :
@@ -102,9 +110,7 @@ async def get_persona(request_model: PersonaData = permitted_access(PersonaData)
102110
103111@router .put ("/add" )
104112async def add_persona (
105- request_model : AddPersonaModel = permitted_access (
106- AddPersonaModel , request_model_type = RequestModelType .DATA
107- ),
113+ request_model : AddPersonaModel = Depends (add_persona_body ),
108114):
109115 """Adds new persona"""
110116 existing_model = MongoDocumentsAPI .PERSONAS .get_item (
@@ -118,9 +124,7 @@ async def add_persona(
118124
119125@router .post ("/set" )
120126async def set_persona (
121- request_model : SetPersonaModel = permitted_access (
122- SetPersonaModel , request_model_type = RequestModelType .DATA
123- ),
127+ request_model : SetPersonaModel = Depends (set_persona_body ),
124128):
125129 """Sets persona's data"""
126130 existing_model = MongoDocumentsAPI .PERSONAS .get_item (
@@ -137,7 +141,7 @@ async def set_persona(
137141
138142@router .delete ("/delete" )
139143async def delete_persona (
140- request_model : DeletePersonaModel = permitted_access ( DeletePersonaModel ),
144+ request_model : DeletePersonaModel = Depends ( delete_persona_query ),
141145):
142146 """Deletes persona"""
143147 MongoDocumentsAPI .PERSONAS .delete_item (item_id = request_model .persona_id )
@@ -146,12 +150,15 @@ async def delete_persona(
146150
147151@router .post ("/toggle" )
148152async def toggle_persona_state (
149- request_model : TogglePersonaStatusModel = permitted_access (
150- TogglePersonaStatusModel ,
151- min_required_role = UserRoles .AUTHORIZED_USER ,
152- request_model_type = RequestModelType .DATA ,
153- ),
153+ current_user : CurrentUserData ,
154+ request_model : TogglePersonaStatusModel = Depends (toggle_persona_body ),
154155):
156+ # Check if user has sufficient permissions (previously handled by permitted_access)
157+ if not current_user or current_user .is_tmp :
158+ from chat_server .utils .http_exceptions import UserUnauthorizedException
159+
160+ raise UserUnauthorizedException
161+
155162 updated_data = MongoDocumentsAPI .PERSONAS .update_item (
156163 filters = MongoFilter (key = "_id" , value = request_model .persona_id ),
157164 data = {"enabled" : request_model .enabled },
0 commit comments