ssl redirect test
This commit is contained in:
@@ -83,7 +83,7 @@ func (s *Rest) Run(port int) {
|
||||
err := s.httpServer.ListenAndServe()
|
||||
log.Printf("[WARN] http server terminated, %s", err)
|
||||
case Static:
|
||||
log.Printf("[INFO] activate rest https server in 'static' mode on port %d", s.SSLConfig.Port)
|
||||
log.Printf("[INFO] activate https server in 'static' mode on port %d", s.SSLConfig.Port)
|
||||
|
||||
s.lock.Lock()
|
||||
s.httpsServer = s.makeHTTPServer(s.SSLConfig.Port, s.routes())
|
||||
@@ -92,7 +92,6 @@ func (s *Rest) Run(port int) {
|
||||
|
||||
go func() {
|
||||
log.Printf("[INFO] activate http redirect server on port %d", port)
|
||||
|
||||
err := s.httpServer.ListenAndServe()
|
||||
log.Printf("[WARN] http redirect server terminated, %s", err)
|
||||
}()
|
||||
@@ -100,7 +99,7 @@ func (s *Rest) Run(port int) {
|
||||
err := s.httpsServer.ListenAndServeTLS(s.SSLConfig.Cert, s.SSLConfig.Key)
|
||||
log.Printf("[WARN] https server terminated, %s", err)
|
||||
case Auto:
|
||||
log.Printf("[WARN] Autocert mode is not implemented yet")
|
||||
log.Printf("[WARN] autocert mode is not implemented yet")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
@@ -32,6 +33,7 @@ type SSLConfig struct {
|
||||
|
||||
// httpToHTTPSRouter creates new router which does redirect from http to https server
|
||||
func (s *Rest) httpToHTTPSRouter() chi.Router {
|
||||
log.Printf("[DEBUG] create https-to-http redirect routes")
|
||||
router := chi.NewRouter()
|
||||
router.Use(middleware.RealIP, Recoverer)
|
||||
router.Use(middleware.Throttle(1000), middleware.Timeout(60*time.Second))
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestSSL_Redirect(t *testing.T) {
|
||||
rest := Rest{RemarkURL: "https://localhost:443"}
|
||||
|
||||
ts := httptest.NewServer(rest.httpToHTTPSRouter())
|
||||
defer ts.Close()
|
||||
|
||||
client := http.Client{
|
||||
// prevent http redirect
|
||||
CheckRedirect: func(req *http.Request, via []*http.Request) error {
|
||||
return http.ErrUseLastResponse
|
||||
},
|
||||
|
||||
// allow self-signed certificate
|
||||
Transport: &http.Transport{
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
},
|
||||
}
|
||||
|
||||
// check http to https redirect response
|
||||
resp, err := client.Get(ts.URL + "/blah?param=1")
|
||||
require.Nil(t, err)
|
||||
defer resp.Body.Close()
|
||||
assert.Equal(t, 307, resp.StatusCode)
|
||||
assert.Equal(t, "https://localhost:443/blah?param=1", resp.Header.Get("Location"))
|
||||
}
|
||||
Reference in New Issue
Block a user