bridge/core: add tokenStdin field to bridgeParams

Amine Hilaly created

commands: move tokenStdin handling logic to bridge.Configure

Change summary

bridge/core/bridge.go        |  9 +++++----
bridge/github/config.go      |  9 ++++++++-
bridge/gitlab/config.go      |  9 ++++++++-
commands/bridge_configure.go | 16 +++-------------
4 files changed, 24 insertions(+), 19 deletions(-)

Detailed changes

bridge/core/bridge.go 🔗

@@ -31,10 +31,11 @@ var bridgeImpl map[string]reflect.Type
 // BridgeParams holds parameters to simplify the bridge configuration without
 // having to make terminal prompts.
 type BridgeParams struct {
-	Owner   string
-	Project string
-	URL     string
-	Token   string
+	Owner      string
+	Project    string
+	URL        string
+	Token      string
+	TokenStdin bool
 }
 
 // Bridge is a wrapper around a BridgeImpl that will bind low-level

bridge/github/config.go 🔗

@@ -45,7 +45,7 @@ func (g *Github) Configure(repo repository.RepoCommon, params core.BridgeParams)
 	var owner string
 	var project string
 
-	if params.Token != "" &&
+	if (params.Token != "" || params.TokenStdin) &&
 		(params.URL == "" && (params.Project == "" || params.Owner == "")) {
 		return nil, fmt.Errorf("you must provide a project URL or Owner/Name to configure this bridge with a token")
 	}
@@ -91,6 +91,13 @@ func (g *Github) Configure(repo repository.RepoCommon, params core.BridgeParams)
 	if params.Token != "" {
 		token = params.Token
 
+	} else if params.TokenStdin {
+		reader := bufio.NewReader(os.Stdin)
+		token, err = reader.ReadString('\n')
+		if err != nil {
+			return nil, fmt.Errorf("reading from stdin: %v", err)
+		}
+		token = strings.TrimSuffix(token, "\n")
 	} else {
 		token, err = promptTokenOptions(owner, project)
 		if err != nil {

bridge/gitlab/config.go 🔗

@@ -33,7 +33,7 @@ func (g *Gitlab) Configure(repo repository.RepoCommon, params core.BridgeParams)
 	var url string
 	var token string
 
-	if params.Token != "" && params.URL == "" {
+	if (params.Token != "" || params.TokenStdin) && params.URL == "" {
 		return nil, fmt.Errorf("you must provide a project URL to configure this bridge with a token")
 	}
 
@@ -58,6 +58,13 @@ func (g *Gitlab) Configure(repo repository.RepoCommon, params core.BridgeParams)
 	// get user token
 	if params.Token != "" {
 		token = params.Token
+	} else if params.TokenStdin {
+		reader := bufio.NewReader(os.Stdin)
+		token, err = reader.ReadString('\n')
+		if err != nil {
+			return nil, fmt.Errorf("reading from stdin: %v", err)
+		}
+		token = strings.TrimSuffix(token, "\n")
 	} else {
 		token, err = promptToken()
 		if err != nil {

commands/bridge_configure.go 🔗

@@ -21,7 +21,6 @@ const (
 )
 
 var (
-	tokenStdin            bool
 	bridgeConfigureName   string
 	bridgeConfigureTarget string
 	bridgeParams          core.BridgeParams
@@ -35,8 +34,8 @@ func runBridgeConfigure(cmd *cobra.Command, args []string) error {
 	defer backend.Close()
 	interrupt.RegisterCleaner(backend.Close)
 
-	if (tokenStdin || bridgeParams.Token != "") && (bridgeConfigureName == "" || bridgeConfigureTarget == "") {
-		return fmt.Errorf("you must bridge name and target to configure a bridge with a token")
+	if (bridgeParams.TokenStdin || bridgeParams.Token != "") && (bridgeConfigureName == "" || bridgeConfigureTarget == "") {
+		return fmt.Errorf("you must provide a bridge name and target to configure a bridge with a token")
 	}
 
 	if bridgeConfigureTarget == "" {
@@ -58,15 +57,6 @@ func runBridgeConfigure(cmd *cobra.Command, args []string) error {
 		return err
 	}
 
-	if tokenStdin {
-		reader := bufio.NewReader(os.Stdin)
-		token, err := reader.ReadString('\n')
-		if err != nil {
-			return fmt.Errorf("reading from stdin: %v", err)
-		}
-		bridgeParams.Token = strings.TrimSuffix(token, "\n")
-	}
-
 	err = b.Configure(bridgeParams)
 	if err != nil {
 		return err
@@ -195,7 +185,7 @@ func init() {
 	bridgeConfigureCmd.Flags().StringVarP(&bridgeParams.URL, "url", "u", "", "The URL of the target repository")
 	bridgeConfigureCmd.Flags().StringVarP(&bridgeParams.Owner, "owner", "o", "", "The owner of the target repository")
 	bridgeConfigureCmd.Flags().StringVarP(&bridgeParams.Token, "token", "T", "", "The authentication token for the API")
-	bridgeConfigureCmd.Flags().BoolVar(&tokenStdin, "token-stdin", false, "Will read the token from stdin and ignore --token")
+	bridgeConfigureCmd.Flags().BoolVar(&bridgeParams.TokenStdin, "token-stdin", false, "Will read the token from stdin and ignore --token")
 	bridgeConfigureCmd.Flags().StringVarP(&bridgeParams.Project, "project", "p", "", "The name of the target repository")
 	bridgeConfigureCmd.Flags().SortFlags = false
 }