ai cooking
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

block logs (#243)

* block logs

* redirect to sign in?

authored by

Paul Miller and committed by
GitHub
d4ab0fc4 6dca4d8b

+17 -5
+14 -2
internal/logs/handler.go
··· 2 2 package logs 3 3 4 4 import ( 5 + "careme/internal/auth" 5 6 "careme/internal/logsink" 6 - "context" 7 + "errors" 7 8 "fmt" 8 9 "log/slog" 9 10 "net/http" ··· 13 14 // Handler handles HTTP requests for log viewing 14 15 type handler struct { 15 16 reader *Reader 17 + auth auth.AuthClient 16 18 } 17 19 18 20 // NewHandler creates a new logs HTTP handler 19 21 func NewHandler(cfg logsink.Config) (*handler, error) { 20 22 // Only create reader if Azure credentials are available 21 - reader, err := NewReader(context.Background(), &cfg) 23 + reader, err := NewReader(&cfg) 22 24 if err != nil { 23 25 return nil, fmt.Errorf("failed to create log reader: %w", err) 24 26 } ··· 35 37 } 36 38 37 39 func (h *handler) handleLogsPage(w http.ResponseWriter, r *http.Request) { 40 + if _, err := h.auth.GetUserIDFromRequest(r); errors.Is(err, auth.ErrNoSession) { 41 + w.WriteHeader(http.StatusNotFound) 42 + return 43 + } 44 + 38 45 w.Header().Set("Content-Type", "text/html; charset=utf-8") 39 46 w.Header().Set("X-Content-Type-Options", "nosniff") 40 47 w.Header().Set("Cache-Control", "no-store") ··· 68 75 69 76 // handleLogsAPI serves the logs as JSON 70 77 func (h *handler) handleLogsAPI(w http.ResponseWriter, r *http.Request) { 78 + 79 + if _, err := h.auth.GetUserIDFromRequest(r); errors.Is(err, auth.ErrNoSession) { 80 + w.WriteHeader(http.StatusNotFound) 81 + return 82 + } 71 83 72 84 // Parse hours parameter 73 85 hoursStr := r.URL.Query().Get("hours")
+1 -1
internal/logs/reader.go
··· 19 19 } 20 20 21 21 // NewReader creates a new log reader 22 - func NewReader(ctx context.Context, cfg *logsink.Config) (*Reader, error) { 22 + func NewReader(cfg *logsink.Config) (*Reader, error) { 23 23 if cfg.AccountName == "" || cfg.AccountKey == "" || cfg.Container == "" { 24 24 return nil, errors.New("AccountName, AccountKey, and Container are required") 25 25 }
+1 -1
internal/recipes/server.go
··· 150 150 } 151 151 _, err := s.clerk.GetUserIDFromRequest(r) 152 152 if errors.Is(err, auth.ErrNoSession) { 153 - w.Header().Set("HX-Redirect", "/") 153 + w.Header().Set("HX-Redirect", "/sign-in") 154 154 http.Error(w, "must be logged in to ask a question", http.StatusUnauthorized) 155 155 return 156 156 }
+1 -1
internal/recipes/server_test.go
··· 237 237 if rr.Code != http.StatusUnauthorized { 238 238 t.Fatalf("expected status %d, got %d", http.StatusUnauthorized, rr.Code) 239 239 } 240 - if got := rr.Header().Get("HX-Redirect"); got != "/" { 240 + if got := rr.Header().Get("HX-Redirect"); got != "/sign-in" { 241 241 t.Fatalf("expected HX-Redirect to /, got %q", got) 242 242 } 243 243 }