87 lines
1.3 KiB
Go
87 lines
1.3 KiB
Go
package middleware
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"git.wh64.net/devproje/kuma-archive/internal/service"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func WorkerRoute(ctx *gin.Context) {
|
|
if !strings.HasPrefix(ctx.Request.URL.Path, "/api/worker") {
|
|
ctx.Next()
|
|
return
|
|
}
|
|
|
|
var err error
|
|
var dirs []service.PrivDir
|
|
auth := service.NewAuthService()
|
|
privdir := service.NewPrivDirService(nil)
|
|
dirs = privdir.Query()
|
|
if len(dirs) == 0 {
|
|
ctx.Next()
|
|
return
|
|
}
|
|
|
|
var target string
|
|
var matches = false
|
|
for _, dir := range dirs {
|
|
if !strings.Contains(ctx.Request.URL.Path, dir.DirName) {
|
|
continue
|
|
}
|
|
|
|
target = dir.DirName
|
|
matches = true
|
|
}
|
|
|
|
if !matches {
|
|
ctx.Next()
|
|
return
|
|
}
|
|
|
|
username, password, ok := ctx.Request.BasicAuth()
|
|
if !ok {
|
|
ctx.AbortWithStatus(401)
|
|
return
|
|
}
|
|
|
|
ok, err = auth.VerifyToken(username, password)
|
|
if err != nil {
|
|
_, _ = fmt.Fprintln(os.Stderr, err)
|
|
|
|
ctx.AbortWithStatus(401)
|
|
return
|
|
}
|
|
|
|
if !ok {
|
|
ctx.AbortWithStatus(401)
|
|
return
|
|
}
|
|
|
|
var acc *service.Account
|
|
acc, err = auth.Read(username)
|
|
if err != nil {
|
|
_, _ = fmt.Fprintln(os.Stderr, err)
|
|
|
|
ctx.AbortWithStatus(500)
|
|
return
|
|
}
|
|
|
|
privdir = service.NewPrivDirService(acc)
|
|
|
|
var d *service.PrivDir
|
|
d, err = privdir.Read(target)
|
|
if err != nil {
|
|
ctx.AbortWithStatus(500)
|
|
return
|
|
}
|
|
|
|
if d == nil {
|
|
ctx.AbortWithStatus(401)
|
|
return
|
|
}
|
|
|
|
ctx.Next()
|
|
}
|