This commit is contained in:
Javier Casares 2026-03-28 09:59:03 +00:00
commit b8e17df2db
17 changed files with 1145 additions and 732 deletions

View file

@ -173,7 +173,7 @@ class Two_Factor_Extended_Network_Settings {
type="number"
id="network_grace_period"
name="network_settings[grace_period_days]"
value="<?php echo esc_attr( $settings['grace_period_days'] ?? 7 ); ?>"
value="<?php echo esc_attr( (string) ( isset( $settings['grace_period_days'] ) && is_numeric( $settings['grace_period_days'] ) ? (int) $settings['grace_period_days'] : 7 ) ); ?>"
min="0"
max="365"
class="small-text"
@ -204,11 +204,11 @@ class Two_Factor_Extended_Network_Settings {
*
* @since 0.1.0
*
* @param array $settings Current network settings.
* @param array<string, mixed> $settings Current network settings.
*/
private function render_super_admin_requirements( array $settings ): void {
$providers = Two_Factor_Extended_Provider_Detector::get_provider_names();
$super_admin_reqs = $settings['super_admin_requirements'] ?? array();
$providers = Two_Factor_Extended_Provider_Detector::get_provider_names();
$super_admin_reqs = isset( $settings['super_admin_requirements'] ) && is_array( $settings['super_admin_requirements'] ) ? $settings['super_admin_requirements'] : array();
if ( empty( $providers ) ) {
?>
@ -244,12 +244,12 @@ class Two_Factor_Extended_Network_Settings {
*
* @since 0.1.0
*
* @param array $settings Current network settings.
* @param array<string, mixed> $settings Current network settings.
*/
private function render_network_role_requirements( array $settings ): void {
$roles = Two_Factor_Extended_Role_Manager::get_all_roles();
$providers = Two_Factor_Extended_Provider_Detector::get_provider_names();
$network_reqs = $settings['role_requirements'] ?? array();
$network_reqs = isset( $settings['role_requirements'] ) && is_array( $settings['role_requirements'] ) ? $settings['role_requirements'] : array();
if ( empty( $providers ) ) {
?>
@ -274,7 +274,7 @@ class Two_Factor_Extended_Network_Settings {
<td><strong><?php echo esc_html( $role_name ); ?></strong></td>
<td>
<?php
$role_reqs = $network_reqs[ $role_slug ] ?? array();
$role_reqs = isset( $network_reqs[ $role_slug ] ) && is_array( $network_reqs[ $role_slug ] ) ? $network_reqs[ $role_slug ] : array();
foreach ( $providers as $class => $name ) :
?>
@ -308,7 +308,7 @@ class Two_Factor_Extended_Network_Settings {
}
// Verify nonce.
$nonce = isset( $_POST['two_factor_extended_network_nonce'] )
$nonce = isset( $_POST['two_factor_extended_network_nonce'] ) && is_string( $_POST['two_factor_extended_network_nonce'] )
? sanitize_text_field( wp_unslash( $_POST['two_factor_extended_network_nonce'] ) )
: '';
@ -344,7 +344,7 @@ class Two_Factor_Extended_Network_Settings {
*
* @since 0.1.0
*
* @return array Network settings.
* @return array<string, mixed> Network settings.
*/
public function get_network_settings(): array {
$defaults = array(
@ -357,6 +357,10 @@ class Two_Factor_Extended_Network_Settings {
$settings = get_site_option( TWO_FACTOR_EXTENDED_NETWORK_OPTION_SETTINGS, array() );
if ( ! is_array( $settings ) ) {
$settings = array();
}
return wp_parse_args( $settings, $defaults );
}
@ -365,9 +369,9 @@ class Two_Factor_Extended_Network_Settings {
*
* @since 0.1.0
*
* @param array $input Raw input.
* @param array<string, mixed> $input Raw input.
*
* @return array Sanitized settings.
* @return array<string, mixed> Sanitized settings.
*/
private function sanitize_network_settings( array $input ): array {
$sanitized = array();
@ -379,14 +383,19 @@ class Two_Factor_Extended_Network_Settings {
$sanitized['allow_site_override'] = ! empty( $input['allow_site_override'] );
// Grace period days.
if ( isset( $input['grace_period_days'] ) ) {
if ( isset( $input['grace_period_days'] ) && is_numeric( $input['grace_period_days'] ) ) {
$days = (int) $input['grace_period_days'];
$sanitized['grace_period_days'] = max( 0, min( 365, $days ) );
}
// Super admin requirements.
if ( isset( $input['super_admin_requirements'] ) && is_array( $input['super_admin_requirements'] ) ) {
$sanitized['super_admin_requirements'] = array_map( 'sanitize_text_field', $input['super_admin_requirements'] );
$sanitized['super_admin_requirements'] = array_map(
function ( mixed $item ): string {
return sanitize_text_field( is_string( $item ) ? $item : '' );
},
$input['super_admin_requirements']
);
}
// Role requirements.
@ -394,10 +403,15 @@ class Two_Factor_Extended_Network_Settings {
$sanitized['role_requirements'] = array();
foreach ( $input['role_requirements'] as $role => $providers ) {
$role_slug = sanitize_key( $role );
$role_slug = sanitize_key( is_string( $role ) ? $role : '' );
if ( Two_Factor_Extended_Role_Manager::role_exists( $role_slug ) && is_array( $providers ) ) {
$sanitized['role_requirements'][ $role_slug ] = array_map( 'sanitize_text_field', $providers );
$sanitized['role_requirements'][ $role_slug ] = array_map(
function ( mixed $item ): string {
return sanitize_text_field( is_string( $item ) ? $item : '' );
},
$providers
);
}
}
}