no more q

master
Bel LaPointe 2023-12-12 08:39:05 -07:00
parent f87cd725c3
commit 0d80d2ea3c
4 changed files with 10 additions and 44 deletions

12
go.mod
View File

@ -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
View File

@ -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
View File

@ -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