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  }