post([$this, 'handleAction']) ->args([ 'service' => 'string|required|enum:'.implode(',',$this->getAvailableServices()), 'action' => 'string|required', 'user_id' => 'int', 'context' => 'string|enum:admin,user', 'data' => 'array' ]) ->auth('user') ->rateLimit(20) ->register(); Route::for('oath/connect') ->post([$this, 'initiateOAuth']) ->auth('user') ->rateLimit(20) ->args([ 'service' => 'string|required', 'user_id' => 'int', 'return_url'=> 'url' ]) ->register(); } /** * Handle integration actions */ public function handleAction(WP_REST_Request $request): WP_REST_Response { error_log('[IntegrationsRoutes] handleAction request:'.print_r($request->get_params(), true)); $service = $request->get_param('service'); $action = $request->get_param('action'); $theUserID = current_user_can('manage_options') ? null : get_current_user_id(); if ($theUserID === false) { error_log('User not logged in'); return $this->validationError(['message' => 'Not logged in']); } $integration = $this->getServiceUser($service, $theUserID); if (!$integration || !method_exists($integration, 'processAction')) { error_log('No processAction method'); return $this->validationError(['message'=>'Invalid service']); } $integration->getCredentials(); // Handle the action try { $data = $request->get_param('data'); if (!is_array($data) && empty($data)) { $data = null; } error_log('[IntegrationsRoutes] Calling processAction with data: ' . print_r($data, true)); $result = $integration->processAction($action, $data); return $this->success($result); } catch (Exception $e) { error_log(print_r($e->getMessage(), true)); return $this->error($e->getMessage()); } } public function initiateOAuth(WP_REST_Request $request): WP_REST_Response { $service = $request->get_param('service'); $user_id = $request->get_param('user_id'); $return_url = $request->get_param('return_url'); $theUserID = current_user_can('manage_options') ? null : get_current_user_id(); if ($theUserID === false) { return $this->validationError(['message' => 'Not logged in']); } $integration = $this->getService($service); if (!method_exists($integration, 'switchUser')) { return $this->validationError(['message' => 'Cannot get user integration']); } if (!$integration || !method_exists($integration, 'processAction')) { return $this->validationError(['message'=>'Invalid service']); } $integration->switchUser($theUserID); if (!$integration || !method_exists($integration, 'getOAuthBaseURL') || is_null($integration->getOAuthBaseURL())) { return $this->validationError(['message'=>'Invalid service']); } $auth_url = $integration->getOAuthBaseURL($return_url); if ($auth_url) { return $this->success($auth_url); } return $this->error('Failed to generate authorization URL'); } }