...
1 package webserver
2
3 import (
4 "io"
5 "net/http"
6
7 jsoniter "github.com/json-iterator/go"
8
9 "github.com/cybertec-postgresql/pgwatch/v3/internal/sources"
10 )
11
12 func (server *WebUIServer) handleSources(w http.ResponseWriter, r *http.Request) {
13 var (
14 err error
15 params []byte
16 res string
17 )
18
19 defer func() {
20 if err != nil {
21 http.Error(w, err.Error(), http.StatusInternalServerError)
22 }
23 }()
24
25 switch r.Method {
26 case http.MethodGet:
27
28 if res, err = server.GetSources(); err != nil {
29 return
30 }
31 _, err = w.Write([]byte(res))
32
33 case http.MethodPost:
34
35 if params, err = io.ReadAll(r.Body); err != nil {
36 return
37 }
38 err = server.UpdateSource(params)
39
40 case http.MethodDelete:
41
42 err = server.DeleteSource(r.URL.Query().Get("name"))
43
44 case http.MethodOptions:
45 w.Header().Set("Allow", "GET, POST, DELETE, OPTIONS")
46 w.WriteHeader(http.StatusNoContent)
47
48 default:
49 w.Header().Set("Allow", "GET, POST, DELETE, OPTIONS")
50 http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
51 }
52 }
53
54
55 func (server *WebUIServer) GetSources() (res string, err error) {
56 var dbs sources.Sources
57 if dbs, err = server.sourcesReaderWriter.GetSources(); err != nil {
58 return
59 }
60 b, _ := jsoniter.ConfigFastest.Marshal(dbs)
61 res = string(b)
62 return
63 }
64
65
66 func (server *WebUIServer) DeleteSource(database string) error {
67 return server.sourcesReaderWriter.DeleteSource(database)
68 }
69
70
71 func (server *WebUIServer) UpdateSource(params []byte) error {
72 var md sources.Source
73 err := jsoniter.ConfigFastest.Unmarshal(params, &md)
74 if err != nil {
75 return err
76 }
77 return server.sourcesReaderWriter.UpdateSource(md)
78 }
79