Copyright 2020 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

package middleware

import (
	
	
)

const (
	betaPkgGoDevRedirectCookie = "betapkggodev-redirect"
	betaPkgGoDevRedirectParam  = "betaredirect"
	betaPkgGoDevRedirectOn     = "on"
	betaPkgGoDevRedirectOff    = "off"
	betaPkgGoDevHost           = "beta.pkg.go.dev"
)
BetaPkgGoDevRedirect redirects requests from pkg.go.dev to beta.pkg.go.dev, based on whether a cookie is set for betapkggodev-redirect. The cookie can be turned on/off using a query param.
func () Middleware {
	return func( http.Handler) http.Handler {
		return http.HandlerFunc(func( http.ResponseWriter,  *http.Request) {
			if userReturningFromBetaPkgGoDev() {
				.ServeHTTP(, )
				return
			}

			 := .FormValue(betaPkgGoDevRedirectParam)

			if  == betaPkgGoDevRedirectOn {
				 := &http.Cookie{Name: betaPkgGoDevRedirectCookie, Value: , Path: "/"}
				http.SetCookie(, )
			}
			if  == betaPkgGoDevRedirectOff {
				 := &http.Cookie{Name: betaPkgGoDevRedirectCookie, Value: "", MaxAge: -1, Path: "/"}
				http.SetCookie(, )
			}

			if !shouldRedirectToBetaPkgGoDev() {
				.ServeHTTP(, )
				return
			}

			http.Redirect(, , betaPkgGoDevURL(.URL).String(), http.StatusFound)
		})
	}
}

func ( *http.Request) bool {
	return .FormValue("utm_source") == "backtopkggodev"
}

func ( *http.Request) bool {
	 := .FormValue(betaPkgGoDevRedirectParam)
	if  == betaPkgGoDevRedirectOn ||  == betaPkgGoDevRedirectOff {
		return  == betaPkgGoDevRedirectOn
	}
	,  := .Cookie(betaPkgGoDevRedirectCookie)
	return ( == nil && .Value == betaPkgGoDevRedirectOn)
}

func ( *url.URL) *url.URL {
	 := .Query()
	.Del(betaPkgGoDevRedirectParam)
	.Set("utm_source", "pkggodev")
	return &url.URL{
		Scheme:   "https",
		Host:     betaPkgGoDevHost,
		Path:     .Path,
		RawQuery: .Encode(),
	}