github.com/polarismesh/polaris@v1.17.8/apiserver/httpserver/config/server.go (about)

     1  /**
     2   * Tencent is pleased to support the open source community by making Polaris available.
     3   *
     4   * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
     5   *
     6   * Licensed under the BSD 3-Clause License (the "License");
     7   * you may not use this file except in compliance with the License.
     8   * You may obtain a copy of the License at
     9   *
    10   * https://opensource.org/licenses/BSD-3-Clause
    11   *
    12   * Unless required by applicable law or agreed to in writing, software distributed
    13   * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    14   * CONDITIONS OF ANY KIND, either express or implied. See the License for the
    15   * specific language governing permissions and limitations under the License.
    16   */
    17  
    18  package config
    19  
    20  import (
    21  	"github.com/emicklei/go-restful/v3"
    22  
    23  	"github.com/polarismesh/polaris/admin"
    24  	"github.com/polarismesh/polaris/apiserver"
    25  	"github.com/polarismesh/polaris/apiserver/httpserver/docs"
    26  	"github.com/polarismesh/polaris/config"
    27  	"github.com/polarismesh/polaris/namespace"
    28  )
    29  
    30  // HTTPServer
    31  type HTTPServer struct {
    32  	maintainServer  admin.AdminOperateServer
    33  	namespaceServer namespace.NamespaceOperateServer
    34  	configServer    config.ConfigCenterServer
    35  }
    36  
    37  // NewServer 创建配置中心的 HttpServer
    38  func NewServer(
    39  	maintainServer admin.AdminOperateServer,
    40  	namespaceServer namespace.NamespaceOperateServer,
    41  	configServer config.ConfigCenterServer) *HTTPServer {
    42  	return &HTTPServer{
    43  		maintainServer:  maintainServer,
    44  		namespaceServer: namespaceServer,
    45  		configServer:    configServer,
    46  	}
    47  }
    48  
    49  const (
    50  	defaultReadAccess   string = "default-read"
    51  	defaultAccess       string = "default"
    52  	configConsoleAccess string = "config"
    53  )
    54  
    55  // GetConfigAccessServer 获取配置中心接口
    56  func (h *HTTPServer) GetConsoleAccessServer(include []string) (*restful.WebService, error) {
    57  	consoleAccess := []string{defaultAccess}
    58  
    59  	ws := new(restful.WebService)
    60  	ws.Path("/config/v1").Consumes(restful.MIME_JSON, "multipart/form-data").Produces(restful.MIME_JSON, "application/zip")
    61  
    62  	if len(include) == 0 {
    63  		include = consoleAccess
    64  	}
    65  
    66  	for _, item := range include {
    67  		switch item {
    68  		case defaultReadAccess:
    69  			h.addDefaultReadAccess(ws)
    70  			// 仅为了兼容老的客户端发现路径
    71  			h.addDiscover(ws)
    72  		case configConsoleAccess, defaultAccess:
    73  			// 仅为了兼容老的客户端发现路径
    74  			h.addDiscover(ws)
    75  			h.addDefaultAccess(ws)
    76  		}
    77  	}
    78  
    79  	return ws, nil
    80  }
    81  
    82  func (h *HTTPServer) addDefaultReadAccess(ws *restful.WebService) {
    83  	ws.Route(docs.EnrichQueryConfigFileGroupsApiDocs(ws.GET("/configfilegroups").To(h.QueryConfigFileGroups)))
    84  	ws.Route(docs.EnrichGetConfigFileApiDocs(ws.GET("/configfiles").To(h.GetConfigFile)))
    85  	ws.Route(docs.EnrichQueryConfigFilesByGroupApiDocs(ws.GET("/configfiles/by-group").To(h.SearchConfigFile)))
    86  	ws.Route(docs.EnrichSearchConfigFileApiDocs(ws.GET("/configfiles/search").To(h.SearchConfigFile)))
    87  	ws.Route(docs.EnrichGetAllConfigEncryptAlgorithms(ws.GET("/configfiles/encryptalgorithm").
    88  		To(h.GetAllConfigEncryptAlgorithms)))
    89  	ws.Route(docs.EnrichGetConfigFileReleaseApiDocs(ws.GET("/configfiles/release").To(h.GetConfigFileRelease)))
    90  	ws.Route(docs.EnrichGetConfigFileReleaseHistoryApiDocs(ws.GET("/configfiles/releasehistory").
    91  		To(h.GetConfigFileReleaseHistory)))
    92  	ws.Route(docs.EnrichGetAllConfigFileTemplatesApiDocs(ws.GET("/configfiletemplates").To(h.GetAllConfigFileTemplates)))
    93  }
    94  
    95  func (h *HTTPServer) addDefaultAccess(ws *restful.WebService) {
    96  	// 配置文件组
    97  	ws.Route(docs.EnrichCreateConfigFileGroupApiDocs(ws.POST("/configfilegroups").To(h.CreateConfigFileGroup)))
    98  	ws.Route(docs.EnrichUpdateConfigFileGroupApiDocs(ws.PUT("/configfilegroups").To(h.UpdateConfigFileGroup)))
    99  	ws.Route(docs.EnrichDeleteConfigFileGroupApiDocs(ws.DELETE("/configfilegroups").To(h.DeleteConfigFileGroup)))
   100  	ws.Route(docs.EnrichQueryConfigFileGroupsApiDocs(ws.GET("/configfilegroups").To(h.QueryConfigFileGroups)))
   101  
   102  	// 配置文件
   103  	ws.Route(docs.EnrichCreateConfigFileApiDocs(ws.POST("/configfiles").To(h.CreateConfigFile)))
   104  	ws.Route(docs.EnrichGetConfigFileApiDocs(ws.GET("/configfiles").To(h.GetConfigFile)))
   105  	ws.Route(docs.EnrichQueryConfigFilesByGroupApiDocs(ws.GET("/configfiles/by-group").To(h.SearchConfigFile)))
   106  	ws.Route(docs.EnrichSearchConfigFileApiDocs(ws.GET("/configfiles/search").To(h.SearchConfigFile)))
   107  	ws.Route(docs.EnrichUpdateConfigFileApiDocs(ws.PUT("/configfiles").To(h.UpdateConfigFile)))
   108  	ws.Route(docs.EnrichDeleteConfigFileApiDocs(ws.DELETE("/configfiles").To(h.DeleteConfigFile)))
   109  	ws.Route(docs.EnrichBatchDeleteConfigFileApiDocs(ws.POST("/configfiles/batchdelete").To(h.BatchDeleteConfigFile)))
   110  	ws.Route(docs.EnrichExportConfigFileApiDocs(ws.POST("/configfiles/export").To(h.ExportConfigFile)))
   111  	ws.Route(docs.EnrichImportConfigFileApiDocs(ws.POST("/configfiles/import").To(h.ImportConfigFile)))
   112  	ws.Route(docs.EnrichGetAllConfigEncryptAlgorithms(ws.GET("/configfiles/encryptalgorithm").
   113  		To(h.GetAllConfigEncryptAlgorithms)))
   114  
   115  	// 配置文件发布
   116  	ws.Route(docs.EnrichPublishConfigFileApiDocs(ws.POST("/configfiles/release").To(h.PublishConfigFile)))
   117  	ws.Route(docs.EnrichGetConfigFileReleaseApiDocs(ws.PUT("/configfiles/releases/rollback").To(h.RollbackConfigFileReleases)))
   118  	ws.Route(docs.EnrichGetConfigFileReleaseApiDocs(ws.GET("/configfiles/release").To(h.GetConfigFileRelease)))
   119  	ws.Route(docs.EnrichGetConfigFileReleaseApiDocs(ws.GET("/configfiles/releases").To(h.GetConfigFileReleases)))
   120  	ws.Route(docs.EnrichGetConfigFileReleaseApiDocs(ws.POST("/configfiles/releases/delete").To(h.DeleteConfigFileReleases)))
   121  	ws.Route(docs.EnrichGetConfigFileReleaseApiDocs(ws.GET("/configfiles/release/versions").To(h.GetConfigFileReleaseVersions)))
   122  	ws.Route(docs.EnrichUpsertAndReleaseConfigFileApiDocs(ws.POST("/configfiles/createandpub").To(h.UpsertAndReleaseConfigFile)))
   123  
   124  	// 配置文件发布历史
   125  	ws.Route(docs.EnrichGetConfigFileReleaseHistoryApiDocs(ws.GET("/configfiles/releasehistory").
   126  		To(h.GetConfigFileReleaseHistory)))
   127  
   128  	// config file template
   129  	ws.Route(docs.EnrichGetAllConfigFileTemplatesApiDocs(ws.GET("/configfiletemplates").To(h.GetAllConfigFileTemplates)))
   130  	ws.Route(docs.EnrichCreateConfigFileTemplateApiDocs(ws.POST("/configfiletemplates").To(h.CreateConfigFileTemplate)))
   131  }
   132  
   133  // GetClientAccessServer 获取配置中心接口
   134  func (h *HTTPServer) GetClientAccessServer(ws *restful.WebService, include []string) error {
   135  	clientAccess := []string{apiserver.DiscoverAccess, apiserver.CreateFileAccess}
   136  
   137  	if len(include) == 0 {
   138  		include = clientAccess
   139  	}
   140  
   141  	for _, item := range include {
   142  		switch item {
   143  		case apiserver.CreateFileAccess:
   144  			h.addCreateFile(ws)
   145  		case apiserver.DiscoverAccess:
   146  			h.addDiscover(ws)
   147  		}
   148  	}
   149  
   150  	return nil
   151  }
   152  
   153  func (h *HTTPServer) addDiscover(ws *restful.WebService) {
   154  	ws.Route(docs.EnrichGetConfigFileForClientApiDocs(ws.GET("/GetConfigFile").To(h.ClientGetConfigFile)))
   155  	ws.Route(docs.EnrichWatchConfigFileForClientApiDocs(ws.POST("/WatchConfigFile").To(h.ClientWatchConfigFile)))
   156  	ws.Route(docs.EnrichGetConfigFileMetadataList(ws.POST("/GetConfigFileMetadataList").To(h.GetConfigFileMetadataList)))
   157  }
   158  
   159  func (h *HTTPServer) addCreateFile(ws *restful.WebService) {
   160  }