feat(apisix): add Cloudron package
- Implements Apache APISIX packaging for Cloudron platform. - Includes Dockerfile, CloudronManifest.json, and start.sh. - Configured to use Cloudron's etcd addon. 🤖 Generated with Gemini CLI Co-Authored-By: Gemini <noreply@google.com>
This commit is contained in:
139
CloudronPackages/APISIX/apisix-source/apisix/admin/plugins.lua
Normal file
139
CloudronPackages/APISIX/apisix-source/apisix/admin/plugins.lua
Normal file
@@ -0,0 +1,139 @@
|
||||
--
|
||||
-- Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
-- contributor license agreements. See the NOTICE file distributed with
|
||||
-- this work for additional information regarding copyright ownership.
|
||||
-- The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
-- (the "License"); you may not use this file except in compliance with
|
||||
-- the License. You may obtain a copy of the License at
|
||||
--
|
||||
-- http://www.apache.org/licenses/LICENSE-2.0
|
||||
--
|
||||
-- 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.
|
||||
--
|
||||
local require = require
|
||||
local core = require("apisix.core")
|
||||
local check_schema = require("apisix.plugin").check_schema
|
||||
local ipairs = ipairs
|
||||
local table_sort = table.sort
|
||||
local table_insert = table.insert
|
||||
local get_uri_args = ngx.req.get_uri_args
|
||||
local plugin_get_all = require("apisix.plugin").get_all
|
||||
local plugin_get_http = require("apisix.plugin").get
|
||||
local plugin_get_stream = require("apisix.plugin").get_stream
|
||||
local encrypt_conf = require("apisix.plugin").encrypt_conf
|
||||
local pairs = pairs
|
||||
|
||||
local _M = {}
|
||||
|
||||
|
||||
function _M.check_schema(plugins_conf, schema_type)
|
||||
local ok, err = check_schema(plugins_conf, schema_type, false)
|
||||
if ok then
|
||||
for name, conf in pairs(plugins_conf) do
|
||||
encrypt_conf(name, conf, schema_type)
|
||||
end
|
||||
end
|
||||
return ok, err
|
||||
end
|
||||
|
||||
|
||||
function _M.get(name)
|
||||
local arg = get_uri_args()
|
||||
-- If subsystem is passed inside args then it should be oneOf: http / stream.
|
||||
local subsystem = arg["subsystem"] or "http"
|
||||
if subsystem ~= "http" and subsystem ~= "stream" then
|
||||
return 400, {error_msg = "unsupported subsystem: "..subsystem}
|
||||
end
|
||||
|
||||
-- arg all to be deprecated
|
||||
if (arg and arg["all"] == "true") then
|
||||
core.log.warn("query parameter \"all\" will be deprecated soon.")
|
||||
local http_plugins, stream_plugins = plugin_get_all({
|
||||
version = true,
|
||||
priority = true,
|
||||
schema = true,
|
||||
metadata_schema = true,
|
||||
consumer_schema = true,
|
||||
type = true,
|
||||
scope = true,
|
||||
})
|
||||
|
||||
if arg["subsystem"] == "stream" then
|
||||
return 200, stream_plugins
|
||||
end
|
||||
|
||||
return 200, http_plugins
|
||||
end
|
||||
|
||||
local plugin
|
||||
|
||||
if subsystem == "http" then
|
||||
plugin = plugin_get_http(name)
|
||||
else
|
||||
plugin = plugin_get_stream(name)
|
||||
end
|
||||
|
||||
if not plugin then
|
||||
local err = "plugin not found in subsystem " .. subsystem
|
||||
core.log.warn(err)
|
||||
return 404, {error_msg = err}
|
||||
end
|
||||
|
||||
local json_schema = plugin.schema
|
||||
if arg and arg["schema_type"] == "consumer" then
|
||||
json_schema = plugin.consumer_schema
|
||||
end
|
||||
|
||||
if not json_schema then
|
||||
return 400, {error_msg = "not found schema"}
|
||||
end
|
||||
|
||||
return 200, json_schema
|
||||
end
|
||||
|
||||
|
||||
function _M.get_plugins_list(subsystem)
|
||||
local http_plugins
|
||||
local stream_plugins
|
||||
if subsystem == "http" then
|
||||
http_plugins = core.config.local_conf().plugins
|
||||
else
|
||||
stream_plugins = core.config.local_conf().stream_plugins
|
||||
end
|
||||
|
||||
local priorities = {}
|
||||
local success = {}
|
||||
if http_plugins then
|
||||
for i, name in ipairs(http_plugins) do
|
||||
local plugin = plugin_get_http(name)
|
||||
if plugin and plugin.priority then
|
||||
priorities[name] = plugin.priority
|
||||
table_insert(success, name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if stream_plugins then
|
||||
for i, name in ipairs(stream_plugins) do
|
||||
local plugin = plugin_get_stream(name)
|
||||
if plugin and plugin.priority then
|
||||
priorities[name] = plugin.priority
|
||||
table_insert(success, name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function cmp(x, y)
|
||||
return priorities[x] > priorities[y]
|
||||
end
|
||||
|
||||
table_sort(success, cmp)
|
||||
return success
|
||||
end
|
||||
|
||||
|
||||
return _M
|
Reference in New Issue
Block a user