Files
Amir Raminfar fc1e86fc14 feat: always persist user profile to disk (#4550)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:29:04 +00:00

58 lines
1.3 KiB
Go

package web
import (
"io"
"net/http"
"github.com/amir20/dozzle/internal/auth"
"github.com/amir20/dozzle/internal/profile"
"github.com/rs/zerolog/log"
)
func (h *handler) updateProfile(w http.ResponseWriter, r *http.Request) {
username := profile.DefaultUsername
if user := auth.UserFromContext(r.Context()); user != nil {
username = user.Username
}
if err := profile.UpdateFromReader(username, r.Body); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
log.Error().Err(err).Msg("Failed to update profile")
return
}
w.WriteHeader(http.StatusOK)
}
func (h *handler) avatar(w http.ResponseWriter, r *http.Request) {
user := auth.UserFromContext(r.Context())
if user == nil {
http.Error(w, "Unable to find user", http.StatusInternalServerError)
return
}
url := user.AvatarURL()
if url == "" {
http.Error(w, "Unable to find avatar", http.StatusNotFound)
return
}
log.Trace().Str("url", url).Msg("Fetching avatar")
response, err := http.Get(url)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
log.Error().Str("url", url).Int("status", response.StatusCode).Msg("Failed to fetch avatar")
return
}
w.Header().Set("Content-Type", response.Header.Get("Content-Type"))
io.Copy(w, response.Body)
}