Files
pkgstash/cmd/server/handler_api.go
T

70 lines
1.7 KiB
Go

package main
import (
"encoding/json"
"log/slog"
"net/http"
"strings"
)
func (s *Server) handlerRefresh(w http.ResponseWriter, req *http.Request) {
if req.Header.Get("Authorization") != "Bearer "+s.cfg.Token {
ip := req.Header.Get("X-Real-IP")
if ip == "" {
ip = req.RemoteAddr
}
slog.Warn("unauthorized request", "ip", ip, "path", req.URL.Path, "method", req.Method)
respondWithError(w, http.StatusUnauthorized, "unauthorized")
return
}
if err := s.rs.Sync(); err != nil {
slog.Error("refresh failed", "err", err)
http.Error(w, "refresh failed", http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusNoContent)
}
func (s *Server) handlerLogLevel(w http.ResponseWriter, req *http.Request) {
if req.Header.Get("Authorization") != "Bearer "+s.cfg.Token {
ip := req.Header.Get("X-Real-IP")
if ip == "" {
ip = req.RemoteAddr
}
slog.Warn("unauthorized request", "ip", ip, "path", req.URL.Path, "method", req.Method)
respondWithError(w, http.StatusUnauthorized, "unauthorized")
return
}
type reqParameters struct {
NewLevel string `json:"loglevel"`
}
decoder := json.NewDecoder(req.Body)
reqParams := reqParameters{}
err := decoder.Decode(&reqParams)
if err != nil {
slog.Debug("json decode erro", "err", err)
respondWithError(w, http.StatusBadRequest, "invalid request")
return
}
switch strings.ToLower(reqParams.NewLevel) {
case "debug":
s.logLevel.Set(slog.LevelDebug)
case "info":
s.logLevel.Set(slog.LevelInfo)
case "warn":
s.logLevel.Set(slog.LevelWarn)
case "error":
s.logLevel.Set(slog.LevelError)
default:
respondWithError(w, http.StatusBadRequest, "invalid log level")
return
}
slog.Info("log level changed", "level", reqParams.NewLevel)
w.WriteHeader(http.StatusNoContent)
}