mirror of
https://github.com/trufflesecurity/trufflehog.git
synced 2024-11-10 07:04:24 +00:00
Add elasticsearch to tui (#2915)
Co-authored-by: mcastorina <m.castorina93@gmail.com>
This commit is contained in:
parent
96a1eda308
commit
3d7f9d96f1
3 changed files with 122 additions and 0 deletions
|
@ -65,6 +65,7 @@ func New(c common.Common) *SourceSelect {
|
|||
OssItem("Git", "Scan git repositories."),
|
||||
OssItem("GitHub", "Scan GitHub repositories and/or organizations."),
|
||||
OssItem("Filesystem", "Scan your filesystem by selecting what directories to scan."),
|
||||
OssItem("Elasticsearch", "Scan your Elasticsearch cluster or Elastic Cloud instance."),
|
||||
OssItem("Postman", "Scan a collection, workspace, or environment from Postman, the API platform."),
|
||||
OssItem("GitLab", "Scan GitLab repositories."),
|
||||
OssItem("AWS S3", "Scan Amazon S3 buckets."),
|
||||
|
|
116
pkg/tui/sources/elasticsearch/elasticsearch.go
Normal file
116
pkg/tui/sources/elasticsearch/elasticsearch.go
Normal file
|
@ -0,0 +1,116 @@
|
|||
package elasticsearch
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/trufflesecurity/trufflehog/v3/pkg/tui/common"
|
||||
"github.com/trufflesecurity/trufflehog/v3/pkg/tui/components/textinputs"
|
||||
)
|
||||
|
||||
type elasticSearchCmdModel struct {
|
||||
textinputs.Model
|
||||
}
|
||||
|
||||
func GetNote() string {
|
||||
return "To connect to a local cluster, please provide the node IPs and either (username AND password) OR service token. ⭐\n⭐ To connect to a cloud cluster, please provide cloud ID AND API key."
|
||||
}
|
||||
|
||||
func GetFields() elasticSearchCmdModel {
|
||||
return elasticSearchCmdModel{textinputs.New([]textinputs.InputConfig{
|
||||
{
|
||||
Label: "Elastic node(s)",
|
||||
Key: "nodes",
|
||||
Required: false,
|
||||
Help: "Elastic node IPs - for scanning local clusters. Separate by space if multiple.",
|
||||
},
|
||||
{
|
||||
Label: "Username",
|
||||
Key: "username",
|
||||
Required: false,
|
||||
Help: "Elasticsearch username. Pairs with password. For scanning local clusters.",
|
||||
},
|
||||
{
|
||||
Label: "Password",
|
||||
Key: "password",
|
||||
Required: false,
|
||||
Help: "Elasticsearch password. Pairs with username. For scanning local clusters.",
|
||||
},
|
||||
{
|
||||
Label: "Service Token",
|
||||
Key: "serviceToken",
|
||||
Required: false,
|
||||
Help: "Elastic service token. For scanning local clusters.",
|
||||
},
|
||||
{
|
||||
Label: "Cloud ID",
|
||||
Key: "cloudId",
|
||||
Required: false,
|
||||
Help: "Elastic cloud ID. Pairs with API key. For scanning cloud clusters.",
|
||||
},
|
||||
{
|
||||
Label: "API Key",
|
||||
Key: "apiKey",
|
||||
Required: false,
|
||||
Help: "Elastic API key. Pairs with cloud ID. For scanning cloud clusters.",
|
||||
}})}
|
||||
}
|
||||
|
||||
func findFirstNonEmptyKey(inputs map[string]textinputs.Input, keys []string) string {
|
||||
for _, key := range keys {
|
||||
if val, ok := inputs[key]; ok && val.Value != "" {
|
||||
return key
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func getConnectionKeys(inputs map[string]textinputs.Input) []string {
|
||||
keys := []string{"username", "password", "serviceToken", "cloudId", "apiKey"}
|
||||
key := findFirstNonEmptyKey(inputs, keys)
|
||||
|
||||
keyMap := map[string][]string{
|
||||
"username": {"username", "password", "nodes"},
|
||||
"password": {"username", "password", "nodes"},
|
||||
"serviceToken": {"serviceToken", "nodes"},
|
||||
"cloudId": {"cloudId", "apiKey"},
|
||||
"apiKey": {"cloudId", "apiKey"},
|
||||
}
|
||||
|
||||
if val, ok := keyMap[key]; ok {
|
||||
return val
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m elasticSearchCmdModel) Cmd() string {
|
||||
var command []string
|
||||
command = append(command, "trufflehog", "elasticsearch")
|
||||
inputs := m.GetInputs()
|
||||
|
||||
for _, key := range getConnectionKeys(inputs) {
|
||||
val, ok := inputs[key]
|
||||
if !ok || val.Value == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
if key == "nodes" {
|
||||
nodes := strings.Fields(val.Value)
|
||||
for _, node := range nodes {
|
||||
command = append(command, "--nodes="+node)
|
||||
}
|
||||
} else {
|
||||
command = append(command, "--"+key+"="+val.Value)
|
||||
}
|
||||
}
|
||||
|
||||
return strings.Join(command, " ")
|
||||
}
|
||||
|
||||
func (m elasticSearchCmdModel) Summary() string {
|
||||
inputs := m.GetInputs()
|
||||
labels := m.GetLabels()
|
||||
|
||||
summaryKeys := getConnectionKeys(inputs)
|
||||
return common.SummarizeSource(summaryKeys, inputs, labels)
|
||||
}
|
|
@ -6,6 +6,7 @@ import (
|
|||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/trufflesecurity/trufflehog/v3/pkg/tui/sources/circleci"
|
||||
"github.com/trufflesecurity/trufflehog/v3/pkg/tui/sources/docker"
|
||||
"github.com/trufflesecurity/trufflehog/v3/pkg/tui/sources/elasticsearch"
|
||||
"github.com/trufflesecurity/trufflehog/v3/pkg/tui/sources/filesystem"
|
||||
"github.com/trufflesecurity/trufflehog/v3/pkg/tui/sources/gcs"
|
||||
"github.com/trufflesecurity/trufflehog/v3/pkg/tui/sources/git"
|
||||
|
@ -23,6 +24,8 @@ func GetSourceNotes(sourceName string) string {
|
|||
return github.GetNote()
|
||||
case "postman":
|
||||
return postman.GetNote()
|
||||
case "elasticsearch":
|
||||
return elasticsearch.GetNote()
|
||||
|
||||
default:
|
||||
return ""
|
||||
|
@ -45,6 +48,8 @@ func GetSourceFields(sourceName string) CmdModel {
|
|||
return circleci.GetFields()
|
||||
case "docker":
|
||||
return docker.GetFields()
|
||||
case "elasticsearch":
|
||||
return elasticsearch.GetFields()
|
||||
case "filesystem":
|
||||
return filesystem.GetFields()
|
||||
case "gcs (google cloud storage)":
|
||||
|
|
Loading…
Reference in a new issue