Phase 2-6: Git sync, sharing, 2FA, AI integration

- Git: init, commit, log, diff, restore, remotes, push/pull
- Auto-commit on every file save
- Sharing: share/unshare files with other users (ro/rw)
- Shared documents view in sidebar
- 2FA: TOTP setup/verify/disable, enforced at login
- AI: verify spec endpoint (LiteLLM), generate (summarize/prompt/expand)
- Light/dark theme with CSS variables
- File delete (recursive for folders)
- Admin panel + preferences panel
- File creation timestamp display
This commit is contained in:
2026-05-22 19:53:24 +02:00
parent 0c1047d390
commit 4df87cbf9a
8 changed files with 830 additions and 3 deletions
+24 -1
View File
@@ -20,6 +20,9 @@ func NewRouter(db *sql.DB, dataDir, secret string) http.Handler {
// Auth
mux.HandleFunc("POST /api/auth/login", s.handleLogin)
mux.HandleFunc("POST /api/auth/logout", s.handleLogout)
mux.HandleFunc("POST /api/auth/totp/setup", s.requireAuth(s.handleTOTPSetup))
mux.HandleFunc("POST /api/auth/totp/verify", s.requireAuth(s.handleTOTPVerify))
mux.HandleFunc("POST /api/auth/totp/disable", s.requireAuth(s.handleTOTPDisable))
// Users (admin)
mux.HandleFunc("POST /api/users/create", s.requireAdmin(s.handleCreateUser))
@@ -33,7 +36,27 @@ func NewRouter(db *sql.DB, dataDir, secret string) http.Handler {
mux.HandleFunc("POST /api/files/create-folder", s.requireAuth(s.handleCreateFolder))
mux.HandleFunc("POST /api/files/delete", s.requireAuth(s.handleDeleteFile))
mux.HandleFunc("POST /api/files/search", s.requireAuth(s.handleSearchFiles))
mux.HandleFunc("POST /api/files/shared", s.requireAuth(s.handleSharedFiles))
mux.HandleFunc("POST /api/files/shared", s.requireAuth(s.handleListSharedFiles))
// Sharing
mux.HandleFunc("POST /api/share", s.requireAuth(s.handleShareFile))
mux.HandleFunc("POST /api/unshare", s.requireAuth(s.handleUnshareFile))
// Git
mux.HandleFunc("POST /api/git/init", s.requireAuth(s.handleGitInit))
mux.HandleFunc("POST /api/git/commit", s.requireAuth(s.handleGitCommit))
mux.HandleFunc("POST /api/git/log", s.requireAuth(s.handleGitLog))
mux.HandleFunc("POST /api/git/diff", s.requireAuth(s.handleGitDiff))
mux.HandleFunc("POST /api/git/restore", s.requireAuth(s.handleGitRestore))
mux.HandleFunc("POST /api/git/status", s.requireAuth(s.handleGitStatus))
mux.HandleFunc("POST /api/git/remote/add", s.requireAuth(s.handleGitRemoteAdd))
mux.HandleFunc("POST /api/git/remote/list", s.requireAuth(s.handleGitRemoteList))
mux.HandleFunc("POST /api/git/push", s.requireAuth(s.handleGitPush))
mux.HandleFunc("POST /api/git/pull", s.requireAuth(s.handleGitPull))
// AI
mux.HandleFunc("POST /api/ai/verify", s.requireAuth(s.handleAIVerify))
mux.HandleFunc("POST /api/ai/generate", s.requireAuth(s.handleAIGenerate))
// Build jobs
mux.HandleFunc("POST /api/build/submit", s.requireAuth(s.handleBuildSubmit))