// backend\routes.go package main import ( "net/http" ) func (s *Server) Routes() http.Handler { mux := http.NewServeMux() mux.HandleFunc("GET /health", s.handleHealth) mux.HandleFunc("POST /auth/register", s.handleRegister) mux.HandleFunc("POST /auth/login", s.handleLogin) mux.HandleFunc("POST /auth/logout", s.handleLogout) mux.HandleFunc("GET /auth/me", s.requireAuth(s.handleMe)) mux.HandleFunc("GET /settings/sessions", s.requireAuth(s.handleListUserSessions)) mux.HandleFunc("DELETE /settings/sessions/{id}", s.requireAuth(s.handleRevokeUserSession)) mux.HandleFunc("PUT /settings/account", s.requireAuth(s.handleUpdateSettingsAccount)) mux.HandleFunc("PUT /settings/password", s.requireAuth(s.handleUpdateSettingsPassword)) mux.HandleFunc("POST /settings/logout-other-sessions", s.requireAuth(s.handleLogoutOtherSessions)) mux.HandleFunc("DELETE /settings/account", s.requireAuth(s.handleDeleteOwnAccount)) mux.HandleFunc("GET /settings/notifications/preferences", s.requireAuth(s.handleGetNotificationPreferences)) mux.HandleFunc("PUT /settings/notifications/preferences", s.requireAuth(s.handleUpdateNotificationPreferences)) mux.HandleFunc("POST /feedback", s.requireAuth(s.handleCreateFeedback)) mux.HandleFunc("GET /devices", s.requireAuth(s.handleListDevices)) mux.HandleFunc("POST /devices", s.requireAuth(s.handleCreateDevice)) mux.HandleFunc("PUT /devices/{id}", s.requireAuth(s.handleUpdateDevice)) mux.HandleFunc("GET /devices/{id}/history", s.requireAuth(s.handleListDeviceHistory)) mux.HandleFunc("POST /devices/{id}/history", s.requireAuth(s.handleCreateDeviceJournalEntry)) mux.HandleFunc("PUT /devices/{id}/history/{historyId}", s.requireAuth(s.handleUpdateDeviceJournalEntry)) mux.HandleFunc("PATCH /devices/{id}/milestone", s.requireAuth(s.handleUpdateMilestoneHardware)) mux.HandleFunc( "PATCH /devices/{id}/milestone-child/{childId}", s.requireAuth(s.handleUpdateMilestoneChildDevice), ) mux.HandleFunc( "GET /devices/{id}/milestone-cameras/{childId}", s.requireAuth(s.handleGetMilestoneCameraDetails), ) mux.HandleFunc( "PATCH /devices/{id}/milestone-cameras/{childId}", s.requireAuth(s.handleUpdateMilestoneCameraDetails), ) mux.HandleFunc("GET /devices/firmware-check", s.requireAuth(s.handleGetCameraFirmwareCheckState)) mux.HandleFunc("POST /devices/firmware-check", s.requireAuth(s.handleCheckCameraFirmware)) mux.HandleFunc("GET /device-lookups", s.handleDeviceLookups) mux.HandleFunc("POST /device-manufacturers", s.handleCreateDeviceManufacturer) mux.HandleFunc("POST /device-locations", s.handleCreateDeviceLocation) mux.HandleFunc("GET /operations", s.requireAuth(s.requireRight("operations:read", s.handleListOperations))) mux.HandleFunc("POST /operations", s.requireAuth(s.requireRight("operations:write", s.handleCreateOperation))) mux.HandleFunc("PUT /operations/{id}", s.requireAuth(s.requireRight("operations:write", s.handleUpdateOperation))) mux.HandleFunc("GET /operations/{id}/history", s.requireAuth(s.handleListOperationHistory)) mux.HandleFunc("POST /operations/{id}/history", s.requireAuth(s.handleCreateOperationJournalEntry)) mux.HandleFunc("PUT /operations/{id}/history/{historyId}", s.requireAuth(s.handleUpdateOperationJournalEntry)) mux.HandleFunc("POST /operations/{id}/journal/read", s.requireAuth(s.handleMarkOperationJournalRead)) mux.HandleFunc("GET /operations/journal-unread", s.requireAuth(s.handleListUnreadOperationJournals)) mux.HandleFunc("GET /operations/assignees", s.requireAuth(s.requireRight("operations:read", s.handleListOperationAssignees))) mux.HandleFunc("GET /search", s.requireAuth(s.handleGlobalSearch)) mux.HandleFunc("GET /address-search", s.requireAuth(s.handleAddressSearch)) mux.HandleFunc("GET /address-reverse", s.requireAuth(s.handleAddressReverse)) mux.HandleFunc("GET /notifications", s.requireAuth(s.handleListNotifications)) mux.HandleFunc("POST /notifications/{id}/read", s.requireAuth(s.handleMarkNotificationRead)) mux.HandleFunc("POST /notifications/read-all", s.requireAuth(s.handleMarkAllNotificationsRead)) mux.HandleFunc("GET /events", s.requireAuth(s.handleNotificationEvents)) mux.HandleFunc("GET /dashboard/operation-changes", s.requireAuth(s.requireRight("operations:read", s.handleDashboardOperationChanges))) mux.HandleFunc("GET /dashboard/settings", s.requireAuth(s.handleGetDashboardSettings)) mux.HandleFunc("PUT /dashboard/settings", s.requireAuth(s.handleUpdateDashboardSettings)) mux.HandleFunc("GET /dashboard/widgets", s.requireAuth(s.handleListDashboardWidgets)) mux.HandleFunc("POST /dashboard/widgets", s.requireAuth(s.handleCreateDashboardWidget)) mux.HandleFunc("PUT /dashboard/widgets/{id}", s.requireAuth(s.handleUpdateDashboardWidget)) mux.HandleFunc("DELETE /dashboard/widgets/{id}", s.requireAuth(s.handleDeleteDashboardWidget)) /* admin settings */ mux.HandleFunc("GET /admin/users", s.requireAuth(s.requireRight("users:read", s.handleAdminListUsers))) mux.HandleFunc("POST /admin/users", s.requireAuth(s.requireRight("users:write", s.handleAdminCreateUser))) mux.HandleFunc("PUT /admin/users/{id}", s.requireAuth(s.requireRight("users:write", s.handleAdminUpdateUser))) mux.HandleFunc("GET /admin/user-units", s.requireAuth(s.requireRight("users:read", s.handleListUserUnits))) mux.HandleFunc("POST /admin/user-units", s.requireAuth(s.requireRight("users:write", s.handleCreateUserUnit))) mux.HandleFunc("GET /admin/teams", s.requireAuth(s.requireRight("teams:read", s.handleAdminListTeams))) mux.HandleFunc("POST /admin/teams", s.requireAuth(s.requireRight("teams:write", s.handleAdminCreateTeam))) mux.HandleFunc("PUT /admin/teams/{id}", s.requireAuth(s.requireRight("teams:write", s.handleAdminUpdateTeam))) mux.HandleFunc("GET /admin/feedback", s.requireAuth(s.requireRight("administration:read", s.handleListFeedback))) mux.HandleFunc("DELETE /admin/feedback/{id}", s.requireAuth(s.requireRight("administration:write", s.handleDeleteFeedback))) /* milestone settings */ mux.HandleFunc("GET /admin/milestone", s.requireAuth(s.requireRight("administration:read", s.handleGetMilestoneSettings))) mux.HandleFunc("PUT /admin/milestone", s.requireAuth(s.requireRight("administration:write", s.handleUpdateMilestoneSettings))) mux.HandleFunc("POST /admin/milestone/token", s.requireAuth(s.requireRight("administration:write", s.handleFetchMilestoneToken))) mux.HandleFunc("POST /admin/milestone/token/stream", s.requireAuth(s.requireRight("administration:write", s.handleFetchMilestoneTokenStream))) mux.HandleFunc( "GET /admin/server-folders", s.requireAuth(s.requireRight("administration:read", s.handleProxyListServerFolders)), ) mux.HandleFunc( "POST /admin/server-folders", s.requireAuth(s.requireRight("administration:write", s.handleProxyCreateServerFolder)), ) mux.HandleFunc( "PATCH /admin/server-folders", s.requireAuth(s.requireRight("administration:write", s.handleProxyRenameServerFolder)), ) mux.HandleFunc( "DELETE /admin/server-folders", s.requireAuth(s.requireRight("administration:write", s.handleProxyDeleteServerFolder)), ) mux.HandleFunc( "PATCH /admin/milestone/archive-storages/{id}", s.requireAuth(s.requireRight("administration:write", s.handleUpdateMilestoneArchiveStorage)), ) mux.HandleFunc( "DELETE /admin/milestone/archive-storages/{id}", s.requireAuth(s.requireRight("administration:write", s.handleDeleteMilestoneArchiveStorage)), ) mux.HandleFunc( "GET /admin/milestone/storage-information/{id}", s.requireAuth(s.requireRight("administration:read", s.handleGetMilestoneStorageInformation)), ) mux.HandleFunc( "GET /admin/milestone/cameras", s.requireAuth(s.requireRight("administration:read", s.handleListMilestoneCameras)), ) mux.HandleFunc( "PATCH /admin/milestone/devices/{collection}/{id}", s.requireAuth(s.requireRight("administration:write", s.handlePatchMilestoneDevice)), ) mux.HandleFunc( "GET /admin/milestone/storages", s.requireAuth(s.requireRight("administration:read", s.handleListMilestoneStorages)), ) mux.HandleFunc( "POST /admin/milestone/storages", s.requireAuth(s.requireRight("administration:write", s.handleCreateMilestoneStorageWithArchive)), ) mux.HandleFunc( "PATCH /admin/milestone/storages/{id}", s.requireAuth(s.requireRight("administration:write", s.handleUpdateMilestoneStorage)), ) mux.HandleFunc( "DELETE /admin/milestone/storages/{id}", s.requireAuth(s.requireRight("administration:write", s.handleDeleteMilestoneStorage)), ) mux.HandleFunc( "POST /admin/milestone/storages/{id}/archive-storages", s.requireAuth(s.requireRight("administration:write", s.handleCreateMilestoneArchiveStorage)), ) mux.HandleFunc( "POST /admin/milestone/storages/{id}/archive-storages/auto", s.requireAuth(s.requireRight("administration:write", s.handleCreateMilestoneAutoArchiveStorage)), ) mux.HandleFunc( "GET /admin/milestone/storages/{id}/delete-stream", s.requireAuth(s.requireRight("administration:write", s.handleDeleteMilestoneStorageStream)), ) return s.cors(mux) }