164 lines
4.4 KiB
Go
164 lines
4.4 KiB
Go
package cmd
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
"strings"
|
||
|
||
"github.com/fatih/color"
|
||
"github.com/spf13/cobra"
|
||
"go.uber.org/zap"
|
||
"hub.krkn.tech/KrakenTech/crowsnest/internal/badger"
|
||
)
|
||
|
||
var (
|
||
// Global Flags
|
||
debugGlobal bool
|
||
|
||
// rootCmd is the base command for the CLI.
|
||
rootCmd = &cobra.Command{
|
||
Use: "crowsnest",
|
||
Short: `CrowsNest is a cli tool for querying the common OSINT api's.`,
|
||
Long: fmt.Sprintf(
|
||
"%s\n",
|
||
`
|
||
╔═╗┬─┐┌─┐┬ ┬┌─┐╔╗╔┌─┐┌─┐┌┬┐
|
||
║ ├┬┘│ ││││└─┐║║║├┤ └─┐ │
|
||
╚═╝┴└─└─┘└┴┘└─┘╝╚╝└─┘└─┘ ┴
|
||
|
||
Crow’s Nest OSINT Recon Suite
|
||
⚓ A KrakenTech Intelligence Tool
|
||
`,
|
||
),
|
||
Version: "v1.2.1",
|
||
}
|
||
)
|
||
|
||
// 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 debug information")
|
||
|
||
// Add subcommands
|
||
rootCmd.AddCommand(setCmd)
|
||
rootCmd.AddCommand(setLocalDb)
|
||
rootCmd.AddCommand(buyMeCoffeeCmd)
|
||
|
||
setCmd.AddCommand(setDehashedKeyCmd)
|
||
setCmd.AddCommand(setHunterKeyCmd)
|
||
}
|
||
|
||
var setCmd = &cobra.Command{
|
||
Use: "set",
|
||
Short: "Set CrowsNest configuration values",
|
||
Long: "Set CrowsNest configuration values such as API keys.",
|
||
}
|
||
|
||
// Command to set API key
|
||
var setDehashedKeyCmd = &cobra.Command{
|
||
Use: "dehashed [key]",
|
||
Short: "Set and store Dehashed.com API key",
|
||
Args: cobra.ExactArgs(1),
|
||
Run: func(cmd *cobra.Command, args []string) {
|
||
key := args[0]
|
||
// Store key in badger DB
|
||
err := storeDehashedApiKey(key)
|
||
if err != nil {
|
||
fmt.Printf("Error storing Dehashed API key: %v\n", err)
|
||
return
|
||
}
|
||
fmt.Println("API key stored successfully")
|
||
},
|
||
}
|
||
|
||
var setHunterKeyCmd = &cobra.Command{
|
||
Use: "hunter [key]",
|
||
Short: "Set and store Hunter.io API key",
|
||
Args: cobra.ExactArgs(1),
|
||
Run: func(cmd *cobra.Command, args []string) {
|
||
key := args[0]
|
||
// Store key in badger DB
|
||
err := storeHunterApiKey(key)
|
||
if err != nil {
|
||
fmt.Printf("Error storing Hunter API key: %v\n", err)
|
||
return
|
||
}
|
||
fmt.Println("API key stored successfully")
|
||
},
|
||
}
|
||
|
||
var setLocalDb = &cobra.Command{
|
||
Use: "local-db [true|false]",
|
||
Short: "Set crowsnest 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")
|
||
},
|
||
}
|
||
|
||
var buyMeCoffeeCmd = &cobra.Command{
|
||
Use: "coffee",
|
||
Short: "Support the project by buying a coffee",
|
||
Run: func(cmd *cobra.Command, args []string) {
|
||
fmt.Println(color.HiRedString(" ;)(; "))
|
||
fmt.Println(color.HiCyanString(" We Hope You Enjoy Our Product :----:"))
|
||
fmt.Println(color.HiCyanString(" C|====|"))
|
||
fmt.Println(color.HiCyanString(" | |"))
|
||
fmt.Print(color.HiGreenString(" Support the project by buying a coffee: "))
|
||
fmt.Print(color.BlueString("https://buymeacoffee.com/ehosinskiz "))
|
||
fmt.Println(color.HiCyanString("`----'"))
|
||
},
|
||
}
|
||
|
||
// Helper functions to store API credentials
|
||
func storeDehashedApiKey(key string) error {
|
||
err := badger.StoreDehashedKey(key)
|
||
if err != nil {
|
||
fmt.Printf("Error storing API key: %v\n", err)
|
||
return err
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func storeHunterApiKey(key string) error {
|
||
err := badger.StoreHunterKey(key)
|
||
if err != nil {
|
||
fmt.Printf("Error storing API key: %v\n", err)
|
||
return err
|
||
}
|
||
return nil
|
||
}
|