From c00d937f4c3e69245c988ccc5cbe4293c441ad32 Mon Sep 17 00:00:00 2001 From: ejsadiarin Date: Wed, 19 Feb 2025 17:28:13 +0800 Subject: [PATCH] feat(monitor): add basic-auth feature for protected sites this closes [issue #316](https://github.com/glanceapp/glance/issues/316) Furthermore, this could be expanded to also pass the configured basic auth credentials to the request when the user clicks on the specific monitor widget --- internal/glance/widget-monitor.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/internal/glance/widget-monitor.go b/internal/glance/widget-monitor.go index 76f0d45..ee4cb85 100644 --- a/internal/glance/widget-monitor.go +++ b/internal/glance/widget-monitor.go @@ -28,6 +28,10 @@ type monitorWidget struct { StatusText string `yaml:"-"` StatusStyle string `yaml:"-"` AltStatusCodes []int `yaml:"alt-status-codes"` + BasicAuth struct { + Username string `yaml:"username"` + Password string `yaml:"password"` + } `yaml:"basic-auth"` } `yaml:"sites"` Style string `yaml:"style"` ShowFailingOnly bool `yaml:"show-failing-only"` @@ -45,6 +49,10 @@ func (widget *monitorWidget) update(ctx context.Context) { for i := range widget.Sites { requests[i] = widget.Sites[i].SiteStatusRequest + if widget.Sites[i].BasicAuth.Username != "" || widget.Sites[i].BasicAuth.Password != "" { + requests[i].Username = widget.Sites[i].BasicAuth.Username + requests[i].Password = widget.Sites[i].BasicAuth.Password + } } statuses, err := fetchStatusForSites(requests) @@ -118,6 +126,8 @@ type SiteStatusRequest struct { DefaultURL string `yaml:"url"` CheckURL string `yaml:"check-url"` AllowInsecure bool `yaml:"allow-insecure"` + Username string `yaml:"-"` + Password string `yaml:"-"` } type siteStatus struct { @@ -141,6 +151,10 @@ func fetchSiteStatusTask(statusRequest *SiteStatusRequest) (siteStatus, error) { }, nil } + if statusRequest.Username != "" || statusRequest.Password != "" { + request.SetBasicAuth(statusRequest.Username, statusRequest.Password) + } + ctx, cancel := context.WithTimeout(context.Background(), time.Second*3) defer cancel() request = request.WithContext(ctx)