timeshare/main.go
2025-08-30 22:14:57 -07:00

49 lines
1.4 KiB
Go

package main
import (
"embed"
"log"
"mime/multipart"
"net/http"
"os"
"git.hafen.run/lukas/timeshare/handlers"
"git.hafen.run/lukas/timeshare/pages"
"github.com/a-h/templ"
"github.com/valkey-io/valkey-go"
)
//go:embed assets
var assetsFS embed.FS
type File struct {
FileKey string
File *multipart.FileHeader
}
func main() {
valkeyAddr := os.Getenv("VALKEY_ADDR")
if valkeyAddr == "" {
valkeyAddr = "127.0.0.1:6379"
}
client, err := valkey.NewClient(valkey.ClientOption{InitAddress: []string{valkeyAddr}})
if err != nil {
log.Fatalln("unable to connect to valkey instance: ", err.Error())
}
http.Handle("/assets/", http.FileServer(http.FS(assetsFS)))
http.Handle("GET /upload", templ.Handler(pages.Upload([]pages.Expiry{
{DurationCode: "24h", DurationName: "24 Hours"},
{DurationCode: "36h", DurationName: "36 Hours"},
{DurationCode: "48h", DurationName: "48 Hours"},
{DurationCode: "168h", DurationName: "1 Week"},
}, "")))
http.Handle("POST /upload", http.HandlerFunc(handlers.UploadFiles(client)))
http.Handle("/download/{upload_id}/zip", http.HandlerFunc(handlers.DownloadFilesZipped(client)))
http.Handle("/download/{upload_id}/{file_id}", http.HandlerFunc(handlers.DownloadFile(client)))
http.Handle("/{upload_id}", http.HandlerFunc(handlers.ListFiles(client)))
http.Handle("/", templ.Handler(pages.Index()))
log.Println(http.ListenAndServe(":8080", nil))
}