akborana4 commited on
Commit
1fc48e6
·
verified ·
1 Parent(s): 142ee17

Create backend/routes_files.py

Browse files
Files changed (1) hide show
  1. backend/routes_files.py +57 -0
backend/routes_files.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from fastapi import APIRouter
3
+ from pydantic import BaseModel
4
+ from backend.database import get_user_dir
5
+
6
+ router = APIRouter()
7
+
8
+ class FileReq(BaseModel):
9
+ token: str
10
+ filename: str = ""
11
+ content: str = ""
12
+ new_name: str = ""
13
+
14
+ @router.post("/api/files")
15
+ async def list_files(data: dict):
16
+ user_dir = get_user_dir(data.get("token"))
17
+ if not user_dir: return {"error": "Unauthorized"}
18
+ files = []
19
+ for root, _, filenames in os.walk(user_dir):
20
+ for f in filenames:
21
+ rel_dir = os.path.relpath(root, user_dir)
22
+ files.append(f if rel_dir == "." else f"{rel_dir}/{f}")
23
+ return {"files": files}
24
+
25
+ @router.post("/api/file/read")
26
+ async def read_file(data: FileReq):
27
+ user_dir = get_user_dir(data.token)
28
+ if not user_dir: return {"error": "Unauthorized"}
29
+ filepath = os.path.abspath(os.path.join(user_dir, data.filename))
30
+ if not filepath.startswith(user_dir): return {"error": "Access denied"}
31
+ try:
32
+ with open(filepath, "r") as f: return {"content": f.read()}
33
+ except Exception as e: return {"error": str(e)}
34
+
35
+ @router.post("/api/file/save")
36
+ async def save_file(data: FileReq):
37
+ user_dir = get_user_dir(data.token)
38
+ if not user_dir: return {"error": "Unauthorized"}
39
+ filepath = os.path.abspath(os.path.join(user_dir, data.filename))
40
+ if not filepath.startswith(user_dir): return {"error": "Access denied"}
41
+ os.makedirs(os.path.dirname(filepath), exist_ok=True)
42
+ try:
43
+ with open(filepath, "w") as f: f.write(data.content)
44
+ return {"success": True}
45
+ except Exception as e:
46
+ return {"error": str(e)}
47
+
48
+ @router.post("/api/file/rename")
49
+ async def rename_file(data: FileReq):
50
+ user_dir = get_user_dir(data.token)
51
+ if not user_dir: return {"error": "Unauthorized"}
52
+ old_path = os.path.abspath(os.path.join(user_dir, data.filename))
53
+ new_path = os.path.abspath(os.path.join(user_dir, data.new_name))
54
+ if not old_path.startswith(user_dir) or not new_path.startswith(user_dir): return {"error": "Access denied"}
55
+ os.rename(old_path, new_path)
56
+ return {"success": True}
57
+