Skip to content

Commit

Permalink
Add default values for init command when rerunning the command to upd…
Browse files Browse the repository at this point in the history
…ate the existing config
  • Loading branch information
iychoi committed Jul 7, 2023
1 parent 5ee4fb2 commit 2cd3c4b
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 23 deletions.
4 changes: 2 additions & 2 deletions cmd/subcmd/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ func processInitCommand(command *cobra.Command, args []string) error {
}

// handle local flags
updated, err := commons.InputMissingFields()
updated, err := commons.ReinputFields()
if err != nil {
return xerrors.Errorf("failed to input missing fields: %w", err)
return xerrors.Errorf("failed to input fields: %w", err)
}

account, err := commons.GetEnvironmentManager().ToIRODSAccount()
Expand Down
126 changes: 105 additions & 21 deletions commons/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,19 +358,14 @@ func InputMissingFields() (bool, error) {
updated = true
}

for len(env.Username) == 0 {
if len(env.Username) == 0 {
fmt.Print("iRODS Username: ")
fmt.Scanln(&env.Username)
if len(env.Username) == 0 {
fmt.Println("Please provide username")
fmt.Println("")
} else {
updated = true
}
updated = true
}

password := environmentManager.Password
for len(password) == 0 {
if len(password) == 0 && env.Username != "anonymous" {
fmt.Print("iRODS Password: ")
bytePassword, err := term.ReadPassword(int(syscall.Stdin))
if err != nil {
Expand All @@ -379,19 +374,7 @@ func InputMissingFields() (bool, error) {

fmt.Print("\n")
password = string(bytePassword)

if env.Username == "anonymous" && len(password) == 0 {
// exceptional case
updated = true
break
}

if len(password) == 0 {
fmt.Println("Please provide password")
fmt.Println("")
} else {
updated = true
}
updated = true
}
environmentManager.Password = password

Expand Down Expand Up @@ -444,6 +427,107 @@ func InputMissingFieldsFromStdin() error {
return nil
}

// ReinputFields re-inputs fields
func ReinputFields() (bool, error) {
if environmentManager == nil {
envMgr, err := irodsclient_icommands.CreateIcommandsEnvironmentManager()
if err != nil {
return false, xerrors.Errorf("failed to get new iCommands Environment: %w", err)
}

environmentManager = envMgr
account, err = envMgr.ToIRODSAccount()
if err != nil {
return false, xerrors.Errorf("failed to get account from iCommands Environment: %w", err)
}
}

updated := false

env := environmentManager.Environment
if len(env.Host) == 0 {
env.Host = "data.cyverse.org" // default
}

fmt.Printf("iRODS Host [%s]: ", env.Host)
newHost := ""
fmt.Scanln(&newHost)
if len(newHost) > 0 && newHost != env.Host {
env.Host = newHost
updated = true
}

if env.Port == 0 {
env.Port = 1247 // default
}

fmt.Printf("iRODS Port [%d]: ", env.Port)
newPort := 0
fmt.Scanln(&newPort)
if newPort > 0 && newPort != env.Port {
env.Port = newPort
updated = true
}

if len(env.Zone) == 0 {
env.Zone = "iplant" // default
}

fmt.Printf("iRODS Zone [%s]: ", env.Zone)
newZone := ""
fmt.Scanln(&newZone)
if len(newZone) > 0 && newZone != env.Zone {
env.Zone = newZone
updated = true
}

for {
if len(env.Username) > 0 {
fmt.Printf("iRODS Username [%s]: ", env.Username)
} else {
fmt.Printf("iRODS Username: ")
}

newUsername := ""
fmt.Scanln(&newUsername)
if len(newUsername) > 0 && newUsername != env.Username {
env.Username = newUsername
updated = true
}

if len(env.Username) > 0 {
break
}
}

fmt.Print("iRODS Password: ")
bytePassword, err := term.ReadPassword(int(syscall.Stdin))
if err != nil {
return false, xerrors.Errorf("failed to read password: %w", err)
}
fmt.Print("\n")
newPassword := string(bytePassword)
updated = true

environmentManager.Password = newPassword

newAccount, err := environmentManager.ToIRODSAccount()
if err != nil {
return updated, xerrors.Errorf("failed to get account from iCommands Environment: %w", err)
}

if len(appConfig.DefaultResource) > 0 {
newAccount.DefaultResource = appConfig.DefaultResource
}

if len(appConfig.Ticket) > 0 {
newAccount.Ticket = appConfig.Ticket
}

account = newAccount
return updated, nil
}

func isICommandsEnvDir(filePath string) bool {
st, err := os.Stat(filePath)
if err != nil {
Expand Down

0 comments on commit 2cd3c4b

Please sign in to comment.