v1.0.1
This commit is contained in:
parent
212d64abfa
commit
b8e17df2db
17 changed files with 1145 additions and 732 deletions
|
|
@ -185,7 +185,18 @@ class Two_Factor_Extended_REST_API {
|
|||
$role = $request->get_param( 'role' );
|
||||
|
||||
$compliance = two_factor_extended()->get_compliance_report();
|
||||
$stats = $compliance->get_compliance_stats( array( 'role' => $role ) );
|
||||
|
||||
if ( null === $compliance ) {
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
'success' => false,
|
||||
'message' => __( 'Compliance report module is not available.', 'two-factor-extended' ),
|
||||
),
|
||||
500
|
||||
);
|
||||
}
|
||||
|
||||
$stats = $compliance->get_compliance_stats( array( 'role' => is_string( $role ) ? $role : '' ) );
|
||||
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
|
|
@ -217,33 +228,54 @@ class Two_Factor_Extended_REST_API {
|
|||
public function get_users( WP_REST_Request $request ): WP_REST_Response {
|
||||
$role = $request->get_param( 'role' );
|
||||
$non_compliant_only = $request->get_param( 'non_compliant_only' );
|
||||
$role_string = is_string( $role ) ? $role : '';
|
||||
|
||||
$compliance = two_factor_extended()->get_compliance_report();
|
||||
|
||||
if ( null === $compliance ) {
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
'success' => false,
|
||||
'message' => __( 'Compliance report module is not available.', 'two-factor-extended' ),
|
||||
),
|
||||
500
|
||||
);
|
||||
}
|
||||
|
||||
if ( $non_compliant_only ) {
|
||||
$users = $compliance->get_non_compliant_users( array( 'role' => $role ) );
|
||||
$users = $compliance->get_non_compliant_users( array( 'role' => $role_string ) );
|
||||
} else {
|
||||
// Get all users with compliance status.
|
||||
$user_args = array( 'fields' => 'all' );
|
||||
|
||||
if ( ! empty( $role ) ) {
|
||||
$user_args['role'] = $role;
|
||||
if ( ! empty( $role_string ) ) {
|
||||
$user_args['role'] = $role_string;
|
||||
}
|
||||
|
||||
$all_users = get_users( $user_args );
|
||||
$all_users = get_users( $user_args );
|
||||
$enforcement = two_factor_extended()->get_enforcement();
|
||||
$users = array();
|
||||
$users = array();
|
||||
|
||||
if ( null === $enforcement ) {
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
'success' => false,
|
||||
'message' => __( 'Enforcement module is not available.', 'two-factor-extended' ),
|
||||
),
|
||||
500
|
||||
);
|
||||
}
|
||||
|
||||
foreach ( $all_users as $user ) {
|
||||
$required = $enforcement->get_required_providers_for_user( $user->ID );
|
||||
|
||||
$users[] = array(
|
||||
'user_id' => $user->ID,
|
||||
'user_login' => $user->user_login,
|
||||
'user_email' => $user->user_email,
|
||||
'roles' => Two_Factor_Extended_Role_Manager::get_user_roles( $user->ID ),
|
||||
'compliant' => empty( $required ) || $enforcement->user_meets_requirements( $user->ID, $required ),
|
||||
'in_grace' => $enforcement->is_in_grace_period( $user->ID ),
|
||||
'user_id' => $user->ID,
|
||||
'user_login' => $user->user_login,
|
||||
'user_email' => $user->user_email,
|
||||
'roles' => Two_Factor_Extended_Role_Manager::get_user_roles( $user->ID ),
|
||||
'compliant' => empty( $required ) || $enforcement->user_meets_requirements( $user->ID, $required ),
|
||||
'in_grace' => $enforcement->is_in_grace_period( $user->ID ),
|
||||
'grace_remaining' => $enforcement->get_grace_period_remaining_days( $user->ID ),
|
||||
);
|
||||
}
|
||||
|
|
@ -272,19 +304,45 @@ class Two_Factor_Extended_REST_API {
|
|||
$user_ids = $request->get_param( 'user_ids' );
|
||||
$reset_grace = $request->get_param( 'reset_grace' );
|
||||
|
||||
if ( ! is_array( $user_ids ) ) {
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
'success' => false,
|
||||
'message' => __( 'Invalid user_ids parameter.', 'two-factor-extended' ),
|
||||
),
|
||||
400
|
||||
);
|
||||
}
|
||||
|
||||
$enforcement = two_factor_extended()->get_enforcement();
|
||||
$processed = 0;
|
||||
$errors = array();
|
||||
|
||||
if ( null === $enforcement ) {
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
'success' => false,
|
||||
'message' => __( 'Enforcement module is not available.', 'two-factor-extended' ),
|
||||
),
|
||||
500
|
||||
);
|
||||
}
|
||||
|
||||
$processed = 0;
|
||||
$errors = array();
|
||||
|
||||
foreach ( $user_ids as $user_id ) {
|
||||
$user = get_userdata( $user_id );
|
||||
if ( ! is_numeric( $user_id ) ) {
|
||||
$errors[] = 'Invalid user_id value provided.';
|
||||
continue;
|
||||
}
|
||||
$user_id_int = (int) $user_id;
|
||||
$user = get_userdata( $user_id_int );
|
||||
|
||||
if ( ! $user ) {
|
||||
$errors[] = sprintf( 'User not found: %d', $user_id );
|
||||
$errors[] = sprintf( 'User not found: %d', $user_id_int );
|
||||
continue;
|
||||
}
|
||||
|
||||
$required = $enforcement->get_required_providers_for_user( $user_id );
|
||||
$required = $enforcement->get_required_providers_for_user( $user_id_int );
|
||||
|
||||
if ( empty( $required ) ) {
|
||||
$errors[] = sprintf( 'No 2FA requirements for user: %s', $user->user_login );
|
||||
|
|
@ -292,19 +350,23 @@ class Two_Factor_Extended_REST_API {
|
|||
}
|
||||
|
||||
// Set enforcement start date.
|
||||
update_user_meta( $user_id, Two_Factor_Extended_Enforcement::META_ENFORCEMENT_START, time() );
|
||||
update_user_meta( $user_id_int, Two_Factor_Extended_Enforcement::META_ENFORCEMENT_START, time() );
|
||||
|
||||
if ( $reset_grace ) {
|
||||
delete_user_meta( $user_id, Two_Factor_Extended_Enforcement::META_GRACE_NOTIFIED );
|
||||
delete_user_meta( $user_id_int, Two_Factor_Extended_Enforcement::META_GRACE_NOTIFIED );
|
||||
}
|
||||
|
||||
// Log the action.
|
||||
two_factor_extended()->get_audit_log()->log_event(
|
||||
'api_enforce',
|
||||
sprintf( 'REST API: Enforced 2FA for user %s', $user->user_login ),
|
||||
$user_id,
|
||||
array( 'required_providers' => $required )
|
||||
);
|
||||
$audit_log = two_factor_extended()->get_audit_log();
|
||||
|
||||
if ( null !== $audit_log ) {
|
||||
$audit_log->log_event(
|
||||
'api_enforce',
|
||||
sprintf( 'REST API: Enforced 2FA for user %s', $user->user_login ),
|
||||
$user_id_int,
|
||||
array( 'required_providers' => $required )
|
||||
);
|
||||
}
|
||||
|
||||
$processed++;
|
||||
}
|
||||
|
|
@ -333,26 +395,45 @@ class Two_Factor_Extended_REST_API {
|
|||
$processed = 0;
|
||||
$errors = array();
|
||||
|
||||
if ( ! is_array( $user_ids ) ) {
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
'success' => false,
|
||||
'message' => __( 'Invalid user_ids parameter.', 'two-factor-extended' ),
|
||||
),
|
||||
400
|
||||
);
|
||||
}
|
||||
|
||||
foreach ( $user_ids as $user_id ) {
|
||||
$user = get_userdata( $user_id );
|
||||
if ( ! is_numeric( $user_id ) ) {
|
||||
$errors[] = 'Invalid user_id value provided.';
|
||||
continue;
|
||||
}
|
||||
$user_id_int = (int) $user_id;
|
||||
$user = get_userdata( $user_id_int );
|
||||
|
||||
if ( ! $user ) {
|
||||
$errors[] = sprintf( 'User not found: %d', $user_id );
|
||||
$errors[] = sprintf( 'User not found: %d', $user_id_int );
|
||||
continue;
|
||||
}
|
||||
|
||||
// Reset enforcement start date.
|
||||
update_user_meta( $user_id, Two_Factor_Extended_Enforcement::META_ENFORCEMENT_START, time() );
|
||||
update_user_meta( $user_id_int, Two_Factor_Extended_Enforcement::META_ENFORCEMENT_START, time() );
|
||||
|
||||
// Clear grace period notified flag.
|
||||
delete_user_meta( $user_id, Two_Factor_Extended_Enforcement::META_GRACE_NOTIFIED );
|
||||
delete_user_meta( $user_id_int, Two_Factor_Extended_Enforcement::META_GRACE_NOTIFIED );
|
||||
|
||||
// Log the action.
|
||||
two_factor_extended()->get_audit_log()->log_event(
|
||||
'api_reset_grace',
|
||||
sprintf( 'REST API: Reset grace period for user %s', $user->user_login ),
|
||||
$user_id
|
||||
);
|
||||
$audit_log = two_factor_extended()->get_audit_log();
|
||||
|
||||
if ( null !== $audit_log ) {
|
||||
$audit_log->log_event(
|
||||
'api_reset_grace',
|
||||
sprintf( 'REST API: Reset grace period for user %s', $user->user_login ),
|
||||
$user_id_int
|
||||
);
|
||||
}
|
||||
|
||||
$processed++;
|
||||
}
|
||||
|
|
@ -377,13 +458,24 @@ class Two_Factor_Extended_REST_API {
|
|||
* @return WP_REST_Response Response object.
|
||||
*/
|
||||
public function get_report( WP_REST_Request $request ): WP_REST_Response {
|
||||
$role = $request->get_param( 'role' );
|
||||
$format = $request->get_param( 'format' );
|
||||
$role = $request->get_param( 'role' );
|
||||
$format = $request->get_param( 'format' );
|
||||
$role_string = is_string( $role ) ? $role : '';
|
||||
|
||||
$compliance = two_factor_extended()->get_compliance_report();
|
||||
|
||||
if ( null === $compliance ) {
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
'success' => false,
|
||||
'message' => __( 'Compliance report module is not available.', 'two-factor-extended' ),
|
||||
),
|
||||
500
|
||||
);
|
||||
}
|
||||
|
||||
if ( 'csv' === $format ) {
|
||||
$csv = $compliance->export_to_csv( array( 'role' => $role ) );
|
||||
$csv = $compliance->export_to_csv( array( 'role' => $role_string ) );
|
||||
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
|
|
@ -399,14 +491,14 @@ class Two_Factor_Extended_REST_API {
|
|||
}
|
||||
|
||||
// JSON format.
|
||||
$non_compliant = $compliance->get_non_compliant_users( array( 'role' => $role ) );
|
||||
$stats = $compliance->get_compliance_stats( array( 'role' => $role ) );
|
||||
$non_compliant = $compliance->get_non_compliant_users( array( 'role' => $role_string ) );
|
||||
$stats = $compliance->get_compliance_stats( array( 'role' => $role_string ) );
|
||||
|
||||
return new WP_REST_Response(
|
||||
array(
|
||||
'success' => true,
|
||||
'statistics' => $stats,
|
||||
'non_compliant' => $non_compliant,
|
||||
'success' => true,
|
||||
'statistics' => $stats,
|
||||
'non_compliant' => $non_compliant,
|
||||
),
|
||||
200
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in a new issue