2022-05-18 20:20:45 -07:00
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
2023-02-02 17:15:17 -08:00
2022-05-18 20:20:45 -07:00
package credentialscmd
import (
2022-08-05 16:08:48 -04:00
"errors"
"fmt"
2022-05-18 20:20:45 -07:00
"github.com/hashicorp/boundary/api/credentials"
"github.com/hashicorp/boundary/internal/cmd/base"
2022-07-19 16:58:03 -04:00
"github.com/hashicorp/go-secure-stdlib/parseutil"
2022-05-18 20:20:45 -07:00
)
func init () {
extraUsernamePasswordFlagsFunc = extraUsernamePasswordFlagsFuncImpl
extraUsernamePasswordActionsFlagsMapFunc = extraUsernamePasswordActionsFlagsMapFuncImpl
extraUsernamePasswordFlagsHandlingFunc = extraUsernamePasswordFlagHandlingFuncImpl
}
type extraUsernamePasswordCmdVars struct {
flagUsername string
flagPassword string
}
func extraUsernamePasswordActionsFlagsMapFuncImpl () map [ string ][] string {
flags := map [ string ][] string {
"create" : {
usernameFlagName ,
passwordFlagName ,
},
}
flags [ "update" ] = flags [ "create" ]
return flags
}
func extraUsernamePasswordFlagsFuncImpl ( c * UsernamePasswordCommand , set * base . FlagSets , _ * base . FlagSet ) {
2022-07-19 16:58:03 -04:00
f := set . NewFlagSet ( "Username/Password Credential Options" )
2022-05-18 20:20:45 -07:00
for _ , name := range flagsUsernamePasswordMap [ c . Func ] {
switch name {
case usernameFlagName :
f . StringVar ( & base . StringVar {
Name : usernameFlagName ,
Target : & c . flagUsername ,
Usage : "The username associated with the credential." ,
})
case passwordFlagName :
f . StringVar ( & base . StringVar {
Name : passwordFlagName ,
Target : & c . flagPassword ,
2022-08-05 16:08:48 -04:00
Usage : "The password associated with the credential. This can be a file on disk (file://) from which the value will be read, or an env var (env://) from which the value will be read." ,
2022-05-18 20:20:45 -07:00
})
}
}
}
func extraUsernamePasswordFlagHandlingFuncImpl ( c * UsernamePasswordCommand , _ * base . FlagSets , opts * [] credentials . Option ) bool {
switch c . flagUsername {
case "" :
default :
* opts = append ( * opts , credentials . WithUsernamePasswordCredentialUsername ( c . flagUsername ))
}
switch c . flagPassword {
case "" :
default :
2022-08-05 16:08:48 -04:00
password , err := parseutil . MustParsePath ( c . flagPassword )
switch {
case err == nil :
case errors . Is ( err , parseutil . ErrNotParsed ):
c . UI . Error ( "Password flag must be used with env:// or file:// syntax" )
return false
default :
c . UI . Error ( fmt . Sprintf ( "Error parsing password flag: %v" , err ))
2022-07-19 16:58:03 -04:00
return false
}
* opts = append ( * opts , credentials . WithUsernamePasswordCredentialPassword ( password ))
2022-05-18 20:20:45 -07:00
}
return true
}
func ( c * UsernamePasswordCommand ) extraUsernamePasswordHelpFunc ( _ map [ string ] func () string ) string {
var helpStr string
switch c . Func {
case "create" :
helpStr = base . WrapForHelpText ([] string {
"Usage: boundary credentials create username-password -credential-store-id [options] [args]" ,
"" ,
2022-06-27 14:03:12 -07:00
" Create a username password credential. Example:" ,
2022-05-18 20:20:45 -07:00
"" ,
` $ boundary credentials create username-password -credential-store-id csvlt_1234567890 -username user -password pass` ,
"" ,
"" ,
})
case "update" :
helpStr = base . WrapForHelpText ([] string {
2022-06-27 14:03:12 -07:00
"Usage: boundary credentials update username-password [options] [args]" ,
2022-05-18 20:20:45 -07:00
"" ,
2022-06-27 14:03:12 -07:00
" Update a username password credential given its ID. Example:" ,
2022-05-18 20:20:45 -07:00
"" ,
` $ boundary credentials update username-password -id clvlt_1234567890 -name devops -description "For DevOps usage"` ,
"" ,
"" ,
})
}
return helpStr + c . Flags (). Help ()
}