package main import ( "flag" "log" "net/http" "os" ) var PublishedImgDir string var NextImgDir string var ThumbsDir string func main() { bind := flag.String("bind", "0.0.0.0:8080", "Bind port/socket") htpasswd_file := flag.String("htpasswd", "", "Admin passwords file, Apache htpasswd format") flag.StringVar(&PublishedImgDir, "publishedimgdir", "./images/published/", "Directory where save published pictures") flag.StringVar(&NextImgDir, "nextimgdir", "./images/next/", "Directory where save pictures to review") flag.StringVar(&ThumbsDir, "thumbsdir", "./images/thumbs/", "Directory where generate thumbs") flag.Parse() htpasswd := &Htpasswd{} if htpasswd_file != nil && *htpasswd_file != "" { log.Println("Reading htpasswd file...") var err error if htpasswd, err = NewHtpasswd(*htpasswd_file); htpasswd == nil { log.Fatal("Unable to parse htpasswd:", err) } } log.Println("Checking paths...") if _, err := os.Stat(PublishedImgDir); os.IsNotExist(err) { log.Fatal(err) } if _, err := os.Stat(NextImgDir); os.IsNotExist(err) { log.Fatal(err) } if _, err := os.Stat(ThumbsDir); os.IsNotExist(err) { log.Fatal(err) } log.Println("Registering handlers...") authFunc := func (r *http.Request) (*User){ return Authenticate(*htpasswd, r) } mux := http.NewServeMux() mux.Handle("/api/", http.StripPrefix("/api", ApiHandler(authFunc))) mux.Handle("/", http.FileServer(http.Dir("./static/"))) log.Println("Ready, listening on", *bind) if err := http.ListenAndServe(*bind, mux); err != nil { log.Fatal("Unable to listen and serve: ", err) } }