package auth import ( "context" "net/url" "github.com/hashicorp/vault/api" ) func init() { register( userpassMethod{name: "userpass", display: "Username & Password", mount: "userpass"}, userpassMethod{name: "radius", display: "RADIUS", mount: "radius"}, ) } // userpassMethod covers both userpass and radius: upstream's own CLI // handler registers radius as credUserpass with DefaultMount "radius", i.e. // they are the same request shape. type userpassMethod struct{ name, display, mount string } func (m userpassMethod) Name() string { return m.name } func (m userpassMethod) DisplayName() string { return m.display } func (m userpassMethod) DefaultMount() string { return m.mount } func (m userpassMethod) Fields() []Field { return []Field{ {Name: "username", Label: "Username", Kind: FieldText, Required: true, EnvFallback: []string{"VAULT_USERNAME", "LOGNAME", "USER"}}, {Name: "password", Label: "Password", Kind: FieldSecret, Required: true, EnvFallback: []string{"VAULT_PASSWORD"}}, } } func (m userpassMethod) Login(ctx context.Context, c *api.Client, req Request) (*api.Secret, error) { mount := mountOf(req, m.mount) return loginWrite(ctx, c, mount, "login/"+url.PathEscape(req.Creds.Get("username")), map[string]interface{}{"password": req.Creds.Get("password")}) }