-
Janne Mareike Koschinski authoredJanne Mareike Koschinski authored
main.go 1.72 KiB
package main
import (
"context"
"database/sql"
"git.kuschku.de/justjanne/imghost/shared"
"github.com/hibiken/asynq"
"github.com/hibiken/asynqmon"
_ "github.com/lib/pq"
"log"
"net/http"
"os"
)
func main() {
defer shared.ErrorHandler()
configFile, err := os.Open("config.yaml")
if err != nil {
log.Fatalf("error opening config file: %s", err.Error())
}
config := shared.LoadConfigFromFile(configFile)
db, err := sql.Open(config.Database.Format, config.Database.Url)
if err != nil {
log.Fatalf("error connecting to database: %s", err.Error())
}
pageContext := PageContext{
context.Background(),
&config,
asynq.NewClient(config.AsynqOpts()),
asynq.NewInspector(config.AsynqOpts()),
config.UploadTimeoutDuration(),
db,
http.FileServer(http.Dir(config.TargetFolder)),
http.FileServer(http.Dir("assets")),
}
monitor := asynqmon.New(asynqmon.Options{
RootPath: "/admin",
RedisConnOpt: config.AsynqOpts(),
PayloadFormatter: asynqmon.PayloadFormatterFunc(shared.FormatPayload),
ResultFormatter: asynqmon.ResultFormatterFunc(shared.FormatResult),
})
http.Handle(monitor.RootPath()+"/", monitor)
http.Handle("/upload/", pageUpload(pageContext))
http.Handle("/i/", http.StripPrefix("/i/", pageImageDetail(pageContext)))
http.Handle("/a/", http.StripPrefix("/a/", pageAlbumDetail(pageContext)))
http.Handle("/me/images/", pageImageList(pageContext))
http.Handle("/assets/", http.StripPrefix("/assets/", pageContext.AssetServer))
http.Handle("/", pageIndex(pageContext))
http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("OK"))
})
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatalf("error in http server: %s", err.Error())
}
}