PluginProbe
ReviewX – Multi-Criteria Reviews for WooCommerce with Google Reviews & Schema / trunk
ReviewX – Multi-Criteria Reviews for WooCommerce with Google Reviews & Schema vtrunk
2.5.1 2.5.0 2.4.1 2.4.0 2.3.11 2.3.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 All 143 releases
reviewx / app / Rest / Controllers / AuthController.php

AuthController.php in ReviewX – Multi-Criteria Reviews for WooCommerce with Google Reviews & Schema trunk, at app/Rest/Controllers/AuthController.php

272 lines 11.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ReviewX\Rest\Controllers;
4
5 \defined("ABSPATH") || exit;
6 use Exception;
7 use ReviewX\Api\AuthApi;
8 use ReviewX\Handlers\MigrationRollback\MigrationPrompt;
9 use ReviewX\Handlers\MigrationRollback\ReviewXChecker;
10 use ReviewX\Models\Site;
11 use ReviewX\Services\Api\LoginService;
12 use ReviewX\Services\DataSyncService;
13 use ReviewX\Services\SettingService;
14 use ReviewX\Utilities\Auth\Client;
15 use ReviewX\Utilities\Helper;
16 use Throwable;
17 use ReviewX\WPDrill\Contracts\InvokableContract;
18 use ReviewX\WPDrill\Response;
19 use ReviewX\Services\CacheServices;
20 class AuthController implements InvokableContract
21 {
22 protected LoginService $loginService;
23 protected DataSyncService $dataSyncService;
24 protected CacheServices $cacheServices;
25 public function __construct()
26 {
27 $this->loginService = new LoginService();
28 $this->dataSyncService = new DataSyncService();
29 $this->cacheServices = new CacheServices();
30 }
31 public function __invoke()
32 {
33 }
34 /**
35 * @param $request
36 * @return Response
37 */
38 public function login($request)
39 {
40 $data = $request->get_params();
41 $payload = $this->buildAuthPayload($data);
42 //return Helper::rvxApi(['error' => 'Invalid request', 'data' => $payload])->fails('Invalid request', Response::HTTP_BAD_REQUEST);
43 try {
44 $response = (new AuthApi())->login($payload);
45 if ($response->getStatusCode() !== Response::HTTP_OK) {
46 return Helper::saasResponse($response);
47 }
48 $apiData = $response->getApiData();
49 $validation = $this->validateSite($apiData);
50 if ($validation !== \true) {
51 return $validation;
52 // return error response
53 }
54 $site_info = $this->prepareData($apiData);
55 $site = Site::where('uid', $site_info['uid'])->first();
56 if (!$site) {
57 $site = Site::insert($site_info);
58 } else {
59 Site::where("id", $site->id)->update($site_info);
60 }
61 Client::set(Site::where('uid', $site_info['uid'])->first());
62 $syncScheduled = $this->dataSyncService->scheduleInitialDataSync('login', 'default');
63 if (!$syncScheduled) {
64 return Helper::rvxApi(['error' => 'Data sync could not be scheduled'])->fails('Data sync schedule failed', Response::HTTP_INTERNAL_SERVER_ERROR);
65 }
66 $this->cacheServices->removeCache();
67 $this->cacheServices->refreshPendingReviewNoticeSummary();
68 $this->loginService->resetPostMeta();
69 // Set the localStorage isAlreadySyncSuccess
70 \set_transient('rvx_reset_sync_flag', \true);
71 \delete_metadata('user', 0, $insight_key, '', \true);
72 \delete_metadata('user', 0, $review_key, '', \true);
73 return Helper::saasResponse($response);
74 } catch (Exception $e) {
75 \error_log('ReviewX: Login failed: ' . $e->getMessage());
76 $errorCode = $e->getCode() === 0 ? Response::HTTP_INTERNAL_SERVER_ERROR : $e->getCode();
77 $message = $e->getCode() === 0 ? 'Internal Server Error' : $e->getMessage();
78 return Helper::rvxApi(['error' => $message])->fails($message, $errorCode);
79 }
80 }
81 public function license_key($request)
82 {
83 $data = $request->get_params();
84 $payload = $this->buildAuthPayload($data);
85 try {
86 $response = (new AuthApi())->licenseLogin($payload);
87 if ($response->getStatusCode() !== Response::HTTP_OK) {
88 return Helper::saasResponse($response);
89 }
90 $apiData = $response->getApiData();
91 $validation = $this->validateSite($apiData);
92 if ($validation !== \true) {
93 return $validation;
94 // return error response
95 }
96 $site_info = $this->prepareData($apiData);
97 $site = Site::where('uid', $site_info['uid'])->first();
98 if (!$site) {
99 $site = Site::insert($site_info);
100 } else {
101 Site::where("id", $site->id)->update($site_info);
102 }
103 Client::set(Site::where('uid', $site_info['uid'])->first());
104 $syncScheduled = $this->dataSyncService->scheduleInitialDataSync('login', 'default');
105 if (!$syncScheduled) {
106 return Helper::rvxApi(['error' => 'Data sync could not be scheduled'])->fails('Data sync schedule failed', Response::HTTP_INTERNAL_SERVER_ERROR);
107 }
108 $this->cacheServices->removeCache();
109 $this->cacheServices->refreshPendingReviewNoticeSummary();
110 $this->loginService->resetPostMeta();
111 // Set the localStorage isAlreadySyncSuccess
112 \set_transient('rvx_reset_sync_flag', \true);
113 return Helper::saasResponse($response);
114 } catch (Exception $e) {
115 \error_log('ReviewX: License login failed: ' . $e->getMessage());
116 $errorCode = $e->getCode() === 0 ? Response::HTTP_INTERNAL_SERVER_ERROR : $e->getCode();
117 $message = $e->getCode() === 0 ? 'Internal Server Error' : $e->getMessage();
118 return Helper::rvxApi(['error' => $message])->fails($message, $errorCode);
119 }
120 }
121 protected function prepareData(array $site) : array
122 {
123 return ['site_id' => $site['id'], 'uid' => $site['uid'], 'name' => $site['name'], 'domain' => $site['domain'], 'url' => $site['url'], 'locale' => $site['locale'], 'email' => $site['email'], 'secret' => $site['key'], 'is_saas_sync' => 0, 'created_at' => \wp_date('Y-m-d H:i:s'), 'updated_at' => \wp_date('Y-m-d H:i:s')];
124 }
125 public function multicriteriaOptions()
126 {
127 $data = [];
128 $isOldReviewXExists = ReviewXChecker::isReviewXExists();
129 $isReviewXSaaSExists = ReviewXChecker::isReviewXSaasExists();
130 if ($isOldReviewXExists && !$isReviewXSaaSExists) {
131 $options = \get_option('_rx_option_review_criteria');
132 $keys = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
133 $criterias = [];
134 $i = 0;
135 foreach ($options as $key => $name) {
136 if (isset($keys[$i])) {
137 $criterias[] = ["key" => $keys[$i], "name" => $name];
138 }
139 $i++;
140 }
141 $multicrtriaEnableorDisable = \get_option('_rx_option_allow_multi_criteria');
142 $data = ["enable" => $multicrtriaEnableorDisable == 1 ? \true : \false, "criterias" => $criterias];
143 } elseif ($isReviewXSaaSExists) {
144 $data = (array) (new SettingService())->getReviewSettings('product') ?? [];
145 $data = $data['reviews']['multicriteria'] ?? $data['multicriteria'] ?? [];
146 }
147 return $data;
148 }
149 public function forgetPassword($request)
150 {
151 try {
152 $response = $this->loginService->forgetPassword($request->get_params());
153 return Helper::saasResponse($response);
154 } catch (Throwable $e) {
155 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Forget password fail', $e->getCode());
156 }
157 }
158 public function resetPassword($request)
159 {
160 try {
161 $response = $this->loginService->resetPassword($request->get_params());
162 return Helper::saasResponse($response);
163 } catch (Throwable $e) {
164 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Reset password fail', $e->getCode());
165 }
166 }
167 /**
168 * @param $request
169 * @return Response
170 */
171 public function register($request)
172 {
173 $data = $request->get_params();
174 $payload = $this->buildAuthPayload($data);
175 try {
176 $response = (new AuthApi())->register($payload);
177 if ($response->getStatusCode() !== Response::HTTP_OK) {
178 return Helper::saasResponse($response);
179 }
180 $apiData = $response->getApiData();
181 $validation = $this->validateSite($apiData);
182 if ($validation !== \true) {
183 return $validation;
184 // return error response
185 }
186 $site_info = $this->prepareRegisterData($apiData['site']);
187 $site = Site::where('uid', $site_info['uid'])->first();
188 if (!$site) {
189 $site = Site::insert($site_info);
190 } else {
191 Site::where("id", $site->id)->update($site_info);
192 }
193 Client::set(Site::where('uid', $site_info['uid'])->first());
194 $syncScheduled = $this->dataSyncService->scheduleDataSync('register', 'product');
195 if (!$syncScheduled) {
196 return Helper::rvxApi(['error' => "Registration successful, but data sync could not be scheduled"])->fails('Data sync schedule failed', Response::HTTP_INTERNAL_SERVER_ERROR);
197 }
198 $this->cacheServices->removeCache();
199 $this->loginService->resetPostMeta();
200 $this->removeUserSettingsFormLocal();
201 // Set the localStorage isAlreadySyncSuccess
202 \set_transient('rvx_reset_sync_flag', \true);
203 return Helper::saasResponse($response);
204 } catch (Exception $e) {
205 \error_log('ReviewX: Registration failed: ' . $e->getMessage());
206 $errorCode = $e->getCode() === 0 ? Response::HTTP_INTERNAL_SERVER_ERROR : $e->getCode();
207 $message = $e->getCode() === 0 ? 'Internal Server Error' : $e->getMessage();
208 return Helper::rvxApi(['error' => $message])->fails($message, $errorCode);
209 }
210 }
211 public function migrationPrompt()
212 {
213 $migrationData = new MigrationPrompt();
214 $result = \false;
215 if (ReviewXChecker::isReviewXExists() && !ReviewXChecker::isReviewXSaasExists()) {
216 $result = $migrationData->reviewx_retrieve_old_plugin_options_data();
217 } elseif (ReviewXChecker::isReviewXSaasExists()) {
218 $result = $migrationData->reviewx_retrieve_saas_plugin_options_data();
219 }
220 if ($result !== \false) {
221 $successMessage = "Old Data found";
222 return Helper::rvxApi($result)->success($successMessage, 200);
223 } else {
224 $failsMessage = "No Data found";
225 return Helper::rvxApi(null)->success($failsMessage, 200);
226 }
227 }
228 public function removeUserSettingsFormLocal()
229 {
230 $option_name = '__user_setting_access';
231 if (\delete_option($option_name)) {
232 return ["Success" => "Options Table Delete"];
233 }
234 }
235 /**
236 * Validate API response for required site data.
237 *
238 * @param array $apiData
239 * @return bool
240 */
241 private function validateSite(array $apiData) : bool
242 {
243 if (!\is_array($apiData) && !isset($apiData['id']) && !isset($apiData['uid'])) {
244 return \false;
245 }
246 return \true;
247 }
248 protected function prepareRegisterData(array $site) : array
249 {
250 return ['site_id' => $site['id'], 'uid' => $site['uid'], 'name' => $site['name'], 'domain' => $site['domain'], 'url' => $site['url'], 'locale' => $site['locale'], 'email' => $site['email'], 'secret' => $site['key'], 'is_saas_sync' => 0, 'created_at' => \wp_date('Y-m-d H:i:s'), 'updated_at' => \wp_date('Y-m-d H:i:s')];
251 }
252 private function buildAuthPayload(array $data) : array
253 {
254 $multicriteria = $this->multicriteriaOptions();
255 if (!empty($multicriteria)) {
256 $data['multicriteria'] = $multicriteria;
257 $data['multi_criteria_reviews'] = $this->legacyMultiCriteriaOptions($multicriteria);
258 }
259 return \array_merge($data, Helper::getWpClientInfo());
260 }
261 private function legacyMultiCriteriaOptions(array $multicriteria) : array
262 {
263 $criteriaNames = [];
264 foreach ($multicriteria['criterias'] ?? [] as $criteria) {
265 if (\is_array($criteria) && !empty($criteria['name'])) {
266 $criteriaNames[] = $criteria['name'];
267 }
268 }
269 return ['enabled' => !empty($multicriteria['enable']), 'criteria' => $criteriaNames];
270 }
271 }
272