()
| 12 | var verbose bool |
| 13 | |
| 14 | func rootCmd() *cobra.Command { |
| 15 | root := &cobra.Command{ |
| 16 | Use: "hack-browser-data", |
| 17 | Short: "A CLI tool for decrypting and exporting browser data", |
| 18 | Long: `hack-browser-data decrypts and exports browser data from Chromium-based |
| 19 | browsers and Firefox on Windows, macOS, and Linux. |
| 20 | |
| 21 | GitHub: https://github.com/moonD4rk/HackBrowserData`, |
| 22 | PersistentPreRun: func(cmd *cobra.Command, args []string) { |
| 23 | if verbose { |
| 24 | log.SetVerbose() |
| 25 | } |
| 26 | }, |
| 27 | } |
| 28 | |
| 29 | root.CompletionOptions.HiddenDefaultCmd = true |
| 30 | |
| 31 | root.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "enable debug logging") |
| 32 | |
| 33 | dump := dumpCmd() |
| 34 | root.AddCommand(dump, dumpKeysCmd(), archiveCmd(), restoreCmd(), listCmd(), versionCmd()) |
| 35 | |
| 36 | // Default to dump when no subcommand is given. |
| 37 | // Copy dump flags to root so that `hack-browser-data -b chrome` |
| 38 | // works the same as `hack-browser-data dump -b chrome`. |
| 39 | root.RunE = func(cmd *cobra.Command, args []string) error { |
| 40 | return dump.RunE(dump, args) |
| 41 | } |
| 42 | dump.Flags().VisitAll(func(f *pflag.Flag) { |
| 43 | if root.Flags().Lookup(f.Name) == nil { |
| 44 | root.Flags().AddFlag(f) |
| 45 | } |
| 46 | }) |
| 47 | |
| 48 | return root |
| 49 | } |
| 50 | |
| 51 | func main() { |
| 52 | configureDoubleClickMode() |
no test coverage detected