podterminal/main.go

65 lines
1.5 KiB
Go

package main
import (
"log"
"net"
"os"
"github.com/spf13/viper"
"git.jmbit.de/jmb/podterminal/pods"
"git.jmbit.de/jmb/podterminal/utils"
"git.jmbit.de/jmb/podterminal/web"
)
func main() {
readConfigFile()
laddr := &net.TCPAddr{
IP: net.IPv4zero,
Port: viper.GetInt("port"),
}
log.Println("Binding Port ", viper.GetInt("port"))
listener, err := net.ListenTCP("tcp", laddr)
if err != nil {
log.Fatalln("could not bind to port ", viper.GetInt("port"), ": ", err)
}
pods.ConnectSocket()
// Dumm, ich weiß
utils.DropPrivileges("podterminal")
log.Println("Dropped Privileges")
pods.PullImage()
// Jank
go pods.GarbageCollector()
web.Run(listener)
}
func readConfigFile() {
log.Println("Reading Config")
viper.SetConfigFile("/etc/podterminal/config.yaml")
viper.SetDefault("port", 80)
viper.SetDefault("image", "lscr.io/linuxserver/webtop")
viper.SetDefault("maxAge", 10800)
viper.SetDefault("dri", false)
viper.SetDefault("dir_node", "/dev/dri/renderD128")
viper.SetDefault("envvars",
map[string]string{
"CUSTOM_USER": "user",
"PASSWORD": "",
"TITLE": "Podterminal",
},
)
if _, err := os.Stat("/etc/podterminal/config.yaml"); os.IsNotExist(err) {
log.Println("Config file does not exist, creating")
os.MkdirAll("/etc/podterminal", 755)
err := viper.WriteConfig()
if err != nil {
log.Fatalln("could not write default config", err)
}
}
err := viper.ReadInConfig()
if err != nil {
log.Fatalln("could not read config file", err)
}
log.Println("Finished reading Config")
}