gopkg.in/goose.v2@v2.0.1/testservices/cmd/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"net/http"
     7  	"strings"
     8  
     9  	"github.com/juju/gnuflag"
    10  
    11  	"gopkg.in/goose.v2/testservices/identityservice"
    12  )
    13  
    14  type userInfo struct {
    15  	user, secret string
    16  }
    17  type userValues struct {
    18  	users []userInfo
    19  }
    20  
    21  func (uv *userValues) Set(s string) error {
    22  	vals := strings.Split(s, ":")
    23  	if len(vals) != 2 {
    24  		return fmt.Errorf("Invalid --user option, should be: user:secret")
    25  	}
    26  	uv.users = append(uv.users, userInfo{
    27  		user:   vals[0],
    28  		secret: vals[1],
    29  	})
    30  	return nil
    31  }
    32  func (uv *userValues) String() string {
    33  	return fmt.Sprintf("%v", uv.users)
    34  }
    35  
    36  var provider = gnuflag.String("provider", "userpass", "provide the name of the identity service to run")
    37  
    38  var serveAddr = gnuflag.String("addr", "localhost:8080", "serve the provider on the given address.")
    39  
    40  var users userValues
    41  
    42  func init() {
    43  	gnuflag.Var(&users, "user", "supply to add a user to the identity provider. Can be supplied multiple times. Should be of the form \"user:secret:token\".")
    44  }
    45  
    46  var providerMap = map[string]identityservice.IdentityService{
    47  	"legacy":   identityservice.NewLegacy(),
    48  	"userpass": identityservice.NewUserPass(),
    49  }
    50  
    51  func providers() []string {
    52  	out := make([]string, 0, len(providerMap))
    53  	for provider := range providerMap {
    54  		out = append(out, provider)
    55  	}
    56  	return out
    57  }
    58  
    59  func main() {
    60  	gnuflag.Parse(true)
    61  	p, ok := providerMap[*provider]
    62  	if !ok {
    63  		log.Fatalf("No such provider: %s, pick one of: %v", *provider, providers())
    64  	}
    65  	mux := http.NewServeMux()
    66  	p.SetupHTTP(mux)
    67  	for _, u := range users.users {
    68  		p.AddUser(u.user, u.secret, "tenant", "default")
    69  	}
    70  	log.Fatal(http.ListenAndServe(*serveAddr, mux))
    71  }