2024-06-12 14:26:50 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2024-11-21 12:30:16 +01:00
|
|
|
"flag"
|
|
|
|
"os"
|
2024-08-08 13:35:50 +02:00
|
|
|
"time"
|
2024-06-12 14:26:50 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
type Config struct {
|
2024-10-13 00:04:46 +02:00
|
|
|
Port int
|
|
|
|
AuthCode string
|
|
|
|
PeerID string
|
|
|
|
Peers []string
|
|
|
|
Domain string
|
|
|
|
NodesEnabled bool
|
|
|
|
CrawlerEnabled bool
|
|
|
|
WebsiteEnabled bool
|
|
|
|
LogLevel int
|
|
|
|
HardCacheDuration time.Duration
|
2024-10-14 22:15:38 +02:00
|
|
|
HardCacheEnabled bool
|
2024-06-12 14:26:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
var defaultConfig = Config{
|
2024-10-13 00:04:46 +02:00
|
|
|
Port: 5000,
|
|
|
|
Domain: "localhost",
|
|
|
|
Peers: []string{},
|
|
|
|
AuthCode: generateStrongRandomString(64),
|
|
|
|
NodesEnabled: true,
|
|
|
|
CrawlerEnabled: true,
|
|
|
|
WebsiteEnabled: true,
|
|
|
|
LogLevel: 1,
|
|
|
|
HardCacheDuration: 0,
|
2024-06-12 14:26:50 +02:00
|
|
|
}
|
|
|
|
|
2024-08-08 15:03:33 +02:00
|
|
|
const configFilePath = "config.ini"
|
2024-06-12 14:26:50 +02:00
|
|
|
|
2024-07-05 03:08:35 +02:00
|
|
|
var config Config
|
|
|
|
|
2024-06-12 14:26:50 +02:00
|
|
|
func main() {
|
2024-11-21 12:30:16 +01:00
|
|
|
// Command-line flags
|
|
|
|
portFlag := flag.Int("port", 0, "Port number to run the application (overrides config)")
|
|
|
|
domainFlag := flag.String("domain", "", "Domain address for the application (overrides config)")
|
|
|
|
skipConfigFlag := flag.Bool("skip-config-check", false, "Skip interactive prompts and load config.ini")
|
|
|
|
|
|
|
|
// Parse command-line flags
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
if *skipConfigFlag {
|
|
|
|
// Skip interactive configuration
|
|
|
|
if _, err := os.Stat(configFilePath); err == nil {
|
|
|
|
// Load from config file if it exists
|
|
|
|
config = loadConfig()
|
|
|
|
} else {
|
|
|
|
// Use defaults if config file does not exist
|
|
|
|
config = defaultConfig
|
|
|
|
saveConfig(config) // Save the defaults to config.ini
|
|
|
|
printInfo("Configuration saved to %s", configFilePath)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// Initialize configuration interactively or from config file
|
|
|
|
err := initConfig()
|
|
|
|
if err != nil {
|
|
|
|
printErr("Error during initialization:")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Override with command-line arguments if provided
|
|
|
|
if *portFlag != 0 {
|
|
|
|
config.Port = *portFlag
|
|
|
|
}
|
|
|
|
if *domainFlag != "" {
|
|
|
|
config.Domain = *domainFlag
|
2024-06-12 14:26:50 +02:00
|
|
|
}
|
|
|
|
|
2024-06-30 23:20:52 +02:00
|
|
|
loadNodeConfig()
|
2024-07-05 03:08:35 +02:00
|
|
|
|
|
|
|
if config.AuthCode == "" {
|
|
|
|
config.AuthCode = generateStrongRandomString(64)
|
2024-08-10 13:27:23 +02:00
|
|
|
printInfo("Generated connection code: %s\n", config.AuthCode)
|
2024-07-05 03:08:35 +02:00
|
|
|
saveConfig(config)
|
|
|
|
}
|
|
|
|
|
2024-08-08 13:44:13 +02:00
|
|
|
// Generate Host ID
|
|
|
|
hostID, nodeErr := generateHostID()
|
2024-08-08 13:35:50 +02:00
|
|
|
if nodeErr != nil {
|
2024-08-10 13:27:23 +02:00
|
|
|
printErr("Failed to generate host ID: %v", nodeErr)
|
2024-08-08 13:35:50 +02:00
|
|
|
}
|
2024-08-08 13:44:13 +02:00
|
|
|
config.PeerID = hostID
|
2024-08-08 13:35:50 +02:00
|
|
|
|
2024-10-25 13:54:29 +02:00
|
|
|
InitializeLanguage("en") // Initialize language before generating OpenSearch
|
2024-10-16 22:51:13 +02:00
|
|
|
generateOpenSearchXML(config)
|
|
|
|
|
2024-08-08 13:35:50 +02:00
|
|
|
go startNodeClient()
|
|
|
|
|
2024-06-12 14:26:50 +02:00
|
|
|
runServer()
|
|
|
|
}
|