Text file src/cmd/go/testdata/script/goauth_userauth.txt

     1  # This test covers the HTTP authentication mechanism over GOAUTH by using a custom authenticator.
     2  # See golang.org/issue/26232
     3  
     4  [short] skip 'runs build to create authenticators'
     5  
     6  env GOPROXY=direct
     7  env GOSUMDB=off
     8  mkdir $WORK/bin
     9  env PATH=$WORK/bin${:}$PATH
    10  
    11  # Without credentials, downloading a module from a path that requires HTTPS
    12  # basic auth should fail.
    13  env GOAUTH=off
    14  cp go.mod.orig go.mod
    15  ! go get vcs-test.golang.org/auth/or401
    16  stderr '^\tserver response: ACCESS DENIED, buddy$'
    17  # go imports should fail as well.
    18  ! go mod tidy
    19  stderr '^\tserver response: ACCESS DENIED, buddy$'
    20  
    21  # Initial invocation of authenticator is successful.
    22  go build -o $WORK/bin/basic$GOEXE scripts/basic.go
    23  # With credentials from the binary, it should succeed.
    24  env GOAUTH='basic'$GOEXE
    25  cp go.mod.orig go.mod
    26  go get vcs-test.golang.org/auth/or401
    27  # go imports should resolve correctly as well.
    28  go mod tidy
    29  go list all
    30  stdout vcs-test.golang.org/auth/or401
    31  
    32  # Second invocation of authenticator is successful.
    33  go build -o $WORK/bin/reinvocation$GOEXE scripts/reinvocation.go
    34  # With credentials from the binary, it should succeed.
    35  env GOAUTH='reinvocation'$GOEXE
    36  cp go.mod.orig go.mod
    37  go get vcs-test.golang.org/auth/or401
    38  # go imports should resolve correctly as well.
    39  go mod tidy
    40  go list all
    41  stdout vcs-test.golang.org/auth/or401
    42  
    43  # Authenticator can parse arguments correctly.
    44  go build -o $WORK/bin/arguments$GOEXE scripts/arguments.go
    45  # With credentials from the binary, it should succeed.
    46  env GOAUTH='arguments'$GOEXE' --arg1 "value with spaces"'
    47  cp go.mod.orig go.mod
    48  go get vcs-test.golang.org/auth/or401
    49  # go imports should resolve correctly as well.
    50  go mod tidy
    51  go list all
    52  stdout vcs-test.golang.org/auth/or401
    53  
    54  # Authenticator provides bad credentials.
    55  go build -o $WORK/bin/invalid$GOEXE scripts/invalid.go
    56  # With credentials from the binary, it should fail.
    57  env GOAUTH='invalid'$GOEXE
    58  cp go.mod.orig go.mod
    59  ! go get vcs-test.golang.org/auth/or401
    60  stderr '^\tserver response: ACCESS DENIED, buddy$'
    61  # go imports should fail as well.
    62  ! go mod tidy
    63  stderr '^\tserver response: ACCESS DENIED, buddy$'
    64  
    65  -- go.mod.orig --
    66  module private.example.com
    67  -- main.go --
    68  package useprivate
    69  
    70  import "vcs-test.golang.org/auth/or401"
    71  -- scripts/basic.go --
    72  package main
    73  
    74  import "fmt"
    75  
    76  func main() {
    77  	fmt.Printf("https://vcs-test.golang.org\n\nAuthorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l\n\n")
    78  }
    79  -- scripts/reinvocation.go --
    80  package main
    81  
    82  import(
    83  	"bufio"
    84  	"flag"
    85  	"fmt"
    86  	"io"
    87  	"log"
    88  	"net/http"
    89  	"os"
    90  	"strings"
    91  )
    92  
    93  func main() {
    94  	flag.Parse()
    95  	// wait for re-invocation
    96  	if !strings.HasPrefix(flag.Arg(0), "https://vcs-test.golang.org") {
    97  		return
    98  	}
    99  	input, err := io.ReadAll(os.Stdin)
   100  	if err != nil {
   101  		log.Fatal("unexpected error while reading from stdin")
   102  	}
   103  	reader := bufio.NewReader(strings.NewReader(string(input)))
   104  	resp, err := http.ReadResponse(reader, nil)
   105  	if err != nil {
   106  		log.Fatal("could not parse HTTP response")
   107  	}
   108  	if resp.StatusCode != 401 {
   109  		log.Fatal("expected 401 error code")
   110  	}
   111  	fmt.Printf("https://vcs-test.golang.org\n\nAuthorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l\n\n")
   112  }
   113  -- scripts/arguments.go --
   114  package main
   115  
   116  import(
   117  	"flag"
   118  	"fmt"
   119  	"log"
   120  )
   121  
   122  func main() {
   123  	arg1 := flag.String("arg1", "", "")
   124  	flag.Parse()
   125  	if *arg1 != "value with spaces" {
   126  		log.Fatal("argument with spaces does not work")
   127  	}
   128  	fmt.Printf("https://vcs-test.golang.org\n\nAuthorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l\n\n")
   129  }
   130  -- scripts/invalid.go --
   131  package main
   132  
   133  import "fmt"
   134  
   135  func main() {
   136  	fmt.Printf("https://vcs-test.golang.org\n\nAuthorization: Basic invalid\n\n")
   137  }

View as plain text