package handlers import ( "errors" "platform/web/services" "strings" "github.com/gofiber/fiber/v2" ) // region CreateChannel type CreateChannelReq struct { ResourceId int32 `json:"resource_id" validate:"required"` Protocol services.ChannelProtocol `json:"protocol" validate:"required,oneof=socks5 http https"` AuthType services.ChannelAuthType `json:"auth_type" validate:"required,oneof=0 1"` Count int `json:"count" validate:"required"` Prov string `json:"prov" validate:"required"` City string `json:"city" validate:"required"` Isp string `json:"isp" validate:"required"` ResultType CreateChannelResultType `json:"result_type" validate:"required,oneof=json text"` ResultSeparator CreateChannelResultSeparator `json:"result_separator" validate:"required,oneof=enter line both tab"` } func CreateChannel(c *fiber.Ctx) error { req := new(CreateChannelReq) if err := c.BodyParser(req); err != nil { return err } // 建立连接通道 auth, ok := c.Locals("auth").(*services.AuthContext) if !ok { return errors.New("user not found") } result, err := services.Channel.CreateChannel( c.Context(), auth, req.ResourceId, req.Protocol, req.AuthType, req.Count, services.NodeFilterConfig{ Isp: req.Isp, Prov: req.Prov, City: req.City, }, ) if err != nil { return err } switch req.ResultType { case CreateChannelResultTypeJson: return c.JSON(fiber.Map{ "result": result, }) case CreateChannelResultTypeText: switch req.ResultSeparator { case CreateChannelResultSeparatorEnter: return c.SendString(strings.Join(result, "\r")) case CreateChannelResultSeparatorLine: return c.SendString(strings.Join(result, "\n")) case CreateChannelResultSeparatorBoth: return c.SendString(strings.Join(result, "\r\n")) case CreateChannelResultSeparatorTab: return c.SendString(strings.Join(result, "\t")) } } return errors.New("无效的返回类型") } type CreateChannelResultType string const ( CreateChannelResultTypeJson CreateChannelResultType = "json" CreateChannelResultTypeText CreateChannelResultType = "text" ) type CreateChannelResultSeparator string const ( CreateChannelResultSeparatorEnter CreateChannelResultSeparator = "enter" CreateChannelResultSeparatorLine CreateChannelResultSeparator = "line" CreateChannelResultSeparatorBoth CreateChannelResultSeparator = "both" CreateChannelResultSeparatorTab CreateChannelResultSeparator = "tab" ) // endregion // region RemoveChannels type RemoveChannelsReq struct { ByIds []int32 `json:"by_ids" validate:"required"` } func RemoveChannels(c *fiber.Ctx) error { req := new(RemoveChannelsReq) if err := c.BodyParser(req); err != nil { return err } // 获取用户信息 auth, ok := c.Locals("auth").(*services.AuthContext) if !ok { return errors.New("user not found") } // 删除通道 err := services.Channel.RemoveChannels(c.Context(), auth, req.ByIds...) if err != nil { return err } return c.SendStatus(fiber.StatusOK) } // endregion