github.com/xmidt-org/webpa-common@v1.11.9/service/servicehttp/redirect.go (about) 1 package servicehttp 2 3 import ( 4 "context" 5 "net/http" 6 "strings" 7 8 "github.com/go-kit/kit/log/level" 9 gokithttp "github.com/go-kit/kit/transport/http" 10 "github.com/xmidt-org/webpa-common/logging" 11 ) 12 13 // Redirect returns a go-kit EncodeResponseFunc that redirects to the instance hashed by the accessor. 14 // If the original requestURI is populated under the go-kit key ContextKeyRequestURI, it is appended to 15 // the hashed instance. 16 func Redirect(redirectCode int) gokithttp.EncodeResponseFunc { 17 if redirectCode < 300 { 18 redirectCode = http.StatusTemporaryRedirect 19 } 20 21 return func(ctx context.Context, rw http.ResponseWriter, response interface{}) error { 22 var ( 23 logger = logging.GetLogger(ctx) 24 instance = response.(string) 25 requestURI, _ = ctx.Value(gokithttp.ContextKeyRequestURI).(string) 26 ) 27 28 if len(requestURI) > 0 { 29 instance = instance + strings.TrimRight(requestURI, "/") 30 } 31 32 logger.Log(level.Key(), level.DebugValue(), logging.MessageKey(), "redirecting", "instance", instance) 33 rw.Header().Set("Location", instance) 34 rw.WriteHeader(redirectCode) 35 return nil 36 } 37 }