NonceChecker::check_nonce()   D
last analyzed

Complexity

Conditions 20
Paths 52

Size

Total Lines 88
Code Lines 39

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 420

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 20
eloc 39
nc 52
nop 0
dl 0
loc 88
ccs 0
cts 30
cp 0
crap 420
rs 4.1666
c 3
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php namespace EmailLog\Core\Request;
2
3
use EmailLog\Core\Loadie;
4
use EmailLog\Core\UI\Page\LogListPage;
5
6
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
7
8
/**
9
 * Check nonce for all Email Log requests.
10
 *
11
 * @since 2.0.0
12
 */
13
class NonceChecker implements Loadie {
14
15
	/**
16
	 * Setup hooks.
17
	 *
18
	 * @inheritdoc
19
	 */
20
	public function load() {
21
		add_action( 'admin_init', array( $this, 'check_nonce' ) );
22
	}
23
24
	/**
25
	 * Check nonce for all Email Log Requests.
26
	 * All Email Log Requests will have the `el_` prefix and
27
	 * nonce would be available at `el_{action_name}_nonce`.
28
	 *
29
	 * Bulk Action keys.
30
	 * action => Bulk actions from the top dropdown.
31
	 * action2 => Bulk actions from the bottom dropdown.
32
	 */
33
	public function check_nonce() {
34
		if ( ! isset( $_POST['el-action'] ) && ! isset( $_REQUEST['action'] ) && ! isset( $_REQUEST['action2'] ) ) {
35
			return;
36
		}
37
38
		if ( isset( $_POST['el-action'] ) ) {
39
			$action = sanitize_text_field( $_POST['el-action'] );
40
41
			$allowed_actions = [
42
				'el-download-system-info',
43
				'el_license_activate',
44
				'el_license_deactivate',
45
				'el_bundle_license_activate',
46
				'el_bundle_license_deactivate',
47
				'el-log-list-export',
48
				'el-log-list-export-all',
49
				'el-export-logs-with-columns'
50
			];
51
52
			if ( ! in_array( $action, $allowed_actions ) ) {
53
				return;
54
			}
55
56
			if ( ! isset( $_POST[ $action . '_nonce' ] ) ) {
57
				return;
58
			}
59
60
			if ( ! wp_verify_nonce( $_POST[ $action . '_nonce' ], $action ) ) {
61
				return;
62
			}
63
		}
64
65
		if ( isset( $_REQUEST['action'] ) || isset( $_REQUEST['action2'] ) ) {
66
			$action = sanitize_text_field( $_REQUEST['action'] );
67
68
			if ( '-1' === $action ) {
69
				if ( ! isset( $_REQUEST['action2'] ) ) {
70
					return;
71
				}
72
73
				$action = sanitize_text_field( $_REQUEST['action2'] );
74
			}
75
76
			if ( strpos( $action, 'el-log-list-' ) !== 0 && strpos( $action, 'el-cron-' ) !== 0 ) {
77
				return;
78
			}
79
80
			if ( strpos( $action, 'el-log-list-' ) === 0 ) {
81
				if ( ! isset( $_REQUEST[ LogListPage::LOG_LIST_ACTION_NONCE_FIELD ] ) ) {
82
					return;
83
				}
84
85
				if ( ! wp_verify_nonce( $_REQUEST[ LogListPage::LOG_LIST_ACTION_NONCE_FIELD ], LogListPage::LOG_LIST_ACTION_NONCE ) ) {
86
					return;
87
				}
88
			}
89
90
			if ( strpos( $action, 'el-cron-' ) === 0 ) {
91
				if ( ! isset( $_REQUEST[ $action . '-nonce-field' ] ) ) {
92
					return;
93
				}
94
95
				if ( ! wp_verify_nonce( $_REQUEST[ $action . '-nonce-field' ], $action . '-nonce' ) ) {
96
					return;
97
				}
98
			}
99
		}
100
101
		/**
102
		 * Perform `el` action.
103
		 * Nonce check has already happened at this point.
104
		 *
105
		 * @since 2.0.0
106
		 *
107
		 * @param string $action   Action name.
108
		 * @param array  $_REQUEST Request data.
109
		 */
110
		do_action( 'el_action', $action, $_REQUEST );
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $action does not seem to be defined for all execution paths leading up to this point.
Loading history...
111
112
		/**
113
		 * Perform `el` action.
114
		 * Nonce check has already happened at this point.
115
		 *
116
		 * @since 2.0.0
117
		 *
118
		 * @param array $_REQUEST Request data.
119
		 */
120
		do_action( $action, $_REQUEST );
121
	}
122
}
123