Skip to content

Commit

Permalink
Feat/license (#97)
Browse files Browse the repository at this point in the history
* fix: license检测

* feat: license限制优化

* 修复licene请求路由问题

* fix:移除不想干文件

Co-authored-by: tingfuyeh <tingfuyeh@tencent.com>
  • Loading branch information
chuntaojun and tingfuyeh authored Aug 31, 2022
1 parent 68b3d55 commit 5d42692
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 83 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,7 @@ log

vendor
.DS_Store

polaris_console_package
polaris-frontend.tar.gz
.vscode
30 changes: 16 additions & 14 deletions handlers/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,12 @@ type ServiceOwner struct {
}

// ReverseProxyForLogin 反向代理
func ReverseProxyForLogin(polarisServer *bootstrap.PolarisServer, conf *bootstrap.Config, check bool) gin.HandlerFunc {
func ReverseProxyForLogin(polarisServer *bootstrap.PolarisServer, conf *bootstrap.Config) gin.HandlerFunc {
return func(c *gin.Context) {
if ok := authority(c, conf); !ok {
return
}

if &conf.OAAuthority != nil && !conf.OAAuthority.EnableOAAuth && check {
// 检查负责人
if ok := checkOwner(c); !ok {
return
}
}

c.Request.Header.Add("Polaris-Token", polarisServer.PolarisToken)
c.Request.Header.Del("Cookie")

Expand All @@ -62,7 +55,7 @@ func ReverseProxyForLogin(polarisServer *bootstrap.PolarisServer, conf *bootstra
}

// ReverseProxyForServer 反向代理
func ReverseProxyForServer(polarisServer *bootstrap.PolarisServer, conf *bootstrap.Config, check bool) gin.HandlerFunc {
func ReverseProxyForServer(polarisServer *bootstrap.PolarisServer, conf *bootstrap.Config) gin.HandlerFunc {
return func(c *gin.Context) {
if ok := authority(c, conf); !ok {
c.JSON(http.StatusInternalServerError, gin.H{
Expand All @@ -80,13 +73,22 @@ func ReverseProxyForServer(polarisServer *bootstrap.PolarisServer, conf *bootstr
return
}

if &conf.OAAuthority != nil && conf.OAAuthority.EnableOAAuth && check {
// 检查负责人
if ok := checkOwner(c); !ok {
return
}
c.Request.Header.Add("Polaris-Token", polarisServer.PolarisToken)
c.Request.Header.Del("Cookie")

director := func(req *http.Request) {
req.URL.Scheme = "http"
req.URL.Host = polarisServer.Address
req.Host = polarisServer.Address
}
proxy := &httputil.ReverseProxy{Director: director}
proxy.ServeHTTP(c.Writer, c.Request)
}
}

// ReverseProxyNoAuthForServer 反向代理
func ReverseProxyNoAuthForServer(polarisServer *bootstrap.PolarisServer, conf *bootstrap.Config) gin.HandlerFunc {
return func(c *gin.Context) {
c.Request.Header.Add("Polaris-Token", polarisServer.PolarisToken)
c.Request.Header.Del("Cookie")

Expand Down
31 changes: 31 additions & 0 deletions router/admin_router.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* Tencent is pleased to support the open source community by making Polaris available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/

package router

import (
"github.com/gin-gonic/gin"
"github.com/polarismesh/polaris-console/bootstrap"
"github.com/polarismesh/polaris-console/handlers"
)

// AdminRouter 路由请求
func AdminRouter(webSvr *gin.Engine, config *bootstrap.Config) {
// 后端server路由组
v1 := webSvr.Group("/")
v1.GET("/license/status", handlers.ReverseProxyNoAuthForServer(&config.PolarisServer, config))
}
48 changes: 24 additions & 24 deletions router/auth_router.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,54 +28,54 @@ func AuthRouter(webSvr *gin.Engine, config *bootstrap.Config) {
// 后端server路由组
v1 := webSvr.Group(config.WebServer.AuthURL)
// 用户登陆
v1.POST("/user/login", handlers.ReverseProxyForLogin(&config.PolarisServer, config, false))
v1.POST("/user/login", handlers.ReverseProxyForLogin(&config.PolarisServer, config))
// 获取用户列表
v1.GET("/users", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/users", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 批量创建用户
v1.POST("/users", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/users", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 批量删除用户
v1.POST("/users/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/users/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 更新用户
v1.PUT("/user", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/user", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 更新用户密码
v1.PUT("/user/password", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/user/password", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查询用户Token信息
v1.GET("/user/token", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/user/token", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 更新用户Token可用状态
v1.PUT("/user/token/status", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/user/token/status", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 重置用户Token
v1.PUT("/user/token/refresh", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.PUT("/user/token/refresh", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 创建用户组
v1.POST("/usergroup", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.POST("/usergroup", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 批量更新用户组
v1.PUT("/usergroups", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.PUT("/usergroups", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 获取用户组列表
v1.GET("/usergroups", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/usergroups", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 批量删除用户组
v1.POST("/usergroups/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.POST("/usergroups/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查询用户组详细
v1.GET("/usergroup/detail", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/usergroup/detail", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查询用户组Token
v1.GET("/usergroup/token", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/usergroup/token", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 更新用户组Token可用状态
v1.PUT("/usergroup/token/status", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.PUT("/usergroup/token/status", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 重置用户组Token
v1.PUT("/usergroup/token/refresh", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/usergroup/token/refresh", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 创建鉴权策略
v1.POST("/auth/strategy", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/auth/strategy", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查询鉴权策略详细
v1.GET("/auth/strategy/detail", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.GET("/auth/strategy/detail", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 批量更新鉴权策略
v1.PUT("/auth/strategies", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/auth/strategies", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 批量删除鉴权策略
v1.POST("/auth/strategies/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/auth/strategies/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 获取鉴权策略列表
v1.GET("/auth/strategies", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.GET("/auth/strategies", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查看用户/用户组所能操作的所有资源列表数据
v1.GET("/auth/principal/resources", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.GET("/auth/principal/resources", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 获取鉴权开关状态信息
v1.GET("/auth/status", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.GET("/auth/status", handlers.ReverseProxyForServer(&config.PolarisServer, config))
}
30 changes: 15 additions & 15 deletions router/config_router.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,27 +28,27 @@ func ConfigRouter(r *gin.Engine, config *bootstrap.Config) {
// 配置中心
configV1 := r.Group(config.WebServer.ConfigURL)
// 配置文件组
configV1.POST("configfilegroups", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.GET("configfilegroups", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.DELETE("configfilegroups", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.PUT("configfilegroups", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.POST("configfilegroups", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.GET("configfilegroups", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.DELETE("configfilegroups", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.PUT("configfilegroups", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 配置文件
configV1.POST("configfiles", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.GET("configfiles", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.GET("configfiles/by-group", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.GET("configfiles/search", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.PUT("configfiles", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.DELETE("configfiles", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.DELETE("configfiles/batchdelete", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.POST("configfiles", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.GET("configfiles", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.GET("configfiles/by-group", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.GET("configfiles/search", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.PUT("configfiles", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.DELETE("configfiles", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.DELETE("configfiles/batchdelete", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 配置文件发布
configV1.POST("configfiles/release", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.GET("configfiles/release", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.POST("configfiles/release", handlers.ReverseProxyForServer(&config.PolarisServer, config))
configV1.GET("configfiles/release", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 配置文件发布历史
configV1.GET("configfiles/releasehistory", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.GET("configfiles/releasehistory", handlers.ReverseProxyForServer(&config.PolarisServer, config))

//配置文件模板
configV1.GET("configfiletemplates", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
configV1.GET("configfiletemplates", handlers.ReverseProxyForServer(&config.PolarisServer, config))
}
58 changes: 29 additions & 29 deletions router/discovery_router.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,64 +28,64 @@ func DiscoveryRouter(r *gin.Engine, config *bootstrap.Config) {
// 后端server路由组
v1 := r.Group(config.WebServer.NamingURL)
// 创建命名空间
v1.POST("/namespaces", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.POST("/namespaces", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 创建服务
v1.POST("/services", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.POST("/services", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 创建服务别名
v1.POST("/service/alias", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/service/alias", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 创建服务实例
v1.POST("/instances", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/instances", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 创建路由
v1.POST("/routings", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/routings", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 创建限流规则
v1.POST("/ratelimits", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/ratelimits", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 创建熔断规则
v1.POST("/circuitbreakers", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.POST("/circuitbreakers", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 创建熔断规则版本
v1.POST("/circuitbreakers/version", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/circuitbreakers/version", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 发布熔断规则(已经在前端对负责人信息进行校验)
v1.POST("/circuitbreakers/release", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.POST("/circuitbreakers/release", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 查看资源
v1.GET("/:resource", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/:resource", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查看服务绑定的熔断规则
v1.GET("/:resource/circuitbreaker", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/:resource/circuitbreaker", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查看master版本的规则
v1.GET("/:resource/master", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/:resource/master", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查看已发布的规则
v1.GET("/:resource/release", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/:resource/release", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查看规则的所有版本
v1.GET("/:resource/versions", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/:resource/versions", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查看服务和实例个数
v1.GET("/:resource/count", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/:resource/count", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查看服务别名
v1.GET("/:resource/aliases", handlers.ReverseProxyForServer(&config.PolarisServer, config, false))
v1.GET("/:resource/aliases", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 查看Token,需要鉴权
v1.GET("/:resource/token", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.GET("/:resource/token", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 修改资源
v1.PUT("/:resource", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/:resource", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 修改Token
v1.PUT("/:resource/token", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/:resource/token", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 修改服务别名
v1.PUT("/:resource/alias", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/:resource/alias", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 激活规则
v1.PUT("/:resource/enable", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.PUT("/:resource/enable", handlers.ReverseProxyForServer(&config.PolarisServer, config))

// 删除命名空间
v1.POST("/namespaces/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/namespaces/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 删除服务
v1.POST("/services/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/services/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 删除服务别名
v1.POST("/service/aliases/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/service/aliases/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 删除服务实例
v1.POST("/instances/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/instances/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 删除路由
v1.POST("/routings/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("/routings/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 删除限流规则
v1.POST("ratelimits/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("ratelimits/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 删除熔断规则
v1.POST("circuitbreakers/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("circuitbreakers/delete", handlers.ReverseProxyForServer(&config.PolarisServer, config))
// 解绑熔断规则
v1.POST("circuitbreakers/unbind", handlers.ReverseProxyForServer(&config.PolarisServer, config, true))
v1.POST("circuitbreakers/unbind", handlers.ReverseProxyForServer(&config.PolarisServer, config))
}
3 changes: 3 additions & 0 deletions router/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ func Router(config *bootstrap.Config) {
mv1.GET("/query_range", handlers.ReverseProxyForMonitorServer(&config.MonitorServer))
mv1.GET("/label/:resource/values", handlers.ReverseProxyForMonitorServer(&config.MonitorServer))

// 管理接口
AdminRouter(r, config)

// 鉴权请求
AuthRouter(r, config)

Expand Down
2 changes: 1 addition & 1 deletion web/src/polaris/common/ducks/Page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ insertCSS(
`,
)

const cacheDescribeLicenseStatus = once(describeLicenseStatus, ttl(30 * 60 * 1000))
const cacheDescribeLicenseStatus = once(describeLicenseStatus, ttl(30 * 1000))

type SELECTOR<T> = (globalState: any) => T
type CREATOR<T> = (value: T) => any
Expand Down

0 comments on commit 5d42692

Please sign in to comment.