|
|
|
package manage
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/mafanr/juz/api/manage/audit"
|
|
|
|
"github.com/mafanr/juz/api/manage/strategy"
|
|
|
|
"github.com/mafanr/juz/misc"
|
|
|
|
|
|
|
|
"github.com/mafanr/g"
|
|
|
|
|
|
|
|
"github.com/labstack/echo"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Manage struct{}
|
|
|
|
|
|
|
|
func (m *Manage) Start() {
|
|
|
|
g.ETCD.Register(g.APP_JUZ_MANAGE, misc.Conf.Etcd.Addrs, misc.Conf.Manage.Port)
|
|
|
|
|
|
|
|
e := echo.New()
|
|
|
|
//api管理
|
|
|
|
e.POST("/manage/api/query", m.QueryAPI, auth)
|
|
|
|
e.POST("/manage/api/count", m.CountAPI, auth)
|
|
|
|
e.POST("/manage/api/define", m.DefineAPI, auth)
|
|
|
|
e.POST("/manage/api/delete", m.DeleteAPI, auth)
|
|
|
|
e.POST("/manage/api/verifyParamRule", m.VerifyParamRule, auth)
|
|
|
|
|
|
|
|
e.POST("/manage/api/release", m.APIRelease, auth)
|
|
|
|
e.POST("/manage/api/batchRelease", m.APIBatchRelease, auth)
|
|
|
|
e.POST("/manage/api/offline", m.APIOffline, auth)
|
|
|
|
|
|
|
|
e.POST("/manage/api/batchStrategy", m.APIBatchStrategy, auth)
|
|
|
|
e.POST("/manage/api/batchDelStrategy", m.APIBatchDelStrategy, auth)
|
|
|
|
|
|
|
|
//策略管理
|
|
|
|
e.POST("/manage/strategy/create", strategy.Create, auth)
|
|
|
|
e.POST("/manage/strategy/update", strategy.Update, auth)
|
|
|
|
e.POST("/manage/strategy/load", strategy.Load, auth)
|
|
|
|
e.POST("/manage/strategy/change", strategy.Change, auth)
|
|
|
|
|
|
|
|
e.POST("/manage/strategy/delete", strategy.Delete, auth)
|
|
|
|
e.POST("/manage/strategy/query", strategy.Query, auth)
|
|
|
|
// e.POST("/manage/strategy/api", strategy.Api, auth)
|
|
|
|
|
|
|
|
// 审计日志
|
|
|
|
e.POST("/manage/auditLog/count", audit.Count, auth)
|
|
|
|
e.POST("/manage/auditLog/load", audit.Load, auth)
|
|
|
|
|
|
|
|
// API调试
|
|
|
|
e.POST("/manage/api/saveParam", m.APISaveParam, auth)
|
|
|
|
e.GET("/manage/api/queryParam", m.APIQueryParam, auth)
|
|
|
|
|
|
|
|
e.Logger.Fatal(e.Start(":" + misc.Conf.Manage.Port))
|
|
|
|
}
|
|
|
|
|
|
|
|
func auth(f echo.HandlerFunc) echo.HandlerFunc {
|
|
|
|
return func(c echo.Context) error {
|
|
|
|
if c.FormValue("admin_token") != misc.Conf.Common.AdminToken {
|
|
|
|
return c.JSON(http.StatusUnauthorized, g.Result{
|
|
|
|
Status: http.StatusUnauthorized,
|
|
|
|
ErrCode: g.ForbiddenC,
|
|
|
|
Message: g.ForbiddenE,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return f(c)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func validUserID(s string) bool {
|
|
|
|
i, err := strconv.Atoi(s)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
if i == 0 {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Manage) serviceExist(service string) bool {
|
|
|
|
// 验证service是否存在
|
|
|
|
var temp interface{}
|
|
|
|
query := fmt.Sprintf("select id from service where name ='%s'", service)
|
|
|
|
err := g.DB.Get(&temp, query)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Manage) canView(priv string) bool {
|
|
|
|
if priv == g.PRIV_GUEST {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Manage) canOperate(priv string) bool {
|
|
|
|
if priv == g.PRIV_ADMIN || priv == g.PRIV_OWNER {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
func isServiceCreator(userID string, service string) bool {
|
|
|
|
// 验证是否是service创建者
|
|
|
|
var temp interface{}
|
|
|
|
query := fmt.Sprintf("select id from service where name ='%s' and creator='%s'", service, userID)
|
|
|
|
err := g.DB.Get(&temp, query)
|
|
|
|
if err == nil {
|
|
|
|
// 是创建者
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
func getServiceByApiName(apiName string) string {
|
|
|
|
return strings.Split(apiName, ".")[0]
|
|
|
|
}
|