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 }