Skip to content

Instantly share code, notes, and snippets.

@ggffggg00
Created September 5, 2023 03:17
Show Gist options
  • Save ggffggg00/d1d296cf03ae67377f8984c5a5a6121f to your computer and use it in GitHub Desktop.
Save ggffggg00/d1d296cf03ae67377f8984c5a5a6121f to your computer and use it in GitHub Desktop.
function envoy_on_request(request)
-- Получение сертификата клиента из заголовка 'x-forwarded-client-cert'
local clientCert = request:headers():get("x-forwarded-client-cert")
-- Парсинг сертификата клиента для извлечения SAN
local sanList = {}
for token in string.gmatch(clientCert, "[^,]+") do
-- Проверка, что текущий токен относится к SAN
if string.match(token, "DNS:") or string.match(token, "IP:") then
-- Удаляем префикс 'DNS:' или 'IP:' из токена
local sanitizedToken = string.gsub(token, "DNS:", "")
sanitizedToken = string.gsub(sanitizedToken, "IP:", "")
-- Добавляем токен в список SAN
table.insert(sanList, sanitizedToken)
end
end
-- Проверка, наличия нужного значения SAN в списке
local valueToCheck = "external.example.com"
local isValueFound = false
for _, sanValue in ipairs(sanList) do
if sanValue == valueToCheck then
isValueFound = true
break
end
end
if isValueFound then
-- Добавление заголовка 'X-segment: External' в проксируемый запрос
request:headers():add("X-segment", "External")
end
-- Отправка запроса далее по цепочке фильтров
return request:headers():get(":authority")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment