package handler import ( "net/http" "os" "path/filepath" "podstalk/store" ) type SettingsHandler struct { Store *store.Store UploadDir string } func (h *SettingsHandler) ServeSettings(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "method not allowed", http.StatusMethodNotAllowed) return } userID := UserIDFromContext(r) user, err := h.Store.GetUser(userID) if err != nil { http.Redirect(w, r, "/", http.StatusSeeOther) return } if err := r.ParseMultipartForm(10 << 20); err != nil { http.Redirect(w, r, "/?error=file+too+large", http.StatusSeeOther) return } title := r.FormValue("podcast_title") if title == "" { title = user.PodcastTitle } author := r.FormValue("podcast_author") if author == "" { author = user.PodcastAuthor } image := user.PodcastImage // Handle podcast image upload file, header, err := r.FormFile("podcast_image") if err == nil { defer file.Close() // Remove old image if image != "" { os.Remove(filepath.Join(h.UploadDir, image)) } catDir := filepath.Join(h.UploadDir, "images") os.MkdirAll(catDir, 0755) ext := filepath.Ext(header.Filename) if ext == "" { ext = ".png" } dst, err := os.Create(filepath.Join(catDir, "podcast"+ext)) if err == nil { defer dst.Close() dst.ReadFrom(file) image = "images/podcast" + ext } } h.Store.UpdateUserPodcast(userID, title, image, author) http.Redirect(w, r, "/", http.StatusSeeOther) }