AlecAivazis / survey

A golang library for building interactive and accessible prompts with full support for windows and posix terminals.
MIT License
4.08k stars 351 forks source link

Password mask confuses subsequent output #306

Closed kgibm closed 3 years ago

kgibm commented 3 years ago

When a very long password is entered/pasted in the macOS Catalina 10.15.7 Terminal, the * characters from survey confuse subsequent output. I noticed this when using the OpenShift Installer which requires a ~2KB secret:

? Pull Secret [? for help] ***************************************************************************************************************************************************************************************************************************************************INFO Creating
infrastructure resources...         ****************************************************************************************************************************************************************************************************************************INFO Waiting 
up to 20m0s for the Kubernetes API at https://api.cluster-f1bd.sandbox1365.opentlc.com:6443... ***************************************************************************************************************************************************INFO API 
v1.17.1 up                               ***********************************************************************************************************************************************************************************************************************INFO Waiting 
up to 40m0s for bootstrapping to complete... ***************************************************************************************************************************************************************************************************************INFO Destroying 
the bootstrap resources...        ***********************************************************************************************************************************************************************************************************************INFO Waiting 
up to 30m0s for the cluster at https://api.cluster-f1bd.sandbox1365.opentlc.com:6443 to initialize... ******************************************************************************************************************************************************INFO Waiting up 
to 10m0s for the openshift-console route to be created... ***********************************************************************************************************************************************************************************************INFO Install 
complete!                            ***********************************************************************************************************************************************************************************************************************INFO To 
access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/[...]/cluster-f1bd/auth/kubeconfig' *************************************************************************************************************INFO Access 
the OpenShift web-console here: https://console-openshift-console.apps.cluster-f1bd.sandbox1365.opentlc.com ***************

This can be reproduced with the following program:

package main

import (
    "fmt"
    "github.com/AlecAivazis/survey/v2"
)

// the questions to ask
var qs = []*survey.Question{
    {
        Name:     "password",
        Prompt:   &survey.Password{Message: "Password?"},
        Validate: survey.Required,
    },
}

func main() {
    answers := struct {
        Password string
    }{}

    err := survey.Ask(qs, &answers)
    if err != nil {
        fmt.Println(err.Error())
        return
    }

    fmt.Printf("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n")
}

Then run and paste the same "Lorem ipsum" text as the password twice and you'll see the password mask characters intermix with the output:

% go run testsurvey.go
? Password? ****************************************************************************************************************************************************************************************************************************************************************************
************************************************************************************************************************************************************************************************************************************************************Lorem ipsum do
lor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
 voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab
ore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint o
ccaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exe
rcitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit a
nim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
 aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.*********
**********************************************************************
AlecAivazis commented 3 years ago

I suspect this is now fixed with #321 - mind testing it again?

AlecAivazis commented 3 years ago

I'm going to close this since it has gone stale. Feel free to let me know if its still a problem and i'll reopen the issue

kgibm commented 3 years ago

Worked, thanks! I'll let the OpenShift folks know.

AlecAivazis commented 3 years ago

sweet! thanks for checking