changes + add uploader
Some checks failed
build / build (push) Successful in 27s
release-tag / release-image (push) Has been cancelled

This commit is contained in:
Tijl 2024-08-29 12:31:29 +02:00
parent 7e1c36c966
commit 1383b52f85
Signed by: tijl
GPG Key ID: DAE24BFCD722F053
2 changed files with 34 additions and 30 deletions

View File

@ -1,24 +1,24 @@
package uploader package uploader
import ( import (
"context" "context"
"database/sql" "database/sql"
"embed" "embed"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
"strconv" "strconv"
"time" "time"
"git.tijl.dev/tijl/tijl.dev-core/internal/config" "git.tijl.dev/tijl/tijl.dev-core/internal/config"
"git.tijl.dev/tijl/tijl.dev-core/internal/queries" "git.tijl.dev/tijl/tijl.dev-core/internal/queries"
"git.tijl.dev/tijl/tijl.dev-core/internal/user" "git.tijl.dev/tijl/tijl.dev-core/internal/user"
"git.tijl.dev/tijl/tijl.dev-core/modules/db" "git.tijl.dev/tijl/tijl.dev-core/modules/db"
"git.tijl.dev/tijl/tijl.dev-core/modules/i18n" "git.tijl.dev/tijl/tijl.dev-core/modules/i18n"
"git.tijl.dev/tijl/tijl.dev-core/modules/web" "git.tijl.dev/tijl/tijl.dev-core/modules/web"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
//go:embed locales/* //go:embed locales/*
@ -32,6 +32,10 @@ func Setup() {
web.RegisterAppSetupFunc(func(a *fiber.App) { web.RegisterAppSetupFunc(func(a *fiber.App) {
a.Get("/app/uploader", func(c *fiber.Ctx) error { a.Get("/app/uploader", func(c *fiber.Ctx) error {
_, err := user.GetSession(c)
if err != nil {
return c.Redirect("/auth?redirect=/app/uploader", http.StatusUnauthorized)
}
data := *web.Common(c) data := *web.Common(c)
data["Title"] = "tmp" data["Title"] = "tmp"
return c.Render("apps/uploader/index", data, "layouts/base") return c.Render("apps/uploader/index", data, "layouts/base")
@ -39,7 +43,7 @@ func Setup() {
a.Get("/app/uploader/:key", func(c *fiber.Ctx) error { a.Get("/app/uploader/:key", func(c *fiber.Ctx) error {
encryptionKey, err := hex.DecodeString(c.Params("key")) encryptionKey, err := hex.DecodeString(c.Params("key"))
if err != nil { if err != nil {
return err return c.Next()
} }
storageKey := hashKey(encryptionKey) storageKey := hashKey(encryptionKey)
@ -57,7 +61,7 @@ func Setup() {
return err return err
} }
if accessCount >= int64(row.MaxVisits) { if accessCount == int64(row.MaxVisits) || accessCount > int64(row.MaxVisits) {
return c.Next() return c.Next()
} }
@ -115,10 +119,10 @@ func Setup() {
return c.SendStatus(http.StatusUnauthorized) return c.SendStatus(http.StatusUnauthorized)
} }
expireDays, err := strconv.Atoi(c.FormValue("expire_days")) expireDays, err := strconv.Atoi(c.FormValue("expire_days"))
if err != nil {return err} if err != nil {return err}
maxDownloads, err := strconv.Atoi(c.FormValue("max_downloads")) maxDownloads, err := strconv.Atoi(c.FormValue("max_downloads"))
if err != nil {return err} if err != nil {return err}
file, err := c.FormFile("file") file, err := c.FormFile("file")
if err != nil { if err != nil {

View File

@ -1,8 +1,8 @@
<div hx-boost="true"> <div id="error-message" class="text-red-500 mb-4"></div> <div hx-boost="true"> <div id="error-message" class="text-red-500 mb-4"></div>
<form method="post" hx-on="htmx:responseError: <form method="post" hx-on="htmx:responseError:
document.getElementById('error-message').innerHTML = '{{.T.error_long}}: document.getElementById('error-message').innerHTML = '{{.T.error_long}}:
' + event.detail.xhr.responseText; htmx.trigger(this, 'htmx:swap', { ' + event.detail.xhr.responseText; htmx.trigger(this, 'htmx:swap', {
target: '#error-message', swap: 'innerHTML' });"> target: '#error-message', swap: 'innerHTML' });">
<input type="text" class="hidden" name="type" value="start" /> <input type="text" class="hidden" name="type" value="start" />
<div> {{range .SupportedTags}} <label class="cursor-pointer label"> <div> {{range .SupportedTags}} <label class="cursor-pointer label">
@ -12,29 +12,29 @@
</label> {{end}} </label> {{end}}
</div> </div>
{{if .SignedIn}} {{if .SignedIn}}
<label class="cursor-pointer label mt-5"> <span <label class="cursor-pointer label mt-5"> <span
class="label-text">Share</span> <input name="share" type="checkbox" class="label-text">Share</span> <input name="share" type="checkbox"
class="checkbox checkbox-primary" /> class="checkbox checkbox-primary" />
</label> </label>
{{end}} {{end}}
<div> <label> <div> <label>
<span>max questions</span> <input value="0" placeholder="max <span>max questions</span> <input value="0" placeholder="max
questions" name="max_questions" type="number" questions" name="max_questions" type="number"
class="input input-bordered" /> </label> class="input input-bordered" /> </label>
</div> </div>
<div> <label> <div> <label>
<span>time limit</span> <input value="0" placeholder="seconds <span>time limit</span> <input value="0" placeholder="seconds
time limit" name="seconds" type="number" time limit" name="seconds" type="number"
class="input input-bordered" /> </label> class="input input-bordered" /> </label>
</div> </div>
<button type="submit" class="btn btn-primary">Submit</button> </form> <button type="submit" class="btn btn-primary">Submit</button> </form>
<form class="mt-4" method="post"> <input type="text" class="hidden" <form class="mt-4" method="post"> <input type="text" class="hidden"
name="type" value="shared" /> <input type="text" class="input name="type" value="shared" /> <input type="text" class="input
input-bordered" name="sharekey" placeholder="sharekey" /> <button input-bordered" name="sharekey" placeholder="sharekey" /> <button
type="submit" class="btn btn-primary">Shared</button> type="submit" class="btn btn-primary">Shared</button>
</form> </form>
</div> </div>