PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.49
E2Pdf – Export Pdf Tool for WordPress v1.32.49
1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 1.06.02 1.07.11 1.08.00 1.08.06 All 72 releases
← All changes | classes/model/e2pdf-api.php +149 -82 1.08.061.32.49 View file →
@@ -1,14 +1,12 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Api Model
5 - *
6 - * @copyright Copyright 2017 https://e2pdf.com
7 - * @license GPL v2
8 - * @version 1
9 - * @link https://e2pdf.com
10 - * @since 0.00.01
4 + * File: /model/e2pdf-api.php
5 + *
6 + * @package E2Pdf
7 + * @license GPLv3
8 + * @link https://e2pdf.com
11 9 */
12 10 if (!defined('ABSPATH')) {
13 11 die('Access denied.');
14 12 }
@@ -14,36 +12,54 @@
14 12 }
15 13
16 14 class Model_E2pdf_Api extends Model_E2pdf_Model {
17 15
18 - protected $api = NULL;
16 + protected $api;
19 17
20 - function __construct() {
18 + public function __construct() {
21 19 parent::__construct();
20 + $this->api = new stdClass();
22 21 }
23 22
24 - /**
25 - * Submit API Request to Remote Server
26 - *
27 - * @param string $key - Return Value by Key
28 - *
29 - * @return mixed
30 - */
31 - public function request($key = false) {
32 - if ($this->api->action) {
23 + // request
24 + public function request($key = false, $api_server = false) {
33 25
34 - $data = array(
35 - 'api_url' => site_url(),
36 - 'api_license_key' => $this->get_license(),
37 - 'api_processor' => get_option('e2pdf_processor') ? get_option('e2pdf_processor') : 0,
38 - );
26 + $api_action = $this->get('action');
27 + if ($api_action) {
39 28
40 - $api_server = apply_filters('e2pdf_api_server', 'api.e2pdf.com');
41 - $request_url = 'https://' . $api_server . '/' . $this->api->action;
29 + // fix for upgrade via dashboard -> updates
30 + if (method_exists($this->helper, 'set_time_limit')) {
31 + $this->helper->set_time_limit((int) get_option('e2pdf_request_timeout', '420'));
32 + }
42 33
43 - $timeout = get_option('e2pdf_connection_timeout') === false ? 300 : get_option('e2pdf_connection_timeout');
34 + // fix for upgrade via dashboard -> updates
35 + if ($api_action == 'update/info' && !method_exists($this->helper, 'get_site_url')) {
36 + return [];
37 + }
44 38
45 - $ch = curl_init($request_url);
39 + $api_protocol = get_option('e2pdf_api_protocol', '0');
40 + $api_processor = get_option('e2pdf_debug', '0') && get_option('e2pdf_processor', '0') ? get_option('e2pdf_processor', '0') : '0';
41 + if ($api_processor == '2') {
42 + $api_version = '1.16.19';
43 + } else {
44 + $api_version = '1.32.39';
45 + }
46 +
47 + $data = [
48 + 'api_url' => $this->helper->get_site_url(),
49 + 'api_license_key' => $this->get_license(),
50 + 'api_processor' => apply_filters('e2pdf_api_processor', $api_processor),
51 + 'api_version' => apply_filters('e2pdf_api_version', $api_version),
52 + 'api_protocol' => $api_protocol,
53 + ];
54 + if (!$api_server) {
55 + $api_server = $this->get_api_server();
56 + }
57 + $request_url = 'https://' . $api_server . '/' . $api_action;
58 +
59 + // phpcs:disable WordPress.WP.AlternativeFunctions
60 + $ch = apply_filters('e2pdf_api_connection', curl_init($request_url));
61 + curl_setopt($ch, CURLOPT_USERAGENT, $this->helper->get_site_url());
46 62 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
47 63 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
48 64 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
49 65 if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
@@ -48,48 +64,81 @@
48 64 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
49 65 if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
50 66 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
51 67 }
52 - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
68 + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (int) get_option('e2pdf_connection_timeout', '300'));
53 69
54 - if (!empty($this->api->data)) {
55 - $data = array_merge($data, $this->api->data);
70 + if (defined('E2PDF_API_PROXY')) {
71 + curl_setopt($ch, CURLOPT_PROXY, E2PDF_API_PROXY);
56 72 }
73 + if (defined('E2PDF_API_PROXYPORT')) {
74 + curl_setopt($ch, CURLOPT_PROXYPORT, E2PDF_API_PROXYPORT);
75 + }
76 + if (defined('E2PDF_API_PROXYUSERPWD')) {
77 + curl_setopt($ch, CURLOPT_PROXYUSERPWD, E2PDF_API_PROXYUSERPWD);
78 + }
79 + if (defined('E2PDF_API_PROXYTYPE')) {
80 + curl_setopt($ch, CURLOPT_PROXYTYPE, E2PDF_API_PROXYTYPE);
81 + }
82 + if (defined('E2PDF_API_PROXYAUTH')) {
83 + curl_setopt($ch, CURLOPT_PROXYAUTH, E2PDF_API_PROXYAUTH);
84 + }
85 + if (class_exists('CURLFile')) {
86 + if (defined('CURLOPT_SAFE_UPLOAD')) {
87 + curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
88 + }
89 + } else {
90 + if (defined('CURLOPT_SAFE_UPLOAD')) {
91 + curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
92 + }
93 + }
57 94
58 - curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
95 + if (!empty($this->get('data'))) {
96 + $data = array_merge($data, $this->get('data'));
97 + }
98 + if ($api_action === 'template/upload2') {
99 + curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
100 + } else {
101 + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
102 + }
59 103
60 104 $json = curl_exec($ch);
61 105 $curl_errno = curl_errno($ch);
62 106 $curl_error = curl_error($ch);
107 + $curl_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
108 + $curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
63 109 curl_close($ch);
110 + // phpcs:enable
64 111
65 112 if ($curl_errno > 0) {
66 - $response['error'] = "[{$curl_errno}] {$curl_error}";
113 + if ($this->get_api_server() === $this->get_api_server($api_server)) {
114 + $response['error'] = '[' . $curl_errno . '] ' . $curl_error;
115 + } else {
116 + return $this->request($key, $this->get_api_server($api_server));
117 + }
118 + } elseif ($curl_code < 200 || $curl_code >= 300) {
119 + if ($this->get_api_server() === $this->get_api_server($api_server)) {
120 + $response['error'] = '[' . $curl_code . ']';
121 + } else {
122 + return $this->request($key, $this->get_api_server($api_server));
123 + }
67 124 } else {
68 -
69 - if (($this->api->action === 'template/build' || $this->api->action === 'template/parse') && get_option('e2pdf_developer')) {
70 - if (in_array($this->helper->get_ip(), Model_E2pdf_Options::get_option('e2pdf_developer_ips'))) {
71 - $data = array(
72 - 'request_url' => $request_url,
73 - 'data' => $data,
74 - 'response' => $json
75 - );
76 - var_dump("<PRE>");
77 - var_dump($data);
78 - die();
125 + if ($api_protocol == '1' && strpos($curl_type, 'application/octet-stream') !== false) {
126 + $response['file'] = $json;
127 + } else {
128 + $result = json_decode($json, true);
129 + $response = isset($result['response']) ? $result['response'] : null;
130 + if (!empty($response['file'])) {
131 + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
132 + $response['file'] = base64_decode($response['file']);
79 133 }
80 134 }
81 -
82 - $result = json_decode($json, true);
83 - $response = $result['response'];
84 -
85 -
86 - if (($this->api->action === 'common/activate' || $this->api->action === 'license/update') && isset($response['license_key'])) {
87 - update_option('e2pdf_license', $response['license_key']);
88 - }
89 -
90 135 if (empty($response)) {
91 - $response['error'] = __("Something went wrong!", "e2pdf");
136 + if ($this->get_api_server() === $this->get_api_server($api_server)) {
137 + $response['error'] = __('Something went wrong!', 'e2pdf');
138 + } else {
139 + return $this->request($key, $this->get_api_server($api_server));
140 + }
92 141 }
93 142 }
94 143
95 144 if ($key) {
@@ -98,8 +147,22 @@
98 147 } else {
99 148 return false;
100 149 }
101 150 } else {
151 + if ($api_action == 'template/build' || ($api_action == 'license/info' && $this->get('reload') === false)) {
152 + if (isset($response['error']) && $response['error'] == 'Site Url Not Found. Please try to "Reactivate" plugin.') {
153 + $license = $this->helper->load('license');
154 + if ($license && method_exists($license, 'reactivate') && $license->reactivate()) {
155 + return $this->request($key, $api_server);
156 + }
157 + }
158 + if (isset($response['error']) && $response['error'] == 'License Key does not match this site. Please correct License Key to continue usage.') {
159 + $license = $this->helper->load('license');
160 + if ($license && method_exists($license, 'restore') && $license->restore()) {
161 + return $this->request($key, $api_server);
162 + }
163 + }
164 + }
102 165 return $response;
103 166 }
104 167 }
105 168 return false;
@@ -104,25 +167,38 @@
104 167 }
105 168 return false;
106 169 }
107 170
108 - /**
109 - * Remove API Request options
110 - */
111 - public function flush() {
112 - $this->api = null;
171 + public function get_api_server($api_server = false) {
172 + if (!$api_server) {
173 + if (defined('E2PDF_API_SERVER')) {
174 + $api_server = E2PDF_API_SERVER;
175 + } else {
176 + $api_server = apply_filters('e2pdf_api', get_option('e2pdf_api', 'api.e2pdf.com'));
177 + }
178 + return $api_server;
179 + }
180 + switch ($api_server) {
181 + case 'api.e2pdf.com':
182 + $api_server = 'api2.e2pdf.com';
183 + break;
184 + case 'api2.e2pdf.com':
185 + $api_server = 'api3.e2pdf.com';
186 + break;
187 + case 'api3.e2pdf.com':
188 + $api_server = 'api4.e2pdf.com';
189 + break;
190 + case 'api4.e2pdf.com':
191 + $api_server = 'api.e2pdf.com';
192 + break;
193 + default:
194 + break;
195 + }
196 + return $api_server;
113 197 }
114 198
115 - /**
116 - * Set options for API Request
117 - *
118 - * @param string $key - Key
119 - * @param mixed $value - Value
120 - */
199 + // set
121 200 public function set($key, $value = false) {
122 - if (!$this->api) {
123 - $this->api = new stdClass();
124 - }
125 201 if (is_array($key)) {
126 202 foreach ($key as $attr => $value) {
127 203 $this->api->$attr = $value;
128 204 }
@@ -128,25 +204,16 @@
128 204 }
129 205 } else {
130 206 $this->api->$key = $value;
131 207 }
208 + return $this;
132 209 }
133 210
134 - /**
135 - * Get License
136 - *
137 - * @return string - License Key
138 - */
139 - public function get_license() {
140 - return get_option('e2pdf_license');
211 + public function get($key) {
212 + return property_exists($this->api, $key) ? $this->api->$key : null;
141 213 }
142 214
143 - /**
144 - * Get Domain
145 - *
146 - * @return string - Domain
147 - */
148 - public function get_domain() {
149 - return site_url();
215 + // get license
216 + public function get_license() {
217 + return get_option('e2pdf_license', false);
150 218 }
151 -
152 219 }