2023-11-13 15:24:16 +00:00
< ? php
declare ( strict_types = 1 );
/**
2024-06-03 08:23:34 +00:00
* SPDX - FileCopyrightText : 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX - License - Identifier : AGPL - 3.0 - or - later
2023-11-13 15:24:16 +00:00
*/
namespace OCA\Settings\SetupChecks ;
use OCP\IL10N ;
use OCP\IRequest ;
use OCP\IURLGenerator ;
use OCP\Security\Bruteforce\IThrottler ;
use OCP\SetupCheck\ISetupCheck ;
use OCP\SetupCheck\SetupResult ;
class BruteForceThrottler implements ISetupCheck {
public function __construct (
private IL10N $l10n ,
private IURLGenerator $urlGenerator ,
private IRequest $request ,
private IThrottler $throttler ,
) {
}
public function getCategory () : string {
return 'system' ;
}
public function getName () : string {
2023-11-22 13:22:47 +00:00
return $this -> l10n -> t ( 'Brute-force Throttle' );
2023-11-13 15:24:16 +00:00
}
public function run () : SetupResult {
$address = $this -> request -> getRemoteAddress ();
if ( $address === '' ) {
2023-11-20 14:52:28 +00:00
if ( \OC :: $CLI ) {
/* We were called from CLI */
2023-11-20 15:12:19 +00:00
return SetupResult :: info ( $this -> l10n -> t ( 'Your remote address could not be determined.' ));
2023-11-20 14:52:28 +00:00
} else {
/* Should never happen */
2023-11-20 15:12:19 +00:00
return SetupResult :: error ( $this -> l10n -> t ( 'Your remote address could not be determined.' ));
2023-11-20 14:52:28 +00:00
}
2023-11-13 15:24:16 +00:00
} elseif ( $this -> throttler -> showBruteforceWarning ( $address )) {
return SetupResult :: error (
2023-11-22 13:22:47 +00:00
$this -> l10n -> t ( 'Your remote address was identified as "%s" and is brute-force throttled at the moment slowing down the performance of various requests. If the remote address is not your address this can be an indication that a proxy is not configured correctly.' , [ $address ]),
2023-11-13 15:24:16 +00:00
$this -> urlGenerator -> linkToDocs ( 'admin-reverse-proxy' )
);
} else {
return SetupResult :: success (
2023-11-22 13:22:47 +00:00
$this -> l10n -> t ( 'Your remote address "%s" is not brute-force throttled.' , [ $address ])
2023-11-13 15:24:16 +00:00
);
}
}
}