Upload via GUI (360 Dateien)
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* plugin_login.php
|
||||
*
|
||||
* Gemeinsamer Einstieg für Kunden-Anmeldungen über Plugins (zum Beispiel authentik): GET ?p=<Plugin>&e=<Name>. Das Plugin braucht die
|
||||
* Berechtigung "auth.customer" und meldet die Adresse mit plugin_register_customer_login() an. Hier steht nur, was für alle gleich ist:
|
||||
* Weiterleitung, Anmeldung (und, wenn das Plugin es erlaubt, Anlegen des Kundenkontos), Fehler und Begrenzung der Aufrufe.
|
||||
* Die Rückkehr vom Dienst kann auch über staff/plugin_login.php kommen (gleiche Rückkehr-Adresse für alle).
|
||||
*/
|
||||
require_once __DIR__ . '/includes/bootstrap.php';
|
||||
|
||||
header('Cache-Control: no-store');
|
||||
header('Referrer-Policy: no-referrer');
|
||||
|
||||
function plugin_customer_login_back(string $message): never
|
||||
{
|
||||
flash('error', $message);
|
||||
redirect('/login.php');
|
||||
}
|
||||
|
||||
if (current_user()) redirect('/home.php');
|
||||
|
||||
$slug = (string) ($_GET['p'] ?? '');
|
||||
$endpoint = (string) ($_GET['e'] ?? '');
|
||||
$handler = plugin_state()['customer_logins'][$slug][$endpoint] ?? null;
|
||||
if (!is_callable($handler)) {
|
||||
http_response_code(404);
|
||||
echo 'Unbekannte Anmelde-Adresse.';
|
||||
exit;
|
||||
}
|
||||
if (!rate_limit_check('plugin_customer_login', client_ip(), 40, 15)) plugin_customer_login_back('Zu viele Anmeldeversuche. Bitte versuchen Sie es in einigen Minuten erneut.');
|
||||
|
||||
$result = plugin_guard($slug, fn() => $handler(['query' => $_GET, 'ip' => client_ip()]), null);
|
||||
if (!is_array($result)) plugin_customer_login_back('Die Anmeldung ist gerade nicht möglich. Bitte versuchen Sie es später noch einmal oder melden Sie sich mit E-Mail und Passwort an.');
|
||||
|
||||
if (!empty($result['redirect'])) {
|
||||
$url = (string) $result['redirect'];
|
||||
if (!plugin_login_external_url_ok($url)) plugin_customer_login_back('Die Adresse des Anmeldedienstes ist ungültig.');
|
||||
header('Location: ' . $url, true, 302);
|
||||
exit;
|
||||
}
|
||||
if (!empty($result['customer']) && is_array($result['customer'])) plugin_customer_login_finish($slug, $result['customer']);
|
||||
plugin_customer_login_back(mb_substr((string) ($result['error'] ?? 'Die Anmeldung wurde abgelehnt.'), 0, 300));
|
||||
Reference in New Issue
Block a user