Skip to content

Commit

Permalink
Merge branch 'main' into e2e-test
Browse files Browse the repository at this point in the history
  • Loading branch information
skerbis authored Jul 9, 2024
2 parents cd7e260 + 6236869 commit de6c117
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 115 deletions.
13 changes: 6 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,19 +78,18 @@ Deaktivieren mit `maintenance:off` oder `frontend:on`
* <http://www.redaxo.org>
* <https://github.com/FriendsOfREDAXO>

### Projekt-Lead
### Projekt-Team

[KLXM Crossmedia / Thomas Skerbis](https://klxm.de)
* [Alexander Walther](https://github.com/alxndr-w)
* [KLXM Crossmedia / Thomas Skerbis](https://klxm.de)

## Credits

Danke an:

* [Thorben](https://github.com/eaCe)
* [Christian Gehrke](https://github.com/chrison94)
* [Alexander Walther](https://github.com/alxndr-w)

Maintenance basiert auf dem out5-Plugin: Wartungsarbeiten
* [Oliver Kreischer](https://github.com/olien)
* u.v.a

<https://github.com/FriendsOfREDAXO/out5>

[concedra.de / Oliver Kreischer](http://concedra.de)
53 changes: 25 additions & 28 deletions boot.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,35 +13,32 @@
if (rex::isSetup()) {
return;
}
rex_extension::register('PACKAGES_INCLUDED', function () {
$addon = rex_addon::get('maintenance');

$addon = rex_addon::get('maintenance');
if (rex::isFrontend() && boolval($addon->getConfig('block_frontend'))) {



if(rex::isFrontend() && boolval($addon->getConfig('block_frontend'))) {

\FriendsOfREDAXO\Maintenance\Maintenance::checkFrontend();

}
if(rex::isBackend() && boolval($addon->getConfig('block_backend'))) {
\FriendsOfREDAXO\Maintenance\Maintenance::checkBackend();
}

if(rex::isBackend()) {
\FriendsOfREDAXO\Maintenance\Maintenance::setIndicators();
rex_view::addJsFile($addon->getAssetsUrl('dist/bootstrap-tokenfield.js'));
rex_view::addJsFile($addon->getAssetsUrl('dist/init_bootstrap-tokenfield.js'));
rex_view::addCssFile($addon->getAssetsUrl('dist/css/bootstrap-tokenfield.css'));

rex_view::addCssFile($addon->getAssetsUrl('css/maintenance.css'));

// Easter Egg: Editor festlegen
if ('maintenance/frontend' === rex_be_controller::getCurrentPage()) {
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
$suchmuster = 'class="###maintenance-settings-editor###"';
$ersetzen = strval(rex_config::get('maintenance', 'editor')); // @phpstan-ignore-line
$ep->setSubject(str_replace($suchmuster, $ersetzen, $ep->getSubject())); // @phpstan-ignore-line
});
\FriendsOfREDAXO\Maintenance\Maintenance::checkFrontend();
}
if (rex::isBackend() && boolval($addon->getConfig('block_backend'))) {
\FriendsOfREDAXO\Maintenance\Maintenance::checkBackend();
}

}
if (rex::isBackend()) {
\FriendsOfREDAXO\Maintenance\Maintenance::setIndicators();
rex_view::addJsFile($addon->getAssetsUrl('dist/bootstrap-tokenfield.js'));
rex_view::addJsFile($addon->getAssetsUrl('dist/init_bootstrap-tokenfield.js'));
rex_view::addCssFile($addon->getAssetsUrl('dist/css/bootstrap-tokenfield.css'));

rex_view::addCssFile($addon->getAssetsUrl('css/maintenance.css'));

// Easter Egg: Editor festlegen
if ('maintenance/frontend' === rex_be_controller::getCurrentPage()) {
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
$suchmuster = 'class="###maintenance-settings-editor###"';
$ersetzen = strval(rex_config::get('maintenance', 'editor')); // @phpstan-ignore-line
$ep->setSubject(str_replace($suchmuster, $ersetzen, $ep->getSubject())); // @phpstan-ignore-line
});
}
}
});
5 changes: 4 additions & 1 deletion install.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,14 @@

/* Eigene IP-Adresse in die erlaubten IP-Adressen hinzufügen, sofern nicht bereits vorhanden */
$allowed_ips = strval($addon->getConfig('allowed_ips')); // @phpstan-ignore-line
$allowed_ips = explode(',', $allowed_ips);
$allowed_ips = array_filter(explode(',', $allowed_ips)); // Leere Elemente entfernen
$ip = rex_server('REMOTE_ADDR', 'string', '');

if (!in_array($ip, $allowed_ips, true)) {
$allowed_ips[] = $ip;
$addon->setConfig('allowed_ips', implode(',', $allowed_ips));
} else {
$addon->setConfig('allowed_ips', implode(',', $allowed_ips)); // Sicherstellen, dass keine leeren Werte enthalten sind
}

/* Bei Installation standardmäßig ein zufälliges Secret generieren */
Expand Down
2 changes: 1 addition & 1 deletion lang/de_de.lang
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ maintenance_secret_label = Passwort
maintenance_secret_notice = Tragen Sie hier einen beliebigen Text ein (Passwort, Passphrase, z.B. <code>{0}</code>), das zum Aufrufen der Seite per Geheim-URL oder Passwort-Eingabe genutzt werden soll.

maintenance_redirect_frontend_to_url_label = Weiterleitung zu (optional)
maintenance_redirect_frontend_to_url_notice = URL angeben, zu der die Besucher weitergeleitet werden, wenn die Website im Wartungsmodus ist.
maintenance_redirect_frontend_to_url_notice = Nur bei Geheim-URL: URL angeben, zu der die Besucher weitergeleitet werden, wenn die Website im Wartungsmodus ist.

maintenance_block_frontend_session_label = Eingeloggte User ausperren
maintenance_block_frontend_session_notice =
Expand Down
60 changes: 35 additions & 25 deletions lib/Maintenance.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@
use rex_article;
use rex_clang;
use rex_response;
use rex_yrewrite;
use rex_session;
use rex_request;
use rex_unset_session;
use rex_backend_login;
use rex_user;
use rex_login;
use rex_server;
use rex_extension;
use rex_extension_point;
use rex_fragment;

class Maintenance
{
Expand All @@ -31,6 +42,7 @@ public function checkUrl(string $url): ?bool
}
return null;
}

/** @api */
public function checkIp(string $ip): ?bool
{
Expand All @@ -44,7 +56,7 @@ public function checkIp(string $ip): ?bool
/** @api */
public static function isIpAllowed(): bool
{
$addon = \rex_addon::get('maintenance');
$addon = rex_addon::get('maintenance');
$ip = rex_server('REMOTE_ADDR', 'string', '');
$allowedIps = strval($addon->getConfig('allowed_ips')); // @phpstan-ignore-line

Expand All @@ -59,9 +71,9 @@ public static function isIpAllowed(): bool
/** @api */
public static function isHostAllowed(): bool
{
$addon = \rex_addon::get('maintenance');
$addon = rex_addon::get('maintenance');
$host = rex_server('HTTP_HOST', 'string', '');
$allowedHosts = strval($addon->getConfig('allowed_hosts', false)); // @phpstan-ignore-line
$allowedHosts = strval($addon->getConfig('allowed_yrewrite_domains', false)); // @phpstan-ignore-line

if ($allowedHosts !== '') {
$allowedHostsArray = explode(',', $allowedHosts);
Expand All @@ -74,13 +86,13 @@ public static function isHostAllowed(): bool
/** @api */
public static function isYrewriteDomainAllowed(): bool
{
$addon = \rex_addon::get('maintenance');
if ($ydomain = \rex_yrewrite::getDomainByArticleId(rex_article::getCurrentId(), rex_clang::getCurrentId())) {
$addon = rex_addon::get('maintenance');
if ($ydomain = rex_yrewrite::getDomainByArticleId(rex_article::getCurrentId(), rex_clang::getCurrentId())) {
$yrewrite_domain = $ydomain->getHost();
$allowedDomains = strval($addon->getConfig('allowed_domains')); // @phpstan-ignore-line
$allowedDomains = strval($addon->getConfig('allowed_yrewrite_domains')); // @phpstan-ignore-line

if ($allowedDomains !== '') {
$allowedDomainsArray = explode(',', $allowedDomains);
$allowedDomainsArray = explode('|', $allowedDomains);
return in_array($yrewrite_domain, $allowedDomainsArray, true);
}
}
Expand All @@ -91,10 +103,10 @@ public static function isYrewriteDomainAllowed(): bool
/** @api */
public static function isSecretAllowed(): bool
{
$addon = \rex_addon::get('maintenance');
$addon = rex_addon::get('maintenance');

// Bereits mit richtigem Secret eingeloggt
if (\rex_session('maintenance_secret', 'string', '') === strval($addon->getConfig('maintenance_secret'))) { // @phpstan-ignore-line
if (rex_session('maintenance_secret', 'string', '') === strval($addon->getConfig('maintenance_secret'))) { // @phpstan-ignore-line
return true;
}

Expand All @@ -107,24 +119,24 @@ public static function isSecretAllowed(): bool
return true;
}

\rex_unset_session('maintenance_secret');
rex_unset_session('maintenance_secret');
return false;
}

/** @api */
public static function isUserAllowed(): bool
{
$addon = \rex_addon::get('maintenance');
\rex_backend_login::createUser();
$addon = rex_addon::get('maintenance');
rex_backend_login::createUser();
$user = rex::getUser();

// Admins dürfen sich immer einloggen
if ($user instanceof \rex_user && $user->isAdmin()) {
if ($user instanceof rex_user && $user->isAdmin()) {
return true;
}

// Eingeloggte REDAXO-Benutzer dürfen sich einloggen, wenn es in den Einstellungen erlaubt ist
if ($user instanceof \rex_user && boolval($addon->getConfig('allow_logged_in_users'))) {
if ($user instanceof rex_user && boolval($addon->getConfig('allow_logged_in_users'))) {
return true;
}

Expand All @@ -133,9 +145,9 @@ public static function isUserAllowed(): bool

public static function checkFrontend(): void
{
$addon = \rex_addon::get('maintenance');
$addon = rex_addon::get('maintenance');

\rex_login::startSession();
rex_login::startSession();

// Wenn die IP-Adresse erlaubt ist, Anfrage nicht sperren
if (self::isIpAllowed()) {
Expand Down Expand Up @@ -173,7 +185,7 @@ public static function checkFrontend(): void
// EP zum Erlauben von Medien-Dateien
$media = rex_get('rex_media_file', 'string', '');
$media_unblock = [];
$media_unblocklist = \rex_extension::registerPoint(new \rex_extension_point('MAINTENANCE_MEDIA_UNBLOCK_LIST', $media_unblock));
$media_unblocklist = rex_extension::registerPoint(new rex_extension_point('MAINTENANCE_MEDIA_UNBLOCK_LIST', $media_unblock));
// @phpstan-ignore-next-line
if (in_array($media, $media_unblocklist, true)) {
return;
Expand All @@ -183,8 +195,7 @@ public static function checkFrontend(): void
$redirect_url = strval($addon->getConfig('redirect_frontend_to_url')); // @phpstan-ignore-line
$responsecode = strval($addon->getConfig('http_response_code')); // @phpstan-ignore-line


$mpage = new \rex_fragment();
$mpage = new rex_fragment();
if (strval($addon->getConfig('authentification_mode')) === 'password') { // @phpstan-ignore-line
exit($mpage->parse('maintenance/frontend_password.php'));
} elseif ($redirect_url !== '') {
Expand All @@ -197,22 +208,21 @@ public static function checkFrontend(): void

public static function checkBackend(): void
{
$addon = \rex_addon::get('maintenance');
$addon = rex_addon::get('maintenance');


if (rex::getUser() instanceof \rex_user && !rex::getUser()->isAdmin() && !rex::getImpersonator()) {
if (rex::getUser() instanceof rex_user && !rex::getUser()->isAdmin() && !rex::getImpersonator()) {
if (strval($addon->getConfig('redirect_backend_to_url'))) { // @phpstan-ignore-line
rex_response::sendRedirect(strval($addon->getConfig('redirect_backend_to_url'))); // @phpstan-ignore-line
}
$mpage = new \rex_fragment();
$mpage = new rex_fragment();
header('HTTP/1.1 ' . strval($addon->getConfig('http_response_code'))); // @phpstan-ignore-line
exit($mpage->parse('maintenance/backend.php'));
}
}

public static function setIndicators(): void
{
$addon = \rex_addon::get('maintenance');
$addon = rex_addon::get('maintenance');
$page = $addon->getProperty('page');

if (boolval($addon->getConfig('block_backend'))) {
Expand All @@ -238,7 +248,7 @@ public static function showAnnouncement(): void
/** @api */
public static function getAnnouncement(): string
{
$addon = \rex_addon::get('maintenance');
$addon = rex_addon::get('maintenance');

if (strval($addon->getConfig('announcement_start_date')) !== '') { // @phpstan-ignore-line
$start = strtotime(strval($addon->getConfig('announcement_start_date'))); // @phpstan-ignore-line
Expand Down
2 changes: 1 addition & 1 deletion package.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package: maintenance
version: '3.0.0-dev2'
version: '3.0.0-beta1'
author: Friends Of REDAXO
supportpage: https://github.com/FriendsOfREDAXO/maintenance
title: translate:maintenance_title
Expand Down
Loading

0 comments on commit de6c117

Please sign in to comment.