gitlin/cmd/gothub/setup.go

158 行
4.4 KiB
Go

package gothub
import (
"fmt"
"os"
"github.com/spf13/cobra"
)
var setupCmd = &cobra.Command{
Use: "setup",
Short: "Interactive GotHub instance setup wizard",
Long: `This command allows you to setup your GotHub instance in an interactive way. It will ask you a few questions and then set environment variables for you.`,
Run: func(cmd *cobra.Command, args []string) {
setup()
},
}
func init() {
rootCmd.AddCommand(setupCmd)
}
type Vars struct {
IPLogging bool
URLLogging bool
UserAgentLogging bool
DiagnosticLogging bool
PrivacyPolicy string
InstanceCountry string
InstanceProvider string
CloudflareStatus string
}
func setup() {
fmt.Println("GotHub setup wizard")
fmt.Println("This wizard will help you setup your GotHub instance.")
// Docker check
if os.Getenv("DOCKER") == "true" {
fmt.Println("You are running GotHub in Docker. This wizard will not work in Docker. Please set the environment variables manually.")
os.Exit(1)
}
// set up variables
vars := Vars{}
// ask user for information about IP logging
fmt.Print("Do you log IP addresses of users? (y/n) ")
var ipLogging string
fmt.Scanln(&ipLogging)
if ipLogging == "y" {
// create environment variable
vars.IPLogging = true
} else {
// create environment variable
vars.IPLogging = false
}
// ask user for information about URL request logging
fmt.Print("Do you log URL requests of users? (y/n) ")
var urlLogging string
fmt.Scanln(&urlLogging)
if urlLogging == "y" {
vars.URLLogging = true
} else {
vars.URLLogging = false
}
// ask user for information about User-Agent logging
fmt.Print("Do you log your users User-Agent? (y/n) ")
var uaLogging string
fmt.Scanln(&uaLogging)
if uaLogging == "y" {
vars.UserAgentLogging = true
} else {
vars.UserAgentLogging = false
}
// ask user for information about diagnostic information logging
fmt.Print("Do you log diagnostic information? (y/n) ")
var diagLogging string
fmt.Scanln(&diagLogging)
if diagLogging == "y" {
vars.DiagnosticLogging = true
} else {
vars.DiagnosticLogging = false
}
// ask user about privacy policy
fmt.Print("Do you have a privacy policy? (y/n) ")
var privacyPolicy string
fmt.Scanln(&privacyPolicy)
if privacyPolicy == "y" {
// ask user for privacy policy URL
fmt.Print("Please enter the URL of your privacy policy. ")
var privacyPolicyURL string
fmt.Scanln(&privacyPolicyURL)
vars.PrivacyPolicy = privacyPolicyURL
} else {
vars.PrivacyPolicy = ""
}
// ask user about the country they're hosting from
fmt.Print("Please enter the country you're hosting from. ")
var country string
fmt.Scanln(&country)
if country != "" {
vars.InstanceCountry = country
} else {
vars.InstanceCountry = ""
}
// ask user about their ISP/Hosting provider
fmt.Print("Please enter your ISP/Hosting provider. ")
var isp string
fmt.Scanln(&isp)
if isp != "" {
vars.InstanceProvider = isp
} else {
vars.InstanceProvider = ""
}
// ask user about Cloudflare status
fmt.Print("Are you using Cloudflare? (y/n) ")
var cloudflare string
fmt.Scanln(&cloudflare)
if cloudflare == "y" {
vars.CloudflareStatus = "true"
} else {
vars.CloudflareStatus = "false"
}
// save to .env file
fmt.Println("Saving environment variables to .env file...")
f, err := os.Create(".env")
if err != nil {
fmt.Println("Error creating .env file: ", err)
os.Exit(1)
}
defer f.Close()
// write to file. make it look nice
f.WriteString("# GotHub environment variables\n")
f.WriteString("# This file was generated by the setup wizard. You can edit it manually if you want.\n")
f.WriteString("GOTHUB_SETUP_COMPLETE=true\n")
f.WriteString("GOTHUB_IP_LOGGED=" + fmt.Sprint(vars.IPLogging) + "\n")
f.WriteString("GOTHUB_REQUEST_URL_LOGGED=" + fmt.Sprint(vars.URLLogging) + "\n")
f.WriteString("GOTHUB_USER_AGENT_LOGGED=" + fmt.Sprint(vars.UserAgentLogging) + "\n")
f.WriteString("GOTHUB_DIAGNOSTIC_INFO_LOGGED=" + fmt.Sprint(vars.DiagnosticLogging) + "\n")
f.WriteString("GOTHUB_INSTANCE_PRIVACY_POLICY=" + vars.PrivacyPolicy + "\n")
f.WriteString("GOTHUB_INSTANCE_COUNTRY=" + vars.InstanceCountry + "\n")
f.WriteString("GOTHUB_INSTANCE_PROVIDER=" + vars.InstanceProvider + "\n")
f.WriteString("GOTHUB_INSTANCE_CLOUDFLARE=" + vars.CloudflareStatus)
println("All done! You can now start your GotHub instance with 'gothub serve'.")
println("You can review the environment variables with 'gothub env'.")
}