diff --git a/database.go b/database.go index 6d7f6eb..29adc95 100644 --- a/database.go +++ b/database.go @@ -33,6 +33,7 @@ type Tunnel struct { TunnelPrivateKey string `json:"tunnel_private_key"` ClientName string `json:"client_name"` ClientPort int `json:"client_port"` + CssId string `json:"css_id"` } func NewDatabase() (*Database, error) { diff --git a/ui_handler.go b/ui_handler.go index 72be815..960fb25 100644 --- a/ui_handler.go +++ b/ui_handler.go @@ -55,6 +55,10 @@ type HeadData struct { Styles template.CSS } +type StylesData struct { + Tunnels map[string]Tunnel +} + type MenuData struct { IsAdmin bool } @@ -82,6 +86,8 @@ func NewWebUiHandler(config *BoringProxyConfig, db *Database, api *Api, auth *Au func (h *WebUiHandler) handleWebUiRequest(w http.ResponseWriter, r *http.Request) { + homePath := "/#/tunnel" + token, err := extractToken("access_token", r) if err != nil { h.sendLoginPage(w, r, 401) @@ -112,6 +118,24 @@ func (h *WebUiHandler) handleWebUiRequest(w http.ResponseWriter, r *http.Request return } + stylesTmpl, err := template.New("styles").Parse(stylesText) + if err != nil { + w.WriteHeader(500) + h.alertDialog(w, r, err.Error(), homePath) + return + } + + tunnels := h.api.GetTunnels(tokenData) + + for domain, tun := range tunnels { + // TODO: might yield non-unique names + tun.CssId = strings.ReplaceAll(domain, ".", "-") + tunnels[domain] = tun + } + + var stylesBuilder strings.Builder + stylesTmpl.Execute(&stylesBuilder, StylesData{Tunnels: tunnels}) + headTmplStr, err := box.String("head.tmpl") if err != nil { w.WriteHeader(500) @@ -128,7 +152,7 @@ func (h *WebUiHandler) handleWebUiRequest(w http.ResponseWriter, r *http.Request } var headBuilder strings.Builder - headTmpl.Execute(&headBuilder, HeadData{Styles: template.CSS(stylesText)}) + headTmpl.Execute(&headBuilder, HeadData{Styles: template.CSS(stylesBuilder.String())}) h.headHtml = template.HTML(headBuilder.String()) @@ -190,7 +214,7 @@ func (h *WebUiHandler) handleWebUiRequest(w http.ResponseWriter, r *http.Request indexData := IndexData{ Head: h.headHtml, - Tunnels: h.api.GetTunnels(tokenData), + Tunnels: tunnels, Tokens: tokens, Users: users, IsAdmin: user.IsAdmin, diff --git a/webui/index.tmpl b/webui/index.tmpl index 6ab417d..1196d31 100644 --- a/webui/index.tmpl +++ b/webui/index.tmpl @@ -25,9 +25,10 @@
+ Are you sure you want to delete {{$domain}}? +
+ +