PluginProbe
SendWP / 0.0.2
SendWP v0.0.2
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 0.0.2, at includes/functions.php

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