70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
// SPDX-FileCopyrightText: 2021 Amolith <amolith@secluded.site>
|
|
//
|
|
// SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"html/template"
|
|
"log"
|
|
"net/http"
|
|
|
|
flag "github.com/spf13/pflag"
|
|
)
|
|
|
|
type ring struct {
|
|
handle string
|
|
url string
|
|
}
|
|
|
|
type model struct {
|
|
ring []ring
|
|
index *template.Template
|
|
ringModTime int64
|
|
indexModTime int64
|
|
}
|
|
|
|
// Pre-define all of our flags
|
|
var (
|
|
flagListen *string = flag.StringP("listen", "l", "127.0.0.1:2857", "Host and port go-webring will listen on")
|
|
flagMembers *string = flag.StringP("members", "m", "list.txt", "Path to list of webring members")
|
|
flagIndex *string = flag.StringP("index", "i", "index.html", "Path to home page template")
|
|
// These are not (and might never be) implemented, we'll see
|
|
// flagCert *string = flag.StringP("cert", "c", "cert.crt", "Path to certificate")
|
|
// flagKey *string = flag.StringP("key", "k", "cert.key", "Path to private certificate key")
|
|
)
|
|
|
|
func main() {
|
|
m := model{}
|
|
m.init()
|
|
|
|
mux := http.NewServeMux()
|
|
|
|
httpServer := &http.Server{
|
|
Addr: *flagListen,
|
|
Handler: mux,
|
|
}
|
|
|
|
mux.HandleFunc("/", m.root)
|
|
mux.HandleFunc("/next", m.next)
|
|
mux.HandleFunc("/previous", m.previous)
|
|
mux.HandleFunc("/random", m.random)
|
|
|
|
if err := httpServer.ListenAndServe(); err == http.ErrServerClosed {
|
|
log.Println("Web server closed")
|
|
} else {
|
|
log.Fatalln(err)
|
|
}
|
|
}
|
|
|
|
func (m *model) init() {
|
|
flag.Parse()
|
|
fmt.Println("Listening on", *flagListen)
|
|
fmt.Println("Looking for members in", *flagMembers)
|
|
m.parseList()
|
|
fmt.Println("Found", len(m.ring), "members")
|
|
fmt.Println("Building homepage with", *flagIndex)
|
|
m.parseIndex()
|
|
}
|