sharktide commited on
Commit
4ac7918
·
verified ·
1 Parent(s): 6f78a73

Finish security updates

Browse files
Files changed (1) hide show
  1. app.py +18 -22
app.py CHANGED
@@ -46,11 +46,9 @@ class RecipeUpdate(BaseModel):
46
  ingredients: Optional[List[str]]
47
  description: Optional[str]
48
  instructions: Optional[str]
49
- user_id: Optional[str]
50
 
51
  class DeleteRecipeRequest(BaseModel):
52
  id: str
53
- user_id: str
54
 
55
  security = HTTPBearer()
56
 
@@ -65,7 +63,7 @@ def verify_token(credentials: HTTPAuthorizationCredentials = Depends(security)):
65
  )
66
  return decoded
67
  except Exception as e:
68
- raise HTTPException(status_code=401, detail="Invalid or expired token")
69
 
70
  @app.put("/supabase/add/recipe")
71
  def add_recipe_to_supabase(recipe: Recipe, token_data=Depends(verify_token)):
@@ -126,14 +124,15 @@ async def get_recipe_by_id(id: str):
126
  raise HTTPException(status_code=500, detail=str(e))
127
 
128
  @app.delete("/supabase/delrecipe")
129
- async def delete_recipe(data: DeleteRecipeRequest):
130
  recipe = supabase.table("recipes").select("*").eq("id", data.id).single().execute()
 
131
 
132
  if not recipe.data:
133
  raise HTTPException(status_code=404, detail="Recipe not found")
134
 
135
- if recipe.data["user_id"] != data.user_id:
136
- raise HTTPException(status_code=403, detail="Unauthorized: Not your recipe")
137
 
138
  supabase.table("recipes").delete().eq("id", data.id).execute()
139
 
@@ -144,26 +143,23 @@ def status():
144
  return {"status": "ok"}
145
 
146
  @app.patch("/supabase/edit/recipe")
147
- async def edit_recipe(request: Request, id: str, update: RecipeUpdate):
148
- try:
149
- update_dict = update.dict(exclude_none=True)
150
- if not update_dict:
151
- raise HTTPException(status_code=400, detail="No fields provided to update.")
152
 
153
- ownership_check = supabase.table("recipes").select("user_id").eq("id", id).single().execute()
154
- if ownership_check.data["user_id"] != update.user_id:
155
- raise HTTPException(status_code=403, detail="You are not authorized to edit this recipe.")
156
 
157
- response = supabase.table("recipes").update(update_dict).eq("id", id).execute()
158
 
159
- return JSONResponse(content={
160
- "message": "Recipe updated successfully.",
161
- "data": response.data
162
- })
163
 
164
- except Exception as e:
165
- print("EXCEPTION:", e)
166
- raise HTTPException(status_code=500, detail=str(e))
167
  @app.get("/supabase/recipes/paged")
168
  def get_recipes_paged(
169
  limit: int = Query(12, ge=1),
 
46
  ingredients: Optional[List[str]]
47
  description: Optional[str]
48
  instructions: Optional[str]
 
49
 
50
  class DeleteRecipeRequest(BaseModel):
51
  id: str
 
52
 
53
  security = HTTPBearer()
54
 
 
63
  )
64
  return decoded
65
  except Exception as e:
66
+ raise HTTPException(status_code=401, detail="Invalid or expired authorization")
67
 
68
  @app.put("/supabase/add/recipe")
69
  def add_recipe_to_supabase(recipe: Recipe, token_data=Depends(verify_token)):
 
124
  raise HTTPException(status_code=500, detail=str(e))
125
 
126
  @app.delete("/supabase/delrecipe")
127
+ async def delete_recipe(data: DeleteRecipeRequest, token_data=Depends(verify_token)):
128
  recipe = supabase.table("recipes").select("*").eq("id", data.id).single().execute()
129
+ user_id = token_data['sub']
130
 
131
  if not recipe.data:
132
  raise HTTPException(status_code=404, detail="Recipe not found")
133
 
134
+ if recipe.data["user_id"] != user_id:
135
+ raise HTTPException(status_code=403, detail="Deletion Aborted: Authorization required not found to complete this interaction")
136
 
137
  supabase.table("recipes").delete().eq("id", data.id).execute()
138
 
 
143
  return {"status": "ok"}
144
 
145
  @app.patch("/supabase/edit/recipe")
146
+ async def edit_recipe(request: Request, id: str, update: RecipeUpdate, token_data=Depends(verify_token)):
147
+ user_id = token_data['sub']
148
+ update_dict = update.dict(exclude_none=True)
149
+ if not update_dict:
150
+ raise HTTPException(status_code=400, detail="No fields provided to update.")
151
 
152
+ ownership_check = supabase.table("recipes").select("user_id").eq("id", id).single().execute()
153
+ if ownership_check.data["user_id"] != user_id:
154
+ raise HTTPException(status_code=403, detail="Edit Aborted: Authorization required not found to complete this interaction")
155
 
156
+ response = supabase.table("recipes").update(update_dict).eq("id", id).execute()
157
 
158
+ return JSONResponse(content={
159
+ "message": "Recipe updated successfully.",
160
+ "data": response.data
161
+ })
162
 
 
 
 
163
  @app.get("/supabase/recipes/paged")
164
  def get_recipes_paged(
165
  limit: int = Query(12, ge=1),