no more q
parent
f87cd725c3
commit
0d80d2ea3c
12
go.mod
12
go.mod
|
|
@ -2,14 +2,4 @@ module echo-server
|
|||
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
gitlab-app.eng.qops.net/golang/jwt v1.3.0
|
||||
golang.org/x/crypto v0.8.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/alexcesaro/statsd v2.0.0+incompatible // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.4.1 // indirect
|
||||
gitlab-app.eng.qops.net/golang/metrics/v2 v2.0.0 // indirect
|
||||
gitlab-app.eng.qops.net/golang/qtoken v1.0.1 // indirect
|
||||
)
|
||||
require golang.org/x/crypto v0.8.0
|
||||
|
|
|
|||
12
go.sum
12
go.sum
|
|
@ -1,14 +1,2 @@
|
|||
github.com/alexcesaro/statsd v2.0.0+incompatible h1:HG17k1Qk8V1F4UOoq6tx+IUoAbOcI5PHzzEUGeDD72w=
|
||||
github.com/alexcesaro/statsd v2.0.0+incompatible/go.mod h1:vNepIbQAiyLe1j480173M6NYYaAsGwEcvuDTU3OCUGY=
|
||||
github.com/golang-jwt/jwt/v4 v4.4.1 h1:pC5DB52sCeK48Wlb9oPcdhnjkz1TKt1D/P7WKJ0kUcQ=
|
||||
github.com/golang-jwt/jwt/v4 v4.4.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||
gitlab-app.eng.qops.net/golang/jwt v1.3.0 h1:+DPpWuz1qLcAT3HhcTyrbKF35Z310U0sb7EL68K2X/s=
|
||||
gitlab-app.eng.qops.net/golang/jwt v1.3.0/go.mod h1:z6jtur6CCEknerWN+TMrzjdblbqbe7Xoeg8Egsyuh/c=
|
||||
gitlab-app.eng.qops.net/golang/metrics/v2 v2.0.0 h1:bZ8sE1e/+Q6j/5hk8UvLRsg7RDo6GYH3s96dMXMbyCM=
|
||||
gitlab-app.eng.qops.net/golang/metrics/v2 v2.0.0/go.mod h1:3t9G/KnpMPKci08VpOUzPj7oSk7V1iLCM6yV6/PQZss=
|
||||
gitlab-app.eng.qops.net/golang/qtoken v1.0.1 h1:JP0TeZssYXZvPWrxahQVnklrmLcUXLasnWAXvlRjZvE=
|
||||
gitlab-app.eng.qops.net/golang/qtoken v1.0.1/go.mod h1:7Hd83PrhqrStQf3RDcI8AYZo0iNaGOo11Faf/U45yBA=
|
||||
golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
|
||||
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
|
||||
gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc=
|
||||
gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU=
|
||||
|
|
|
|||
30
main.go
30
main.go
|
|
@ -13,7 +13,6 @@ import (
|
|||
"os/signal"
|
||||
"time"
|
||||
|
||||
"gitlab-app.eng.qops.net/golang/jwt"
|
||||
"golang.org/x/crypto/pkcs12"
|
||||
)
|
||||
|
||||
|
|
@ -34,7 +33,6 @@ func main() {
|
|||
block := flag.Int("block", 0, "seconds to block connections")
|
||||
status := flag.Int("status", http.StatusOK, "status to always return")
|
||||
body := flag.String("body", "", "body to always return")
|
||||
jwt := flag.String("jwt", envOrDefault("SECRET", ""), "secret for JWT")
|
||||
flag.Parse()
|
||||
|
||||
// start server
|
||||
|
|
@ -43,7 +41,7 @@ func main() {
|
|||
} else if *tcp {
|
||||
startTCP(*port, *fail, *block)
|
||||
} else {
|
||||
startHTTP(*port, *fail, *block, *jwt, *crt, *key, *status, *body)
|
||||
startHTTP(*port, *fail, *block, *crt, *key, *status, *body)
|
||||
}
|
||||
|
||||
// catch stop
|
||||
|
|
@ -99,10 +97,10 @@ func startTCP(port string, fail bool, block int) {
|
|||
}()
|
||||
}
|
||||
|
||||
func startHTTP(port string, fail bool, block int, secret, crt, key string, status int, body string) {
|
||||
func startHTTP(port string, fail bool, block int, crt, key string, status int, body string) {
|
||||
srv := &http.Server{
|
||||
Addr: ":" + port,
|
||||
Handler: makeHTTPHandler(fail, block, secret, status, body),
|
||||
Handler: makeHTTPHandler(fail, block, status, body),
|
||||
}
|
||||
go func() {
|
||||
if crt == "" || key == "" {
|
||||
|
|
@ -143,20 +141,20 @@ func startHTTP(port string, fail bool, block int, secret, crt, key string, statu
|
|||
log.Println("Listening on", srv.Addr)
|
||||
}
|
||||
|
||||
func makeHTTPHandler(fail bool, block int, secret string, status int, body string) http.HandlerFunc {
|
||||
func makeHTTPHandler(fail bool, block int, status int, body string) http.HandlerFunc {
|
||||
if block > 0 {
|
||||
return blockH(block, fail, secret, status, body)
|
||||
return blockH(block, fail, status, body)
|
||||
} else if fail {
|
||||
return http.HandlerFunc(failH)
|
||||
}
|
||||
return echoH(secret, status, body)
|
||||
return echoH(status, body)
|
||||
}
|
||||
|
||||
func failH(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
func blockH(block int, fail bool, secret string, status int, body string) http.HandlerFunc {
|
||||
func blockH(block int, fail bool, status int, body string) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
select {
|
||||
case <-time.After(time.Second * time.Duration(block)):
|
||||
|
|
@ -169,26 +167,16 @@ func blockH(block int, fail bool, secret string, status int, body string) http.H
|
|||
if fail {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
} else {
|
||||
echoH(secret, status, body)(w, r)
|
||||
echoH(status, body)(w, r)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func echoH(secret string, status int, body string) http.HandlerFunc {
|
||||
func echoH(status int, body string) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
log.Println("METHOD:", r.Method)
|
||||
log.Println("URL:", r.URL.String())
|
||||
log.Println("HEADER:", r.Header)
|
||||
if secret != "" {
|
||||
verifier := jwt.Verifier{Key: []byte(secret)}
|
||||
_, err := verifier.Verify(r)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusUnauthorized)
|
||||
fmt.Fprintln(w, "ERR: failed verifying jwt:", err)
|
||||
log.Println("ERR: failed verifying jwt:", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
b, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
return
|
||||
|
|
|
|||
Loading…
Reference in New Issue