Files
newsgo/main.go

94 lines
2.0 KiB
Go
Raw Normal View History

2022-12-06 20:20:27 +00:00
package main
2022-12-06 22:10:27 +00:00
import (
"flag"
"fmt"
"log"
"net"
"net/http"
"os"
"strconv"
server "i2pgit.org/idk/newsgo/server"
)
var (
serve = flag.String("command", "help", "command to run(may be `serve`,`build`,`sign`")
dir = flag.String("newsdir", "build", "directory to serve news from")
statsfile = flag.String("statsfile", "build/stats.json", "file to store stats in")
host = flag.String("host", "127.0.0.1", "host to serve on")
port = flag.String("port", "9696", "port to serve on")
)
func validatePort(s *string) {
_, err := strconv.Atoi(*s)
if err != nil {
log.Println("Port is invalid")
os.Exit(1)
}
}
func validateCommand(s *string) string {
switch *s {
case "serve":
return "serve"
case "build":
return "build"
case "sign":
return "sign"
default:
return "help"
}
}
func Help() {
fmt.Println("newsgo")
fmt.Println("======")
fmt.Println("")
fmt.Println("I2P News Server Tool/Library")
fmt.Println("")
fmt.Println("Usage")
fmt.Println("-----")
fmt.Println("")
fmt.Println("./newsgo -command $command -newsdir $news_directory -statsfile $news_stats_file")
fmt.Println("")
fmt.Println("### Commands")
fmt.Println("")
fmt.Println(" - serve: Serve newsfeeds from a directory")
fmt.Println(" - build: Build newsfeeds from XML(Not Implemented Yet)")
fmt.Println(" - sign: Sign newsfeeds with local keys(Not Implemented Yet)")
fmt.Println("")
fmt.Println("### Options")
fmt.Println("")
fmt.Println(" - `-newsdir`: directory to serve newsfeed from")
fmt.Println(" - `-statsfile`: file to store the stats in, in json format")
fmt.Println("")
}
2022-12-06 20:20:27 +00:00
2022-12-06 22:10:27 +00:00
func Serve(host, port string) error {
ln, err := net.Listen("tcp", net.JoinHostPort(host, port))
if err != nil {
return err
}
s := server.Serve(*dir, *statsfile)
return http.Serve(ln, s)
}
func main() {
flag.Parse()
command := validateCommand(serve)
validatePort(port)
switch command {
case "serve":
if err := Serve(*host, *port); err != nil {
panic(err)
}
case "build":
case "sign":
case "help":
Help()
default:
Help()
}
2022-12-06 20:20:27 +00:00
}