49 lines
1.4 KiB
Go
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))
|
|
}
|