GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( 8cec0e...e8c327 )
by Amir
13:23
created

httpserver.joinHandler   B

Complexity

Conditions 6

Size

Total Lines 30
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 21
dl 0
loc 30
rs 8.4426
c 0
b 0
f 0
nop 3
1
package httpserver
2
3
import (
4
	"bytes"
5
	"encoding/json"
6
	"github.com/arazmj/gerdu/cache"
7
	"github.com/arazmj/gerdu/raftproxy"
8
	"github.com/gorilla/mux"
9
	"github.com/prometheus/client_golang/prometheus/promhttp"
10
	log "github.com/sirupsen/logrus"
11
	"net/http"
12
)
13
14
func newRouter(gerdu cache.UnImplementedCache) (router *mux.Router) {
15
	router = mux.NewRouter()
16
	router.HandleFunc("/cache/{key}", func(w http.ResponseWriter, r *http.Request) {
17
		getHandler(w, r, gerdu)
18
	}).Methods(http.MethodGet)
19
	router.HandleFunc("/cache/{key}", func(w http.ResponseWriter, r *http.Request) {
20
		putHandler(w, r, gerdu)
21
	}).Methods(http.MethodPut)
22
	router.HandleFunc("/cache/{key}", func(w http.ResponseWriter, r *http.Request) {
23
		deleteHandler(w, r, gerdu)
24
	}).Methods(http.MethodDelete)
25
	router.HandleFunc("/join", func(w http.ResponseWriter, r *http.Request) {
26
		joinHandler(w, r, gerdu)
27
	}).Methods(http.MethodPost)
28
	router.Handle("/metrics", promhttp.Handler())
29
	return router
30
}
31
32
func joinHandler(w http.ResponseWriter, r *http.Request, gerdu cache.UnImplementedCache) {
33
	raftCache := gerdu.(*raftproxy.RaftProxy)
34
	m := map[string]string{}
35
	if err := json.NewDecoder(r.Body).Decode(&m); err != nil {
36
		w.WriteHeader(http.StatusBadRequest)
37
		return
38
	}
39
40
	if len(m) != 2 {
41
		w.WriteHeader(http.StatusBadRequest)
42
		return
43
	}
44
45
	remoteAddr, ok := m["addr"]
46
	if !ok {
47
		w.WriteHeader(http.StatusBadRequest)
48
		return
49
	}
50
51
	nodeID, ok := m["id"]
52
	if !ok {
53
		w.WriteHeader(http.StatusBadRequest)
54
		return
55
	}
56
57
	if err := raftCache.Join(nodeID, remoteAddr); err != nil {
58
		w.WriteHeader(http.StatusInternalServerError)
59
		return
60
	}
61
	log.Infof("Node %s, remoteAddr %s joined", nodeID, remoteAddr)
62
}
63
64
//HTTPServe start http server in plain text
65
func HTTPServe(host string, gerdu cache.UnImplementedCache) {
66
	router := newRouter(gerdu)
67
	log.Infof("Gerdu started listening HTTP on %s\n", host)
68
	log.Fatal(http.ListenAndServe(host, router))
69
}
70
71
//HTTPServeTLS start HTTP server in secure mode
72
func HTTPServeTLS(host string, tlsCert, tlsKey string, gerdu cache.UnImplementedCache) {
73
	router := newRouter(gerdu)
74
	log.Printf("Gerdu started listening HTTPS TLS on %s\n", host)
75
	log.Fatal(http.ListenAndServeTLS(host, tlsCert, tlsKey, router))
76
}
77
78
func putHandler(w http.ResponseWriter, r *http.Request, gerdu cache.UnImplementedCache) {
79
	vars := mux.Vars(r)
80
	key := vars["key"]
81
	buf := new(bytes.Buffer)
82
	_, err := buf.ReadFrom(r.Body)
83
	if err != nil {
84
		log.Fatal(err.Error())
85
		return
86
	}
87
	value := buf.String()
88
89
	created := gerdu.Put(key, value)
90
	if !created {
91
		log.Printf("HTTP UPDATE Key: %s Value: %s\n", key, value)
92
	} else {
93
		log.Printf("HTTP INSERT Key: %s Value: %s\n", key, value)
94
	}
95
96
	if created {
97
		w.WriteHeader(http.StatusCreated)
98
	} else {
99
		w.WriteHeader(http.StatusNoContent)
100
	}
101
}
102
103
func getHandler(w http.ResponseWriter, r *http.Request, gerdu cache.UnImplementedCache) {
104
	vars := mux.Vars(r)
105
	key := vars["key"]
106
	if value, ok := gerdu.Get(key); ok {
107
		log.Printf("HTTP RETREIVED Key: %s Value: %s\n", key, value)
108
		w.WriteHeader(http.StatusOK)
109
		_, _ = w.Write([]byte(value))
110
	} else {
111
		log.Printf("HTTP MISSED Key: %s \n", key)
112
		w.WriteHeader(http.StatusNotFound)
113
	}
114
}
115
116
func deleteHandler(w http.ResponseWriter, r *http.Request, gerdu cache.UnImplementedCache) {
117
	vars := mux.Vars(r)
118
	key := vars["key"]
119
	if ok := gerdu.Delete(key); ok {
120
		log.Printf("HTTP DELETED Key: %s\n", key)
121
		w.WriteHeader(http.StatusOK)
122
	} else {
123
		log.Printf("HTTP MISSED Key: %s \n", key)
124
		w.WriteHeader(http.StatusNotFound)
125
	}
126
}
127