package main import ( "database/sql" "fmt" "html/template" "log" "net/http" "os" ) func ErrorPage(w http.ResponseWriter, code int) { log.Println(code, http.StatusText(code)) t := template.Must(template.ParseFiles("templates/error.html")) t.Execute(w, struct { Code int Message string }{ Code: code, Message: http.StatusText(code), }) } func Usage() { fmt.Fprintf(os.Stderr, "%s [--port port]\n", os.Args[0]) } func main() { port := ":8000" for i := 1; i < len(os.Args); i++ { switch os.Args[i] { case "--port": if i+1 >= len(os.Args) { Usage() } else { port = ":" + os.Args[i+1] i++ } default: log.Println("Unknown option: ", os.Args[i]) Usage() } } db, err := sql.Open("sqlite", "man.db") if err != nil { log.Fatal(err) } if err := db.Ping(); err != nil { log.Fatal(err) } dbWrapper := &Database{DB: db} allowed, err := GetAllowed("Allowed.json") if err != nil { log.Fatal(err) } oses, err := dbWrapper.GetOS() if err != nil { log.Fatal(err) } for oses.Next() { var osName string if err := oses.Scan(&osName); err != nil { log.Fatal(err) } http.HandleFunc("/" + osName, dbWrapper.Index) } oses.Close() http.HandleFunc("/search", dbWrapper.Search) http.HandleFunc("/os", dbWrapper.GetOptionOS) http.HandleFunc("/os-link", dbWrapper.IndexLinks) http.HandleFunc("/", allowed.GetFiles) log.Fatal(http.ListenAndServe(port, nil)) err = db.Close() if err != nil { log.Fatal(err) } }