mineauth/main.go

67 lines
1.7 KiB
Go

package main
import (
"flag"
"net/http"
"os"
"time"
"git.jojodev.com/Canopy/mineauth/server"
"github.com/peterbourgon/ff/v3"
"github.com/peterbourgon/ff/v3/fftoml"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
func main() {
fs := flag.NewFlagSet("mineauth", flag.ExitOnError)
portFlag := fs.Int("port", 25565, "Port to listen on")
timeoutFlag := fs.Int("timeout", 15, "HTTP timeout")
pingMessageFlag := fs.String("ping", "Login to authenticate!", "Message for the server list")
communityFlag := fs.String("community", "", "URL to community")
faviconFlag := fs.String("favicon", "", "Path to a favicon image for server list ping")
hooksFlag := make([]string, 0)
fs.Func("hook", "Hook to run", func(hook string) error {
hooksFlag = append(hooksFlag, hook)
return nil
})
debugFlag := fs.Bool("debug", false, "Debug Logging")
jsonFlag := fs.Bool("json", false, "JSON Logging")
if err := ff.Parse(fs, os.Args[1:],
ff.WithEnvVarPrefix("MINEAUTH"),
ff.WithConfigFileFlag("config"),
ff.WithAllowMissingConfigFile(true),
ff.WithConfigFileParser(fftoml.New().Parse),
); err != nil {
panic(err)
return
}
if *debugFlag {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
}
if !*jsonFlag {
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout})
}
http.DefaultClient.Timeout = time.Second * time.Duration(*timeoutFlag)
serv, err := server.New(server.Options{
PingMessage: *pingMessageFlag,
CommunityURL: *communityFlag,
FaviconPath: *faviconFlag,
Hooks: hooksFlag,
})
if err != nil {
log.Err(err).Msg("")
return
}
log.Info().Msgf("Listening on http://localhost:%d", *portFlag)
if err := serv.Start(*portFlag); err != nil {
log.Err(err).Msg("")
}
}