65c4ea6a15
Added structs for whois calls. Added ability to write WhoIs to file. Added structured output for Whois Records. Added String Method for WhoIsRecord and WhoIsHistory Records.
127 lines
3.5 KiB
Go
127 lines
3.5 KiB
Go
package cmd
|
|
|
|
import (
|
|
"dehasher/internal/badger"
|
|
"fmt"
|
|
"github.com/spf13/cobra"
|
|
"go.uber.org/zap"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
// Global Flags
|
|
debugGlobal bool
|
|
|
|
// rootCmd is the base command for the CLI.
|
|
rootCmd = &cobra.Command{
|
|
Use: "dehasher",
|
|
Short: `Dehasher is a cli tool for querying query.`,
|
|
Long: fmt.Sprintf(
|
|
"%s\n%s",
|
|
`
|
|
______ _______ _______ _______ _______ _______
|
|
( __ \ ( ____ \|\ /|( ___ )( ____ \|\ /|( ____ \( ____ )
|
|
| ( \ )| ( \/| ) ( || ( ) || ( \/| ) ( || ( \/| ( )|
|
|
| | ) || (__ | (___) || (___) || (_____ | (___) || (__ | (____)|
|
|
| | | || __) | ___ || ___ |(_____ )| ___ || __) | __)
|
|
| | ) || ( | ( ) || ( ) | ) || ( ) || ( | (\ (
|
|
| (__/ )| (____/\| ) ( || ) ( |/\____) || ) ( || (____/\| ) \ \__
|
|
(______/ (_______/|/ \||/ \|\_______)|/ \|(_______/|/ \__/
|
|
An Ar1ste1a Project
|
|
`,
|
|
`––•–√\/––√\/––•––––•–√\/––√\/––•––––•–√\/––√\/––•––√\/––•––––•–√\/––√\/––•––
|
|
Dehasher can query the query API for:
|
|
- Emails - Usernames - Password
|
|
- Hashes - IP Addresses - Names
|
|
- VINs - License Plates - Addresses
|
|
- Phones - Social Media - Crypto Currency Addresses
|
|
Dehasher supports:
|
|
- Regex Matching
|
|
- Exact Matching
|
|
––•–√\/––√\/––•––––•–√\/––√\/––•––––•–√\/––√\/––•––√\/––•––––•–√\/––√\/––•––
|
|
`,
|
|
),
|
|
Version: "v1.0",
|
|
}
|
|
)
|
|
|
|
// Execute adds all child commands to the root command and sets flags appropriately.
|
|
func Execute() {
|
|
if err := rootCmd.Execute(); err != nil {
|
|
zap.L().Fatal("execute_root_command",
|
|
zap.String("message", "failed to execute root command"),
|
|
zap.Error(err),
|
|
)
|
|
fmt.Printf("[!] %v", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
// Hide the default help command
|
|
rootCmd.CompletionOptions.HiddenDefaultCmd = true
|
|
|
|
// Add global flags
|
|
rootCmd.PersistentFlags().BoolVar(&debugGlobal, "debug", false, "Show debugGlobal information")
|
|
|
|
// Add subcommands
|
|
rootCmd.AddCommand(setKeyCmd)
|
|
rootCmd.AddCommand(setLocalDb)
|
|
}
|
|
|
|
// Command to set API key
|
|
var setKeyCmd = &cobra.Command{
|
|
Use: "set-key [key]",
|
|
Short: "Set and store API key",
|
|
Args: cobra.ExactArgs(1),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
key := args[0]
|
|
// Store key in badger DB
|
|
err := storeApiKey(key)
|
|
if err != nil {
|
|
fmt.Printf("Error storing API key: %v\n", err)
|
|
return
|
|
}
|
|
fmt.Println("API key stored successfully")
|
|
},
|
|
}
|
|
|
|
var setLocalDb = &cobra.Command{
|
|
Use: "local-db [true|false]",
|
|
Short: "Set dehasher to use a local database path instead of the default path",
|
|
Args: cobra.ExactArgs(1),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
var useLocalDatabase bool
|
|
|
|
useLocal := strings.ToLower(args[0])
|
|
|
|
if useLocal == "true" {
|
|
useLocalDatabase = true
|
|
} else if useLocal == "false" {
|
|
useLocalDatabase = false
|
|
} else {
|
|
fmt.Println("Invalid argument. Please use 'true' or 'false'.")
|
|
return
|
|
}
|
|
|
|
// Store useLocal in badger DB
|
|
err := badger.StoreUseLocalDB(useLocalDatabase)
|
|
if err != nil {
|
|
fmt.Printf("Error storing local database useLocal: %v\n", err)
|
|
return
|
|
}
|
|
fmt.Println("Local database useLocal stored successfully")
|
|
},
|
|
}
|
|
|
|
// Helper functions to store API credentials
|
|
func storeApiKey(key string) error {
|
|
err := badger.StoreKey(key)
|
|
if err != nil {
|
|
fmt.Printf("Error storing API key: %v\n", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|