Mercurial > gemma
diff pkg/models/extservices.go @ 442:fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 21 Aug 2018 16:57:55 +0200 |
parents | pkg/controllers/extservices.go@3739aa34f838 |
children | 659c04feb2dc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/models/extservices.go Tue Aug 21 16:57:55 2018 +0200 @@ -0,0 +1,64 @@ +package models + +import ( + "database/sql" + "log" + "sync" + + "gemma.intevation.de/gemma/pkg/auth" +) + +type ExtEntry struct { + url string + isWFS bool +} + +type ExtServices struct { + mu sync.Mutex + entries map[string]ExtEntry +} + +var ExternalServices = &ExtServices{} + +const selectExternalServices = `SELECT local_name, remote_url, is_wfs +FROM sys_admin.external_services` + +func (es *ExtServices) Find(name string) (string, bool) { + es.mu.Lock() + defer es.mu.Unlock() + + if es.entries == nil { + es.entries = make(map[string]ExtEntry) + if err := es.load(); err != nil { + log.Printf("error: %v\n", err) + return "", false + } + } + e, found := es.entries[name] + return e.url, found +} + +func (es *ExtServices) load() error { + return auth.RunAs("sys_admin", func(db *sql.DB) error { + rows, err := db.Query(selectExternalServices) + if err != nil { + return err + } + defer rows.Close() + for rows.Next() { + var entry ExtEntry + var key string + if err := rows.Scan(&key, &entry.url, &entry.isWFS); err != nil { + return err + } + es.entries[key] = entry + } + return rows.Err() + }) +} + +func (es *ExtServices) Invalidate() { + es.mu.Lock() + es.entries = nil + es.mu.Unlock() +}