diff --git a/backend/go.mod b/backend/go.mod index 1d4b204..a31f7d4 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -10,10 +10,8 @@ require ( github.com/labstack/echo-contrib v0.17.4 github.com/labstack/echo/v4 v4.13.4 github.com/matoous/go-nanoid/v2 v2.1.0 - github.com/redis/go-redis/v9 v9.17.2 github.com/samber/lo v1.51.0 github.com/spf13/cast v1.10.0 - github.com/spf13/viper v1.21.0 github.com/stretchr/testify v1.11.1 go.uber.org/zap v1.27.0 golang.org/x/crypto v0.42.0 @@ -24,8 +22,6 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/google/go-cmp v0.7.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/context v1.1.2 // indirect @@ -33,17 +29,12 @@ require ( github.com/labstack/gommon v0.4.2 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/redis/go-redis/v9 v9.17.2 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect - github.com/sagikazarmark/locafero v0.12.0 // indirect - github.com/spf13/afero v1.15.0 // indirect - github.com/spf13/pflag v1.0.10 // indirect - github.com/subosito/gotenv v1.6.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect go.uber.org/multierr v1.11.0 // indirect - go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/net v0.44.0 // indirect golang.org/x/sys v0.36.0 // indirect golang.org/x/text v0.29.0 // indirect diff --git a/backend/go.sum b/backend/go.sum index 6f5cef9..38e3471 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -12,10 +12,6 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= -github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= @@ -48,8 +44,6 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= -github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/redis/go-redis/v9 v9.17.2 h1:P2EGsA4qVIM3Pp+aPocCJ7DguDHhqrXNhVcEp4ViluI= @@ -58,22 +52,12 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= -github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI= github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= -github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= -github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= -github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= -github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= -github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= -github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= @@ -84,8 +68,6 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= -go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= diff --git a/backend/internal/controllers/about.go b/backend/internal/controllers/about.go index 0880265..cee6def 100644 --- a/backend/internal/controllers/about.go +++ b/backend/internal/controllers/about.go @@ -4,13 +4,14 @@ import ( "backend/internal/utils" "encoding/json" "pkg/models" + u "pkg/utils" "github.com/labstack/echo/v4" "github.com/samber/lo" ) func GetAbout(c echo.Context) error { - maxStorageSize, err := utils.GetFileSize(utils.GetEnv("upload.maximum")) + maxStorageSize, err := utils.GetFileSize(u.GetEnv("upload.maximum")) if err != nil { return utils.HTTPErrorHandler(c, err) } @@ -30,12 +31,12 @@ func GetAbout(c echo.Context) error { }, 0) return utils.HTTPSuccessHandler(c, map[string]any{ - "bg_url": utils.GetEnv("about.bg_url"), - "content": utils.GetEnvMapString("about.content"), - "email": utils.GetEnv("about.email"), - "name": utils.GetEnv("about.name"), - "url": utils.GetEnv("about.url"), - "avatar": utils.GetEnv("about.avatar"), + "bg_url": u.GetEnv("about.bg_url"), + "content": u.GetEnvMapString("about.content"), + "email": u.GetEnv("about.email"), + "name": u.GetEnv("about.name"), + "url": u.GetEnv("about.url"), + "avatar": u.GetEnv("about.avatar"), "file": map[string]any{ "maximun": maxStorageSize, "current": currentFileSize, diff --git a/backend/internal/controllers/config.go b/backend/internal/controllers/config.go index 97cc1cf..0687db7 100644 --- a/backend/internal/controllers/config.go +++ b/backend/internal/controllers/config.go @@ -2,6 +2,7 @@ package controllers import ( "backend/internal/utils" + u "pkg/utils" "time" "github.com/labstack/echo/v4" @@ -10,12 +11,12 @@ import ( func GetConfig(c echo.Context) error { return utils.HTTPSuccessHandler(c, map[string]any{ - "site_title": utils.GetEnvMapString("site.title"), - "site_desc": utils.GetEnvMapString("site.desc"), - "site_url": utils.GetEnv("site.url"), - "site_icon": utils.GetEnvWithDefault("site.icon", "/logo.png"), - "site_bg_url": utils.GetEnvWithDefault("site.bg_url", "https://img.fudaoyuan.icu/api/1/random/?scale_min=1.5&webp=true&md=false&format=302"), - "version": utils.GetEnvWithDefault("VERSION", "dev"), - "build_time": cast.ToInt(utils.GetEnvWithDefault("BUILD_TIME", cast.ToString(time.Now().Unix()))), + "site_title": u.GetEnvMapString("site.title"), + "site_desc": u.GetEnvMapString("site.desc"), + "site_url": u.GetEnv("site.url"), + "site_icon": u.GetEnvWithDefault("site.icon", "/logo.png"), + "site_bg_url": u.GetEnvWithDefault("site.bg_url", "https://img.fudaoyuan.icu/api/1/random/?scale_min=1.5&webp=true&md=false&format=302"), + "version": u.GetEnvWithDefault("VERSION", "dev"), + "build_time": cast.ToInt(u.GetEnvWithDefault("BUILD_TIME", cast.ToString(time.Now().Unix()))), }) } diff --git a/backend/internal/controllers/download.go b/backend/internal/controllers/download.go index 0b8a57d..404af71 100644 --- a/backend/internal/controllers/download.go +++ b/backend/internal/controllers/download.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "pkg/models" + u "pkg/utils" "time" "github.com/golang-jwt/jwt/v5" @@ -26,7 +27,7 @@ func DownloadShare(c echo.Context) error { } claims := DownloadShareClaims{} t, err := jwt.ParseWithClaims(token, &claims, func(token *jwt.Token) (interface{}, error) { - return []byte(utils.GetEnv("share.download_secret")), nil + return []byte(u.GetEnv("share.download_secret")), nil }) if err != nil { return utils.HTTPErrorHandler(c, err) @@ -89,7 +90,7 @@ func VaildateShare(c echo.Context) error { if shareInfo.ViewNum < 1 { return utils.HTTPErrorHandler(c, errors.New("下载次数不足")) } - downloadWindow := utils.GetEnvWithDefault("share.download_window", "12") + downloadWindow := u.GetEnvWithDefault("share.download_window", "12") token := jwt.NewWithClaims(jwt.SigningMethodHS256, DownloadShareClaims{ ShareId: r.ShareId, RegisteredClaims: jwt.RegisteredClaims{ @@ -98,7 +99,7 @@ func VaildateShare(c echo.Context) error { }) // Sign and get the complete encoded token as a string using the secret - downloadToken, err := token.SignedString([]byte(utils.GetEnv("share.download_secret"))) + downloadToken, err := token.SignedString([]byte(u.GetEnv("share.download_secret"))) if err != nil { return utils.HTTPErrorHandler(c, err) } diff --git a/backend/internal/controllers/file.go b/backend/internal/controllers/file.go index 5c6b341..b025aca 100644 --- a/backend/internal/controllers/file.go +++ b/backend/internal/controllers/file.go @@ -10,6 +10,7 @@ import ( "os" "path/filepath" "pkg/models" + u "pkg/utils" "time" "github.com/hibiken/asynq" @@ -40,7 +41,7 @@ func CreateUploadTask(c echo.Context) error { "chunk_size": fileInfo.ChunkSize, }) } - maxStorageSize, err := utils.GetFileSize(utils.GetEnv("upload.maximum")) + maxStorageSize, err := utils.GetFileSize(u.GetEnv("upload.maximum")) if err != nil { return utils.HTTPErrorHandler(c, err) } @@ -83,7 +84,7 @@ func CreateUploadTask(c echo.Context) error { return utils.HTTPErrorHandler(c, err) } - client := utils.GetQueueClient() + client := u.GetQueueClient() json, err := json.Marshal(map[string]any{ "file_id": fileId, }) diff --git a/backend/internal/controllers/image.go b/backend/internal/controllers/image.go index a45edce..1dcae40 100644 --- a/backend/internal/controllers/image.go +++ b/backend/internal/controllers/image.go @@ -7,6 +7,8 @@ import ( "errors" "pkg/models" + u "pkg/utils" + "github.com/hibiken/asynq" "github.com/labstack/echo/v4" ) @@ -25,7 +27,7 @@ func GenCompressImage(c echo.Context) error { if r.FileId == "" { return utils.HTTPErrorHandler(c, errors.New("调用接口参数错误")) } - client := utils.GetQueueClient() + client := u.GetQueueClient() json, err := json.Marshal(map[string]any{ "file_id": r.FileId, }) @@ -54,7 +56,7 @@ func GetCompressImage(c echo.Context) error { return utils.HTTPErrorHandler(c, err) } if taskInfo == nil { - client := utils.GetQueueInspector() + client := u.GetQueueInspector() queneTaskInfo, err := client.GetTaskInfo("default", taskId) if err != nil { diff --git a/backend/internal/controllers/share.go b/backend/internal/controllers/share.go index 0a5d1f2..1dcd6c7 100644 --- a/backend/internal/controllers/share.go +++ b/backend/internal/controllers/share.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "pkg/models" + u "pkg/utils" "strings" "time" @@ -107,13 +108,13 @@ func CreateShareInfo(c echo.Context) error { } shareIDs = append(shareIDs, id) models.SetRedisFileShareRelational(r.Data, shareIDs) - client := utils.GetQueueClient() + client := u.GetQueueClient() json, err := json.Marshal(map[string]any{"share_id": id, "file_id": r.Data}) if err != nil { return utils.HTTPErrorHandler(c, err) } // 这里延时分享过期时间基础上加下载窗口期后1小时删除,防止用户过期前几分钟才开始下载,下载一半文件不见了 - downloadWindow := utils.GetEnvWithDefault("share.download_window", "12") + downloadWindow := u.GetEnvWithDefault("share.download_window", "12") deleteTime := time.Duration(r.Config.ExpireAt)*time.Minute + cast.ToDuration(downloadWindow+"h") + 1*time.Hour _, err = client.Enqueue(asynq.NewTask("share:remove", json), asynq.ProcessIn(deleteTime)) if err != nil { diff --git a/backend/internal/controllers/stat.go b/backend/internal/controllers/stat.go index aa8141b..d36d3d0 100644 --- a/backend/internal/controllers/stat.go +++ b/backend/internal/controllers/stat.go @@ -4,6 +4,7 @@ import ( "backend/internal/utils" "encoding/json" "pkg/models" + u "pkg/utils" "github.com/labstack/echo/v4" ) @@ -47,7 +48,7 @@ func GetStat(c echo.Context) error { } } - queueInspector := utils.GetQueueInspector() + queueInspector := u.GetQueueInspector() queues, err := queueInspector.History("default", QueueHistoryDays) if err != nil { return utils.HTTPErrorHandler(c, err) diff --git a/backend/internal/utils/asyncq.go b/backend/internal/utils/asyncq.go deleted file mode 100644 index ae5fea0..0000000 --- a/backend/internal/utils/asyncq.go +++ /dev/null @@ -1,21 +0,0 @@ -package utils - -import "github.com/hibiken/asynq" - -func GetQueueClient() *asynq.Client { - opt := RedisURI2AsynqOpt(GetEnv("redis.url")) - return asynq.NewClient(opt) -} - -func GetQueueInspector() *asynq.Inspector { - opt := RedisURI2AsynqOpt(GetEnv("redis.url")) - return asynq.NewInspector(opt) -} - -func RedisURI2AsynqOpt(uri string) asynq.RedisConnOpt { - opt, err := asynq.ParseRedisURI(GetEnv("redis.url")) - if err != nil { - panic(err) - } - return opt -} diff --git a/backend/internal/utils/env.go b/backend/internal/utils/env.go deleted file mode 100644 index 0fba7c2..0000000 --- a/backend/internal/utils/env.go +++ /dev/null @@ -1,53 +0,0 @@ -package utils - -import ( - "strings" - - "github.com/spf13/viper" -) - -var v *viper.Viper - -func init() { - InitEnv() -} - -func InitEnv() { - if v != nil { - return - } - v = viper.New() - v.SetConfigName("config.yaml") - v.SetConfigType("yaml") - v.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) - v.AddConfigPath(".") - v.AddConfigPath("../") - v.AutomaticEnv() - v.WatchConfig() - err := v.ReadInConfig() - if err != nil { - panic(err) - // if _, ok := err.(viper.ConfigFileNotFoundError); !ok { - // // 只有当错误不是"配置文件未找到"时才 panic - // panic(err) - // } - } -} - -func GetEnv(key string) string { - InitEnv() - return v.GetString(key) -} - -func GetEnvWithDefault(key string, defaultValue string) string { - value := v.GetString(key) - if value == "" { - return defaultValue - } - return value -} - -func GetEnvMapString(key string) map[string]string { - InitEnv() - return v.GetStringMapString(key) -} diff --git a/backend/internal/utils/file.go b/backend/internal/utils/file.go index 4b09b8f..b75e0f6 100644 --- a/backend/internal/utils/file.go +++ b/backend/internal/utils/file.go @@ -7,6 +7,7 @@ import ( "io" "os" "path/filepath" + "pkg/utils" humanize "github.com/dustin/go-humanize" ) @@ -41,7 +42,7 @@ func GetUploadDirPath() (string, error) { return "", err } finalPath := filepath.Join(basepath, "uploads") - uploadPath := GetEnvWithDefault("upload.path", finalPath) + uploadPath := utils.GetEnvWithDefault("upload.path", finalPath) if err := os.MkdirAll(uploadPath, 0755); err != nil { return "", err } diff --git a/backend/internal/utils/password.go b/backend/internal/utils/password.go index a503022..9b0b3ec 100644 --- a/backend/internal/utils/password.go +++ b/backend/internal/utils/password.go @@ -3,12 +3,13 @@ package utils import ( "errors" "fmt" + "pkg/utils" "golang.org/x/crypto/argon2" ) func GeneratePasswordHash(password string) (string, error) { - salt := GetEnv("share.password_salt") + salt := utils.GetEnv("share.password_salt") if salt == "" { return "", errors.New("请配置PASSWORD_SALT") } diff --git a/backend/internal/utils/redis.go b/backend/internal/utils/redis.go deleted file mode 100644 index 1f8f38c..0000000 --- a/backend/internal/utils/redis.go +++ /dev/null @@ -1,22 +0,0 @@ -package utils - -import ( - "context" - - "github.com/redis/go-redis/v9" -) - -var rdb *redis.Client = InitRedis() -var ctx = context.Background() - -func InitRedis() *redis.Client { - opt, err := redis.ParseURL(GetEnv("redis.url")) - if err != nil { - panic(err) - } - return redis.NewClient(opt) -} - -func GetRedisClient() (*redis.Client, context.Context) { - return rdb, ctx -} diff --git a/backend/main.go b/backend/main.go index d57dfba..844ffe2 100644 --- a/backend/main.go +++ b/backend/main.go @@ -1,10 +1,8 @@ package main import ( - "backend/internal/controllers" - "backend/internal/utils" - "backend/middleware" "fmt" + "pkg/utils" "github.com/labstack/echo/v4" "go.uber.org/zap" @@ -22,26 +20,12 @@ func main() { zap.ReplaceGlobals(logger) e := echo.New() - e.Use(middleware.ContextMiddleware()) - e.Use(middleware.SessionMiddleware()) - e.Use(middleware.AuthMiddleware()) - e.Use(middleware.RateLimiterMiddleware()) - e.Use(middleware.LoggerMiddleware()) + for _, middleware := range middlewares { + e.Use(middleware()) + } - e.POST("/file/create", controllers.CreateUploadTask) - e.POST("/file/slice", controllers.UploadFileSlice) - e.POST("/file/finish", controllers.FinishUploadTask) - e.GET("/share/:id", controllers.GetShareInfo) - e.POST("/share", controllers.CreateShareInfo) - e.GET("/download", controllers.DownloadShare) - e.POST("/download", controllers.VaildateShare) - e.GET("/share/pickup/:code", controllers.GetShareByPickupCode) - - e.POST("/image/compress", controllers.GenCompressImage) - e.GET("/image/compress/:id", controllers.GetCompressImage) - - e.GET("/stat", controllers.GetStat) - e.GET("/config", controllers.GetConfig) - e.GET("/about", controllers.GetAbout) + for _, route := range routes { + e.Match(route.Method, route.Path, route.Handler) + } e.Logger.Fatal(e.Start(fmt.Sprintf(":%s", utils.GetEnvWithDefault("api.port", "5001")))) } diff --git a/backend/middleware.go b/backend/middleware.go new file mode 100644 index 0000000..478efc3 --- /dev/null +++ b/backend/middleware.go @@ -0,0 +1,15 @@ +package main + +import ( + "backend/middleware" + + "github.com/labstack/echo/v4" +) + +var middlewares = []func() echo.MiddlewareFunc{ + middleware.ContextMiddleware, + middleware.SessionMiddleware, + middleware.AuthMiddleware, + middleware.RateLimiterMiddleware, + middleware.LoggerMiddleware, +} diff --git a/backend/route.go b/backend/route.go new file mode 100644 index 0000000..42328b4 --- /dev/null +++ b/backend/route.go @@ -0,0 +1,33 @@ +package main + +import ( + "backend/internal/controllers" + + "github.com/labstack/echo/v4" +) + +type Route struct { + Method []string + Path string + Handler func(c echo.Context) error +} + +var routes = []Route{ + {Method: []string{"POST"}, Path: "/file/create", Handler: controllers.CreateUploadTask}, + {Method: []string{"POST"}, Path: "/file/slice", Handler: controllers.UploadFileSlice}, + {Method: []string{"POST"}, Path: "/file/finish", Handler: controllers.FinishUploadTask}, + + {Method: []string{"GET"}, Path: "/share/:id", Handler: controllers.GetShareInfo}, + {Method: []string{"POST"}, Path: "/share", Handler: controllers.CreateShareInfo}, + + {Method: []string{"GET"}, Path: "/download", Handler: controllers.DownloadShare}, + {Method: []string{"POST"}, Path: "/download", Handler: controllers.VaildateShare}, + {Method: []string{"GET"}, Path: "/share/pickup/:code", Handler: controllers.GetShareByPickupCode}, + + {Method: []string{"GET"}, Path: "/stat", Handler: controllers.GetStat}, + {Method: []string{"GET"}, Path: "/config", Handler: controllers.GetConfig}, + {Method: []string{"GET"}, Path: "/about", Handler: controllers.GetAbout}, + + {Method: []string{"POST"}, Path: "/image/compress", Handler: controllers.GenCompressImage}, + {Method: []string{"GET"}, Path: "/image/compress/:id", Handler: controllers.GetCompressImage}, +}