132 lines
3.8 KiB
Go
132 lines
3.8 KiB
Go
package server
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
github_recon_settings "github.com/anotherhadi/github-recon/settings"
|
|
)
|
|
|
|
type ServerSettings struct {
|
|
Port int `json:"-"` // Port to run the server on
|
|
Debug bool
|
|
Password string `json:"-"` // Do not expose the password in JSON
|
|
MinimumQueryLength int
|
|
MaxCacheDuration time.Duration // Delete a search from the cache after this duration
|
|
|
|
// Dataleaks
|
|
Folders []string // Folders to search in for parquets, recursive
|
|
CacheFolder string
|
|
BaseColumns []string // Use these columns when column="all"
|
|
Limit int // Limit number of rows returned
|
|
ReloadDataleaksInterval time.Duration // Reload dataleaks files from disk every X
|
|
|
|
// OSINT Tools
|
|
GithubRecon bool // Activate github-recon OSINT tool
|
|
GithubToken string `json:"-"` // Github token for github-recon
|
|
GithubTokenLoaded bool
|
|
GithubDeepMode bool // Deep mode for github-recon
|
|
GravatarRecon bool // Activate gravatar-recon OSINT tool
|
|
}
|
|
|
|
func LoadServerSettings() ServerSettings {
|
|
ss := ServerSettings{
|
|
Port: getEnvPortOrDefault("PORT", 9198),
|
|
Debug: getEnvBoolOrDefault("DEBUG", false),
|
|
Password: getEnvStringOrDefault("PASSWORD", ""),
|
|
MinimumQueryLength: getEnvIntOrDefault("MINIMUM_QUERY_LENGTH", 3),
|
|
MaxCacheDuration: getEnvDurationOrDefault("MAX_CACHE_DURATION", 24*time.Hour),
|
|
|
|
// Dataleaks
|
|
Folders: getEnvStringListOrDefault("DATALEAKS_FOLDERS", []string{}),
|
|
CacheFolder: getEnvStringOrDefault("DATALEAKS_CACHE_FOLDER", ""),
|
|
BaseColumns: getEnvStringListOrDefault("BASE_COLUMNS", []string{"email", "username", "password", "full_name", "phone", "url"}),
|
|
Limit: getEnvIntOrDefault("LIMIT", 200),
|
|
ReloadDataleaksInterval: getEnvDurationOrDefault("RELOAD_DATALEAKS_INTERVAL", 20*time.Minute),
|
|
|
|
// OSINT Tools
|
|
GithubRecon: getEnvBoolOrDefault("GITHUB_RECON", true),
|
|
GithubToken: getEnvStringOrDefault("GITHUB_TOKEN", "null"),
|
|
GithubDeepMode: getEnvBoolOrDefault("GITHUB_DEEP_MODE", false),
|
|
GravatarRecon: getEnvBoolOrDefault("GRAVATAR_RECON", true),
|
|
}
|
|
|
|
if ss.GithubToken == "null" || strings.TrimSpace(ss.GithubToken) == "" {
|
|
ss.GithubToken = github_recon_settings.GetToken()
|
|
}
|
|
|
|
if ss.GithubToken != "null" && strings.TrimSpace(ss.GithubToken) != "" {
|
|
ss.GithubTokenLoaded = true
|
|
}
|
|
|
|
return ss
|
|
}
|
|
|
|
func getEnvStringOrDefault(envKey, defaultValue string) string {
|
|
value := strings.TrimSpace(os.Getenv(envKey))
|
|
if value == "" {
|
|
return defaultValue
|
|
}
|
|
return value
|
|
}
|
|
|
|
func getEnvBoolOrDefault(envKey string, defaultValue bool) bool {
|
|
value := strings.TrimSpace(os.Getenv(envKey))
|
|
if value == "" {
|
|
return defaultValue
|
|
}
|
|
value = strings.ToLower(value)
|
|
if value == "true" || value == "1" {
|
|
return true
|
|
} else if value == "false" || value == "0" {
|
|
return false
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
func getEnvDurationOrDefault(envKey string, defaultValue time.Duration) time.Duration {
|
|
v := getEnvStringOrDefault(envKey, "")
|
|
if v == "" {
|
|
return defaultValue
|
|
}
|
|
t, err := time.ParseDuration(v)
|
|
if err != nil {
|
|
return defaultValue
|
|
}
|
|
return t
|
|
}
|
|
|
|
func getEnvStringListOrDefault(envKey string, defaultValue []string) []string {
|
|
value := strings.TrimSpace(os.Getenv(envKey))
|
|
if value == "" {
|
|
return defaultValue
|
|
}
|
|
l := strings.Split(value, ",")
|
|
for i := range l {
|
|
l[i] = strings.TrimSpace(l[i])
|
|
}
|
|
return l
|
|
}
|
|
|
|
func getEnvIntOrDefault(envKey string, defaultValue int) int {
|
|
value := strings.TrimSpace(os.Getenv(envKey))
|
|
if value == "" {
|
|
return defaultValue
|
|
}
|
|
i, err := strconv.Atoi(value)
|
|
if err != nil {
|
|
return defaultValue
|
|
}
|
|
return i
|
|
}
|
|
|
|
func getEnvPortOrDefault(envKey string, defaultValue int) int {
|
|
p := getEnvIntOrDefault(envKey, defaultValue)
|
|
if p <= 0 || p >= 65534 {
|
|
return defaultValue
|
|
}
|
|
return p
|
|
}
|