/**
* @return WP_Error|string secret_2 on success, WP_Error( error_code => error_code, error_message => error description, error_data => status code ) on failure
*
* Possible error_codes:
*
* verify_secret_1_missing
* verify_secret_1_malformed
* verify_secrets_missing: No longer have verification secrets stored
* verify_secrets_mismatch: stored secret_1 does not match secret_1 sent by Jetpack.WordPress.com
*/
function verify_action($params)
{
$action = $params[0];
$verify_secret = $params[1];
if (empty($verify_secret)) {
return $this->error(new Jetpack_Error('verify_secret_1_missing', sprintf('The required "%s" parameter is missing.', 'secret_1'), 400));
} else {
if (!is_string($verify_secret)) {
return $this->error(new Jetpack_Error('verify_secret_1_malformed', sprintf('The required "%s" parameter is malformed.', 'secret_1'), 400));
}
}
$secrets = Jetpack::get_option($action);
if (!$secrets || is_wp_error($secrets)) {
Jetpack::delete_option($action);
return $this->error(new Jetpack_Error('verify_secrets_missing', 'Verification took too long', 400));
}
@(list($secret_1, $secret_2, $secret_eol) = explode(':', $secrets));
if (empty($secret_1) || empty($secret_2) || empty($secret_eol) || $secret_eol < time()) {
Jetpack::delete_option($action);
return $this->error(new Jetpack_Error('verify_secrets_missing', 'Verification took too long', 400));
}
if ($verify_secret !== $secret_1) {
Jetpack::delete_option($action);
return $this->error(new Jetpack_Error('verify_secrets_mismatch', 'Secret mismatch', 400));
}
Jetpack::delete_option($action);
return $secret_2;
}