openURL opens the provided URL via user's default browser
(inv *serpent.Invocation, urlToOpen string)
| 546 | |
| 547 | // openURL opens the provided URL via user's default browser |
| 548 | func openURL(inv *serpent.Invocation, urlToOpen string) error { |
| 549 | if !isTTYOut(inv) { |
| 550 | return xerrors.New("skipping browser open in non-interactive mode") |
| 551 | } |
| 552 | noOpen, err := inv.ParsedFlags().GetBool(varNoOpen) |
| 553 | if err != nil { |
| 554 | panic(err) |
| 555 | } |
| 556 | if noOpen { |
| 557 | return xerrors.New("opening is blocked") |
| 558 | } |
| 559 | wsl, err := isWSL() |
| 560 | if err != nil { |
| 561 | return xerrors.Errorf("test running Windows Subsystem for Linux: %w", err) |
| 562 | } |
| 563 | |
| 564 | if wsl { |
| 565 | // #nosec |
| 566 | return exec.Command("cmd.exe", "/c", "start", strings.ReplaceAll(urlToOpen, "&", "^&")).Start() |
| 567 | } |
| 568 | |
| 569 | browserEnv := os.Getenv("BROWSER") |
| 570 | if browserEnv != "" { |
| 571 | browserSh := fmt.Sprintf("%s '%s'", browserEnv, urlToOpen) |
| 572 | cmd := exec.CommandContext(inv.Context(), "sh", "-c", browserSh) |
| 573 | out, err := cmd.CombinedOutput() |
| 574 | if err != nil { |
| 575 | return xerrors.Errorf("failed to run %v (out: %q): %w", cmd.Args, out, err) |
| 576 | } |
| 577 | return nil |
| 578 | } |
| 579 | |
| 580 | return browser.OpenURL(urlToOpen) |
| 581 | } |
| 582 | |
| 583 | func promptTrialInfo(inv *serpent.Invocation, fieldName string) (string, error) { |
| 584 | value, err := cliui.Prompt(inv, cliui.PromptOptions{ |