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 }