Merge pull request #3637 from MarioZet23/custom-traefik-middlewares
feat: Allow custom traefik middlewares
This commit is contained in:
@@ -325,38 +325,16 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
$labels->push('traefik.http.middlewares.gzip.compress=true');
|
$labels->push('traefik.http.middlewares.gzip.compress=true');
|
||||||
$labels->push('traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https');
|
$labels->push('traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https');
|
||||||
|
|
||||||
$basic_auth = false;
|
$middlewares_from_labels = collect([]);
|
||||||
$basic_auth_middleware = null;
|
|
||||||
$redirect = false;
|
|
||||||
$redirect_middleware = null;
|
|
||||||
|
|
||||||
if ($serviceLabels) {
|
if ($serviceLabels) {
|
||||||
$basic_auth = $serviceLabels->contains(function ($value) {
|
$middlewares_from_labels = $serviceLabels->map(function ($item) {
|
||||||
return str_contains($value, 'basicauth');
|
if (preg_match('/traefik\.http\.middlewares\.(.*?)(\.|$)/', $item, $matches)) {
|
||||||
});
|
|
||||||
if ($basic_auth) {
|
|
||||||
$basic_auth_middleware = $serviceLabels
|
|
||||||
->map(function ($item) {
|
|
||||||
if (preg_match('/traefik\.http\.middlewares\.(.*?)\.basicauth\.users/', $item, $matches)) {
|
|
||||||
return $matches[1];
|
return $matches[1];
|
||||||
}
|
}
|
||||||
})
|
return null;
|
||||||
->filter()
|
})->filter()
|
||||||
->first();
|
->unique();
|
||||||
}
|
|
||||||
$redirect = $serviceLabels->contains(function ($value) {
|
|
||||||
return str_contains($value, 'redirectregex');
|
|
||||||
});
|
|
||||||
if ($redirect) {
|
|
||||||
$redirect_middleware = $serviceLabels
|
|
||||||
->map(function ($item) {
|
|
||||||
if (preg_match('/traefik\.http\.middlewares\.(.*?)\.redirectregex\.regex/', $item, $matches)) {
|
|
||||||
return $matches[1];
|
|
||||||
}
|
|
||||||
})
|
|
||||||
->filter()
|
|
||||||
->first();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
foreach ($domains as $loop => $domain) {
|
foreach ($domains as $loop => $domain) {
|
||||||
try {
|
try {
|
||||||
@@ -404,20 +382,15 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
$labels->push("traefik.http.services.{$https_label}.loadbalancer.server.port=$port");
|
$labels->push("traefik.http.services.{$https_label}.loadbalancer.server.port=$port");
|
||||||
}
|
}
|
||||||
if ($path !== '/') {
|
if ($path !== '/') {
|
||||||
|
// Middleware handling
|
||||||
$middlewares = collect([]);
|
$middlewares = collect([]);
|
||||||
if ($is_stripprefix_enabled && ! str($image)->contains('ghost')) {
|
if ($is_stripprefix_enabled && !str($image)->contains('ghost')) {
|
||||||
$labels->push("traefik.http.middlewares.{$https_label}-stripprefix.stripprefix.prefixes={$path}");
|
$labels->push("traefik.http.middlewares.{$https_label}-stripprefix.stripprefix.prefixes={$path}");
|
||||||
$middlewares->push("{$https_label}-stripprefix");
|
$middlewares->push("{$https_label}-stripprefix");
|
||||||
}
|
}
|
||||||
if ($is_gzip_enabled) {
|
if ($is_gzip_enabled) {
|
||||||
$middlewares->push('gzip');
|
$middlewares->push('gzip');
|
||||||
}
|
}
|
||||||
if ($basic_auth && $basic_auth_middleware) {
|
|
||||||
$middlewares->push($basic_auth_middleware);
|
|
||||||
}
|
|
||||||
if ($redirect && $redirect_middleware) {
|
|
||||||
$middlewares->push($redirect_middleware);
|
|
||||||
}
|
|
||||||
if (str($image)->contains('ghost')) {
|
if (str($image)->contains('ghost')) {
|
||||||
$middlewares->push('redir-ghost');
|
$middlewares->push('redir-ghost');
|
||||||
}
|
}
|
||||||
@@ -425,10 +398,13 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
$labels = $labels->merge($redirect_to_non_www);
|
$labels = $labels->merge($redirect_to_non_www);
|
||||||
$middlewares->push($to_non_www_name);
|
$middlewares->push($to_non_www_name);
|
||||||
}
|
}
|
||||||
if ($redirect_direction === 'www' && ! str($host)->startsWith('www.')) {
|
if ($redirect_direction === 'www' && !str($host)->startsWith('www.')) {
|
||||||
$labels = $labels->merge($redirect_to_www);
|
$labels = $labels->merge($redirect_to_www);
|
||||||
$middlewares->push($to_www_name);
|
$middlewares->push($to_www_name);
|
||||||
}
|
}
|
||||||
|
$middlewares_from_labels->each(function ($middleware_name) use ($middlewares) {
|
||||||
|
$middlewares->push($middleware_name);
|
||||||
|
});
|
||||||
if ($middlewares->isNotEmpty()) {
|
if ($middlewares->isNotEmpty()) {
|
||||||
$middlewares = $middlewares->join(',');
|
$middlewares = $middlewares->join(',');
|
||||||
$labels->push("traefik.http.routers.{$https_label}.middlewares={$middlewares}");
|
$labels->push("traefik.http.routers.{$https_label}.middlewares={$middlewares}");
|
||||||
@@ -438,12 +414,6 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
if ($is_gzip_enabled) {
|
if ($is_gzip_enabled) {
|
||||||
$middlewares->push('gzip');
|
$middlewares->push('gzip');
|
||||||
}
|
}
|
||||||
if ($basic_auth && $basic_auth_middleware) {
|
|
||||||
$middlewares->push($basic_auth_middleware);
|
|
||||||
}
|
|
||||||
if ($redirect && $redirect_middleware) {
|
|
||||||
$middlewares->push($redirect_middleware);
|
|
||||||
}
|
|
||||||
if (str($image)->contains('ghost')) {
|
if (str($image)->contains('ghost')) {
|
||||||
$middlewares->push('redir-ghost');
|
$middlewares->push('redir-ghost');
|
||||||
}
|
}
|
||||||
@@ -455,6 +425,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
$labels = $labels->merge($redirect_to_www);
|
$labels = $labels->merge($redirect_to_www);
|
||||||
$middlewares->push($to_www_name);
|
$middlewares->push($to_www_name);
|
||||||
}
|
}
|
||||||
|
$middlewares_from_labels->each(function ($middleware_name) use ($middlewares) {
|
||||||
|
$middlewares->push($middleware_name);
|
||||||
|
});
|
||||||
if ($middlewares->isNotEmpty()) {
|
if ($middlewares->isNotEmpty()) {
|
||||||
$middlewares = $middlewares->join(',');
|
$middlewares = $middlewares->join(',');
|
||||||
$labels->push("traefik.http.routers.{$https_label}.middlewares={$middlewares}");
|
$labels->push("traefik.http.routers.{$https_label}.middlewares={$middlewares}");
|
||||||
@@ -490,12 +463,6 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
if ($is_gzip_enabled) {
|
if ($is_gzip_enabled) {
|
||||||
$middlewares->push('gzip');
|
$middlewares->push('gzip');
|
||||||
}
|
}
|
||||||
if ($basic_auth && $basic_auth_middleware) {
|
|
||||||
$middlewares->push($basic_auth_middleware);
|
|
||||||
}
|
|
||||||
if ($redirect && $redirect_middleware) {
|
|
||||||
$middlewares->push($redirect_middleware);
|
|
||||||
}
|
|
||||||
if (str($image)->contains('ghost')) {
|
if (str($image)->contains('ghost')) {
|
||||||
$middlewares->push('redir-ghost');
|
$middlewares->push('redir-ghost');
|
||||||
}
|
}
|
||||||
@@ -507,6 +474,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
$labels = $labels->merge($redirect_to_www);
|
$labels = $labels->merge($redirect_to_www);
|
||||||
$middlewares->push($to_www_name);
|
$middlewares->push($to_www_name);
|
||||||
}
|
}
|
||||||
|
$middlewares_from_labels->each(function ($middleware_name) use ($middlewares) {
|
||||||
|
$middlewares->push($middleware_name);
|
||||||
|
});
|
||||||
if ($middlewares->isNotEmpty()) {
|
if ($middlewares->isNotEmpty()) {
|
||||||
$middlewares = $middlewares->join(',');
|
$middlewares = $middlewares->join(',');
|
||||||
$labels->push("traefik.http.routers.{$http_label}.middlewares={$middlewares}");
|
$labels->push("traefik.http.routers.{$http_label}.middlewares={$middlewares}");
|
||||||
@@ -516,12 +486,6 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
if ($is_gzip_enabled) {
|
if ($is_gzip_enabled) {
|
||||||
$middlewares->push('gzip');
|
$middlewares->push('gzip');
|
||||||
}
|
}
|
||||||
if ($basic_auth && $basic_auth_middleware) {
|
|
||||||
$middlewares->push($basic_auth_middleware);
|
|
||||||
}
|
|
||||||
if ($redirect && $redirect_middleware) {
|
|
||||||
$middlewares->push($redirect_middleware);
|
|
||||||
}
|
|
||||||
if (str($image)->contains('ghost')) {
|
if (str($image)->contains('ghost')) {
|
||||||
$middlewares->push('redir-ghost');
|
$middlewares->push('redir-ghost');
|
||||||
}
|
}
|
||||||
@@ -533,6 +497,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
|
|||||||
$labels = $labels->merge($redirect_to_www);
|
$labels = $labels->merge($redirect_to_www);
|
||||||
$middlewares->push($to_www_name);
|
$middlewares->push($to_www_name);
|
||||||
}
|
}
|
||||||
|
$middlewares_from_labels->each(function ($middleware_name) use ($middlewares) {
|
||||||
|
$middlewares->push($middleware_name);
|
||||||
|
});
|
||||||
if ($middlewares->isNotEmpty()) {
|
if ($middlewares->isNotEmpty()) {
|
||||||
$middlewares = $middlewares->join(',');
|
$middlewares = $middlewares->join(',');
|
||||||
$labels->push("traefik.http.routers.{$http_label}.middlewares={$middlewares}");
|
$labels->push("traefik.http.routers.{$http_label}.middlewares={$middlewares}");
|
||||||
|
|||||||
Reference in New Issue
Block a user