diff --git a/CHANGELOG.md b/CHANGELOG.md index c87c880..b71cf13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### Unreleased + +* When using MySQL for event storage, do not leak connections. +* Last events were not shown when viewing a repo of non-default namespace. + ### 0.6 * Add MySQL along with sqlite3 support as a registry events storage. diff --git a/events/event_listener.go b/events/event_listener.go index 9b6b2a8..f90ea4d 100644 --- a/events/event_listener.go +++ b/events/event_listener.go @@ -144,13 +144,13 @@ func (e *EventListener) GetEvents(repository string) []EventRow { e.logger.Error("Error selecting from table: ", err) return events } + defer rows.Close() for rows.Next() { var row EventRow rows.Scan(&row.ID, &row.Action, &row.Repository, &row.Tag, &row.IP, &row.User, &row.Created) events = append(events, row) } - rows.Close() return events } @@ -171,9 +171,11 @@ func (e *EventListener) getDababaseHandler() (*sql.DB, error) { if e.databaseDriver == "mysql" { schema = strings.Replace(schema, "AUTOINCREMENT", "AUTO_INCREMENT", 1) - if _, err := db.Query("SELECT * FROM events LIMIT 1"); err != nil { + rows, err := db.Query("SELECT * FROM events LIMIT 1") + if err != nil { firstRun = true } + rows.Close() } // Create table on first run. diff --git a/main.go b/main.go index 9321ab6..bc346dc 100644 --- a/main.go +++ b/main.go @@ -133,6 +133,17 @@ func main() { } return res }) + view.AddGlobal("url_encoded_path", func(m interface{}) string { + return url.PathEscape(m.(string)) + + }) + view.AddGlobal("url_decoded_path", func(m interface{}) string { + res, err := url.PathUnescape(m.(string)) + if err != nil { + return m.(string) + } + return res + }) e := echo.New() e.Renderer = &template{View: view} @@ -206,7 +217,7 @@ func (a *apiClient) viewTags(c echo.Context) error { data.Set("repo", repo) data.Set("tags", tags) data.Set("deleteAllowed", deleteAllowed) - data.Set("events", a.eventListener.GetEvents(repo)) + data.Set("events", a.eventListener.GetEvents(repoPath)) return c.Render(http.StatusOK, "tags.html", data) } diff --git a/registry/client.go b/registry/client.go index 444690d..c94ed59 100644 --- a/registry/client.go +++ b/registry/client.go @@ -69,7 +69,7 @@ func NewClient(url string, verifyTLS bool, username, password string) *Client { c.logger.Warn("No token auth service discovered from ", c.url) return nil } - } else if strings.HasPrefix(authHeader, "Basic") { + } else if strings.HasPrefix(strings.ToLower(authHeader), strings.ToLower("Basic")) { c.request = c.request.SetBasicAuth(c.username, c.password) c.logger.Info("It was discovered the registry is configured with HTTP basic auth.") } diff --git a/templates/repositories.html b/templates/repositories.html index d4a8d43..dfeb0bd 100644 --- a/templates/repositories.html +++ b/templates/repositories.html @@ -25,12 +25,16 @@ {{block body()}}
+
+ +
diff --git a/templates/tags.html b/templates/tags.html index ca65be3..c93f522 100644 --- a/templates/tags.html +++ b/templates/tags.html @@ -33,7 +33,7 @@ {{if namespace != "library"}}
  • {{ namespace }}
  • {{end}} -
  • {{ repo }}
  • +
  • {{ repo |url_decoded_path }}