// Complete fills CreateBasicAuthSecretOptions fields with data and checks for mutual exclusivity // between flags from different option groups. func (o *CreateBasicAuthSecretOptions) Complete(f *kcmdutil.Factory, args []string) error { if len(args) != 1 { return errors.New("must have exactly one argument: secret name") } o.SecretName = args[0] if o.PromptForPassword { if len(o.Password) != 0 { return errors.New("must provide either --prompt or --password flag") } if !kterm.IsTerminal(o.Reader) { return errors.New("provided reader is not a terminal") } o.Password = term.PromptForPasswordString(o.Reader, o.Out, "Password: "******"password must be provided") } } if f != nil { client, err := f.Client() if err != nil { return err } namespace, _, err := f.DefaultNamespace() if err != nil { return err } o.SecretsInterface = client.Secrets(namespace) } return nil }
func (c *BasicChallengeHandler) HandleChallenge(requestURL string, headers http.Header) (http.Header, bool, error) { if c.prompted { glog.V(2).Info("already prompted for challenge, won't prompt again") return nil, false, nil } if c.handled { glog.V(2).Info("already handled basic challenge") return nil, false, nil } username := c.Username password := c.Password missingUsername := len(username) == 0 missingPassword := len(password) == 0 if (missingUsername || missingPassword) && c.Reader != nil { w := c.Writer if w == nil { w = os.Stdout } if _, realm := basicRealm(headers); len(realm) > 0 { fmt.Fprintf(w, "Authentication required for %s (%s)\n", c.Host, realm) } else { fmt.Fprintf(w, "Authentication required for %s\n", c.Host) } if missingUsername { username = term.PromptForString(c.Reader, w, "Username: "******"Username: %s\n", username) } if missingPassword { password = term.PromptForPasswordString(c.Reader, w, "Password: "******":") { return nil, false, fmt.Errorf("username %s is invalid for basic auth", username) } responseHeaders := http.Header{} responseHeaders.Set("Authorization", getBasicHeader(username, password)) // remember so we don't re-handle non-interactively c.handled = true return responseHeaders, true, nil } glog.V(2).Info("no username or password available") return nil, false, nil }