package web import ( "fmt" "platform/pkg/env" auth2 "platform/web/auth" "platform/web/core" "platform/web/globals" "platform/web/handlers" "strings" "time" q "platform/web/queries" "github.com/gofiber/fiber/v2" ) func ApplyRouters(app *fiber.App) { api := app.Group("/api") publicRouter(api) clientRouter(api) userRouter(api) adminRouter(api) // 回调 callbacks := app.Group("/callback") callbacks.Get("/identify", handlers.IdentifyCallbackNew) // 临时 if env.RunMode == env.RunModeDev { debug := app.Group("/debug") debug.Get("/sms/:phone", handlers.DebugGetSmsCode) debug.Get("/iden/clear/:phone", handlers.DebugIdentifyClear) debug.Get("/session/now", func(ctx *fiber.Ctx) error { rs, err := q.Session.Where(q.Session.AccessTokenExpires.Gt(time.Now().UTC())).Find() if err != nil { return err } return ctx.JSON(rs) }) debug.Get("/test/err", func(ctx *fiber.Ctx) error { return core.NewBizErr("测试错误") }) debug.Get("/trade/status/:trade_no", func(ctx *fiber.Ctx) error { tradeNo := ctx.Params("trade_no") resp, err := globals.SFTPay.QueryTrade(&globals.QueryTradeReq{ MchOrderNo: &tradeNo, }) if err != nil { return err } return ctx.JSON(resp) }) debug.Get("/gen-edge", func(ctx *fiber.Ctx) error { areas, err := q.Area.Where(q.Area.Level.Eq(2)).Find() if err != nil { return err } sb := strings.Builder{} sb.WriteString("INSERT INTO edge (type, version, mac, ip, port, isp, area_id, status) VALUES\n") for i, area := range areas { // jh edges for j := range 20 { fmt.Fprintf(&sb, "(2, 1, 'jh-%d-%d-%d', '192.168.50.%d', %d, 0, %d, 1)", area.ID, j+1, i+44001, j+2, i+44001, area.ID) sb.WriteString(",\n") } // jg edges for j := range 10 { var ip string var n int if i < 100 { ip = "192.168.0.232" n = 1 } else if i < 200 { ip = "192.168.59.236" n = 2 } else { ip = "192.168.59.237" n = 3 } fmt.Fprintf(&sb, "(2, 1, 'jg-%d-%d-%d', '%s', %d, 0, %d, 1)", area.ID, n, i*10+j+20001, ip, i*10+j+20001, area.ID) if i < len(areas)-1 || j < 9 { sb.WriteString(",\n") } } } sb.WriteString(";\n") return ctx.SendString(sb.String()) }) } } // 公开接口路由 func publicRouter(api fiber.Router) { // 认证 auth := api.Group("/auth") auth.Get("/authorize", auth2.AuthorizeGet) auth.Post("/authorize", auth2.AuthorizePost) auth.Post("/token", auth2.Token) auth.Post("/revoke", auth2.Revoke) auth.Post("/introspect", auth2.Introspect) // 套餐 resource := api.Group("/resource") resource.Post("/price", handlers.ResourcePrice) // 交易 trade := api.Group("/trade") trade.Get("/check", handlers.TradeCheck) // 前台 inquiry := api.Group("/inquiry") inquiry.Post("/create", handlers.CreateInquiry) // 产品 product := api.Group("/product") product.Post("/list", handlers.AllProduct) } // 客户端接口路由 func clientRouter(api fiber.Router) { client := api // 验证短信令牌 client.Post("/verify/sms", handlers.SendSmsCode) // 网关 proxy := client.Group("/proxy") proxy.Post("/sync-pool", handlers.SyncProxyPool) // 通道管理 channel := client.Group("/channel") channel.Post("/remove", handlers.RemoveChannels) // 文章查看 article := api.Group("/article") article.Post("/nav", handlers.NavArticle) article.Post("/get", handlers.GetArticle) } // 用户接口路由 func userRouter(api fiber.Router) { // 用户 user := api.Group("/user") user.Post("/update", handlers.UpdateUser) user.Post("/update/account", handlers.UpdateAccount) user.Post("/update/password", handlers.UpdatePassword) user.Post("/identify", handlers.Identify) // 白名单 whitelist := api.Group("/whitelist") whitelist.Post("/list", handlers.ListWhitelist) whitelist.Post("/create", handlers.CreateWhitelist) whitelist.Post("/update", handlers.UpdateWhitelist) whitelist.Post("/remove", handlers.RemoveWhitelist) // 套餐 resource := api.Group("/resource") resource.Post("/all", handlers.AllActiveResource) resource.Post("/list/short", handlers.PageResourceShort) resource.Post("/list/long", handlers.PageResourceLong) resource.Post("/create", handlers.CreateResource) resource.Post("/update/checkip", handlers.UpdateResourceCheckIP) resource.Post("/statistics/free", handlers.StatisticResourceFree) resource.Post("/statistics/usage", handlers.StatisticResourceUsage) // 批次 batch := api.Group("/batch") batch.Post("/page", handlers.PageBatch) // 通道 channel := api.Group("/channel") channel.Post("/list", handlers.ListChannel) channel.Post("/create", handlers.CreateChannel) channel.Post("/create/v2", handlers.CreateChannelV2) channel.Post("/create/v3", handlers.CreateChannelV3) // 地区 area := api.Group("/area") area.Post("/list", handlers.ListArea) // 交易 trade := api.Group("/trade") trade.Post("/create", handlers.TradeCreate) trade.Post("/complete", handlers.TradeComplete) trade.Post("/cancel", handlers.TradeCancel) // 账单 bill := api.Group("/bill") bill.Post("/list", handlers.ListBill) // 余额变动 balance := api.Group("/balance") balance.Post("/page", handlers.PageBalanceActivity) // 已发放优惠券 couponUser := api.Group("/coupon-user") couponUser.Post("/page", handlers.PageCouponUser) couponUser.Post("/get", handlers.GetCouponUser) // 公告 announcement := api.Group("/announcement") announcement.Post("/list", handlers.ListAnnouncements) // 认证 verify := api.Group("/verify") verify.Post("/sms/password", handlers.SendSmsCodeForPassword) } // 管理员接口路由 func adminRouter(api fiber.Router) { api = api.Group("/admin") // admin 管理员 var admin = api.Group("/admin") admin.Post("/all", handlers.AllAdminByAdmin) admin.Post("/page", handlers.PageAdminByAdmin) admin.Post("/create", handlers.CreateAdmin) admin.Post("/update", handlers.UpdateAdmin) admin.Post("/remove", handlers.RemoveAdmin) // admin-role 管理员角色 var adminRole = api.Group("/admin-role") adminRole.Post("/list", handlers.AllAdminRoleByAdmin) adminRole.Post("/page", handlers.PageAdminRoleByAdmin) adminRole.Post("/create", handlers.CreateAdminRole) adminRole.Post("/update", handlers.UpdateAdminRole) adminRole.Post("/remove", handlers.RemoveAdminRole) // permission 权限 var permission = api.Group("/permission") permission.Post("/list", handlers.AllPermissionByAdmin) permission.Post("/page", handlers.PagePermissionByAdmin) // user 用户 var user = api.Group("/user") user.Post("/page", handlers.PageUserByAdmin) user.Post("/page/not-bind", handlers.PageUserNotBindByAdmin) user.Post("/get", handlers.GetUserByAdmin) user.Post("/create", handlers.CreateUserByAdmin) user.Post("/update", handlers.UpdateUserByAdmin) user.Post("/remove", handlers.RemoveUserByAdmin) user.Post("/update/bind", handlers.BindAdmin) user.Post("/update/balance", handlers.UpdateUserBalanceByAdmin) user.Post("/update/balance-inc", handlers.UpdateUserBalanceIncByAdmin) user.Post("/update/balance-dec", handlers.UpdateUserBalanceDecByAdmin) // resource 套餐 var resource = api.Group("/resource") resource.Post("/short/page", handlers.PageResourceShortByAdmin) resource.Post("/short/page/of-user", handlers.PageResourceShortOfUserByAdmin) resource.Post("/long/page", handlers.PageResourceLongByAdmin) resource.Post("/long/page/of-user", handlers.PageResourceLongOfUserByAdmin) resource.Post("/update", handlers.UpdateResourceByAdmin) // batch 批次 var batch = api.Group("/batch") batch.Post("/page", handlers.PageBatchByAdmin) batch.Post("/page/of-user", handlers.PageBatchOfUserByAdmin) // channel 通道 var channel = api.Group("/channel") channel.Post("/page", handlers.PageChannelByAdmin) channel.Post("/page/of-user", handlers.PageChannelOfUserByAdmin) channel.Post("/sync/clear-expired", handlers.SyncChannelClearExpiredByAdmin) // proxy 代理 var proxy = api.Group("/proxy") proxy.Post("/all", handlers.AllProxyByAdmin) proxy.Post("/page", handlers.PageProxyByAdmin) proxy.Post("/create", handlers.CreateProxy) proxy.Post("/update", handlers.UpdateProxy) proxy.Post("/update/status", handlers.UpdateProxyStatus) proxy.Post("/remove", handlers.RemoveProxy) // trade 交易 var trade = api.Group("/trade") trade.Post("/page", handlers.PageTradeByAdmin) trade.Post("/page/of-user", handlers.PageTradeOfUserByAdmin) trade.Post("/complete", handlers.TradeCompleteByAdmin) // bill 账单 var bill = api.Group("/bill") bill.Post("/page", handlers.PageBillByAdmin) bill.Post("/page/of-user", handlers.PageBillOfUserByAdmin) // balance-activity 余额变动 var balanceActivity = api.Group("/balance-activity") balanceActivity.Post("/page", handlers.PageBalanceActivityByAdmin) balanceActivity.Post("/page/of-user", handlers.PageBalanceActivityOfUserByAdmin) // product 产品 var product = api.Group("/product") product.Post("/all", handlers.AllProductByAdmin) product.Post("/create", handlers.CreateProduct) product.Post("/update", handlers.UpdateProduct) product.Post("/remove", handlers.DeleteProduct) product.Post("/sku/all", handlers.AllProductSkuByAdmin) product.Post("/sku/page", handlers.PageProductSkuByAdmin) product.Post("/sku/create", handlers.CreateProductSku) product.Post("/sku/update", handlers.UpdateProductSku) product.Post("/sku/update/status", handlers.UpdateProductStatusSku) product.Post("/sku/remove", handlers.DeleteProductSku) product.Post("/sku/update/discount/batch", handlers.BatchUpdateProductSkuDiscount) // discount 折扣 var discount = api.Group("/discount") discount.Post("/all", handlers.AllDiscountByAdmin) discount.Post("/page", handlers.PageDiscountByAdmin) discount.Post("/create", handlers.CreateDiscount) discount.Post("/update", handlers.UpdateDiscount) discount.Post("/remove", handlers.DeleteDiscount) // coupon 优惠券 var coupon = api.Group("/coupon") coupon.Post("/all", handlers.AllCouponByAdmin) coupon.Post("/page", handlers.PageCouponByAdmin) coupon.Post("/create", handlers.CreateCoupon) coupon.Post("/update", handlers.UpdateCoupon) coupon.Post("/remove", handlers.DeleteCoupon) coupon.Post("/update/assign", handlers.AssignCoupon) // coupon-user 已发放优惠券 var couponUser = api.Group("/coupon-user") couponUser.Post("/page", handlers.PageCouponUserByAdmin) couponUser.Post("/page/of-user", handlers.PageCouponUserOfUserByAdmin) couponUser.Post("/get", handlers.GetCouponUserByAdmin) couponUser.Post("/create", handlers.CreateCouponUserByAdmin) couponUser.Post("/update", handlers.UpdateCouponUserByAdmin) couponUser.Post("/remove", handlers.DeleteCouponUserByAdmin) // article 文档 var article = api.Group("/article") article.Post("/page", handlers.PageArticleByAdmin) article.Post("/get", handlers.GetArticleByAdmin) article.Post("/create", handlers.CreateArticle) article.Post("/update", handlers.UpdateArticle) article.Post("/remove", handlers.DeleteArticle) article.Post("/upload", handlers.UploadArticleImage) // article-group 文档分组 var articleGroup = api.Group("/article-group") articleGroup.Post("/page", handlers.PageArticleGroupByAdmin) articleGroup.Post("/list", handlers.ListArticleGroupByAdmin) articleGroup.Post("/create", handlers.CreateArticleGroup) articleGroup.Post("/update", handlers.UpdateArticleGroup) articleGroup.Post("/remove", handlers.DeleteArticleGroup) }