package handlers import ( "net/http" "warpbox.dev/backend/libs/services" "warpbox.dev/backend/libs/web" ) type homeData struct { MaxUploadSize string LimitSummary string Collections []collectionView IsAdmin bool AnonymousOpen bool } func (a *App) Home(w http.ResponseWriter, r *http.Request) { currentUser := a.currentPublicUser(r) var collections []collectionView var isAdmin bool var user services.User var loggedIn bool if current, ok := a.currentUser(r); ok { user = current loggedIn = true isAdmin = user.Role == services.UserRoleAdmin userCollections, err := a.authService.ListCollections(user.ID) if err == nil { collections = make([]collectionView, 0, len(userCollections)) for _, collection := range userCollections { collections = append(collections, collectionView{ID: collection.ID, Name: collection.Name}) } } } settings, err := a.settingsService.UploadPolicy() if err != nil { http.Error(w, "unable to load upload policy", http.StatusInternalServerError) return } maxUploadSize, limitSummary := a.homeUploadPolicyLabels(settings, user, loggedIn, isAdmin) a.renderPage(w, r, http.StatusOK, "home.html", web.PageData{ Title: "Upload your files", Description: "Upload and share files through a self-hosted Warpbox instance.", CurrentUser: currentUser, Data: homeData{ MaxUploadSize: maxUploadSize, LimitSummary: limitSummary, Collections: collections, IsAdmin: isAdmin, AnonymousOpen: settings.AnonymousUploadsEnabled, }, }) } func (a *App) homeUploadPolicyLabels(settings services.UploadPolicySettings, user services.User, loggedIn, isAdmin bool) (string, string) { if isAdmin { return "No file size limit", "Admin uploads bypass storage and daily caps." } if !loggedIn { if !settings.AnonymousUploadsEnabled { return "Anonymous uploads disabled", "Sign in to upload files." } return services.FormatMegabytesLabel(settings.AnonymousMaxUploadMB), "Daily anonymous cap: " + services.FormatMegabytesLabel(settings.AnonymousDailyUploadMB) + " per IP." } quotaMB := settings.DefaultUserStorageMB if user.StorageQuotaMB != nil { quotaMB = *user.StorageQuotaMB } return a.uploadService.MaxUploadSizeLabel(), "Daily cap: " + services.FormatMegabytesLabel(settings.UserDailyUploadMB) + " ยท Storage quota: " + services.FormatMegabytesLabel(quotaMB) + "." }