PluginProbe
SendWP / 1.1
SendWP v1.1
trunk 0.0.1 0.0.2 0.0.3 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.1 1.2.10 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3 1.3.1 1.4.4 1.4.5 1.4.6 1.4.8
sendwp / includes / functions.php

functions.php in SendWP 1.1, at includes/functions.php

204 lines 5.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 function sendwp_get_server_url()
4 {
5 $server_url = ( defined('SENDWP_SERVER_URL') ) ? SENDWP_SERVER_URL : 'https://app.sendwp.com';
6 return trailingslashit( $server_url );
7 }
8
9 function sendwp_get_request_auth_header()
10 {
11 return 'Basic ' . base64_encode( sendwp_get_client_name() . ':' . sendwp_get_client_secret() );
12 }
13
14 function sendwp_get_client_name()
15 {
16 $site_url = get_site_url();
17 return parse_url( $site_url, PHP_URL_HOST );
18 }
19 function sendwp_get_client_url()
20 {
21 return get_site_url();
22 }
23
24 function sendwp_get_client_redirect()
25 {
26 return add_query_arg('page', 'sendwp', get_admin_url(null, 'tools.php') );
27 }
28
29 function sendwp_get_client_secret()
30 {
31 $secret = get_option( 'sendwp_client_secret' );
32 if(!$secret) {
33 $secret = sendwp_generate_secret();
34 sendwp_set_client_secret($secret);
35 }
36 return $secret;
37 }
38
39 function sendwp_set_client_secret( $secret )
40 {
41 return update_option( 'sendwp_client_secret', $secret );
42 }
43
44 function sendwp_generate_secret( $length = 40 )
45 {
46 if( 0 >= $length ) $length = 40; // Min key length.
47 if( 255 <= $length ) $length = 255; // Max key length.
48
49 $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
50 $random_string = '';
51 for ( $i = 0; $i < $length; $i ++ ) {
52 $random_string .= $characters[ rand( 0, strlen( $characters ) - 1 ) ];
53 }
54
55 return $random_string;
56 }
57
58 function sendwp_connect_client()
59 {
60 update_option('sendwp_client_connected', '1');
61 }
62
63 function sendwp_disconnect_client()
64 {
65 update_option('sendwp_client_connected', '0');
66 }
67
68 function sendwp_client_connected()
69 {
70 $connected = get_option('sendwp_client_connected', '0');
71 if ('1' == $connected) {
72 $connected = true;
73 } else {
74 $connected = false;
75 }
76 return $connected;
77 }
78
79 function sendwp_update_client_connection()
80 {
81 if (! isset($_POST['sendwp_server_request'])) return false;
82 if (! isset($_POST['sendwp_hash']) || ! sendwp_validate_hash($_POST['sendwp_hash'])) return false;
83 if ('disconnect' == $_POST['sendwp_server_request']) {
84 sendwp_disconnect_client();
85 } elseif ('connect' == $_POST['sendwp_server_request']) {
86 sendwp_connect_client();
87 }
88 }
89
90 function sendwp_get_client_status()
91 {
92 if (! isset($_POST['sendwp_request_status'])) return false;
93 if (! isset($_POST['sendwp_hash']) || ! sendwp_validate_hash($_POST['sendwp_hash'])) return false;
94 $response = [
95 'connected' => sendwp_client_connected(),
96 'enabled' => sendwp_forwarding_enabled()
97 ];
98 header('Content-Type: application/json');
99 echo json_encode($response);
100 die();
101 }
102
103 function sendwp_validate_hash( $hash )
104 {
105 return sendwp_generate_hash() === $hash;
106 }
107
108 function sendwp_generate_hash()
109 {
110 $data = sendwp_get_client_name() . sendwp_get_client_secret();
111 return hash('sha256', $data);
112 }
113
114 function sendwp_enable_forwarding()
115 {
116 update_option('sendwp_forwarding_enabled', '1');
117 }
118
119 function sendwp_disable_forwarding()
120 {
121 update_option('sendwp_forwarding_enabled', '0');
122 }
123
124 function sendwp_forwarding_disabled_notice()
125 {
126 if( isset( $_GET['page'] ) && 'sendwp' == $_GET['page'] ) return;
127
128 if (!sendwp_forwarding_enabled() ) {
129 wp_enqueue_style('sendwp-notices', plugins_url( 'assets/css/admin/notices.css', __DIR__));
130 include 'admin/views/disabled-notice.html.php';
131 }
132 }
133
134 function sendwp_forwarding_enabled()
135 {
136 $enabled = get_option('sendwp_forwarding_enabled', '1');
137 if ('1' == $enabled && sendwp_client_connected()) {
138 $enabled = true;
139 } else {
140 $enabled = false;
141 }
142 return $enabled;
143 }
144
145 function sendwp_maybe_disable_forwarding()
146 {
147 if (! isset($_POST['security'])) return false;
148 if (! wp_verify_nonce($_POST['security'], 'sendwp_settings_nonce')) return false;
149 if (isset($_POST['sendwp_forwarding'])) {
150 if ('enable' == $_POST['sendwp_forwarding']) {
151 sendwp_enable_forwarding();
152 } elseif('disable' == $_POST['sendwp_forwarding']) {
153 sendwp_disable_forwarding();
154 }
155 }
156 }
157
158 function sendwp_connect_pulse_monitor()
159 {
160 if (! wp_next_scheduled('sendwp_heartbeat')) {
161 wp_schedule_event(time(), 'daily', 'sendwp_heartbeat');
162 }
163 }
164
165 function sendwp_pulse_monitor()
166 {
167 if (get_transient('sendwp_pulse_monitor')) return false;
168 $status = 'unknown';
169 $request = \SendWP\API\Request::create('clients/status');
170 $response = $request->post( [] );
171
172 if(is_wp_error($response)){
173 set_transient('sendwp_pulse_monitor', $response->get_error_message(), 10 * MINUTE_IN_SECONDS);
174 return;
175 }
176
177 $response_body = wp_remote_retrieve_body($response);
178 set_transient('sendwp_pulse_monitor', $response_body, 10 * MINUTE_IN_SECONDS);
179
180 $status = json_decode($response_body);
181
182 if ('not-connected' == $status->message) {
183 sendwp_disconnect_client();
184 } elseif ('connected' == $status->message) {
185 sendwp_connect_client();
186 }
187 }
188
189 function sendwp_last_pulse()
190 {
191 $timestamp = time();
192 $saved = get_option('_transient_timeout_sendwp_pulse_monitor', $timestamp);
193 if($saved > $timestamp) {
194 $timestamp = $saved - 600;
195 }
196 $iso_date = date( 'Y-m-d H:i:s', $timestamp );
197 $local_timestamp = get_date_from_gmt( $iso_date, 'F j, Y, g:i a' );
198 return $local_timestamp;
199 }
200
201 function sendwp_last_pulse_result()
202 {
203 return get_option('_transient_sendwp_pulse_monitor', 'unknown');
204 }