<?php
|
namespace JVBase\rest\routes;
|
|
use JVBase\rest\Rest;
|
use JVBase\rest\Route;
|
use WP_REST_Request;
|
use WP_REST_Response;
|
use Exception;
|
|
if (!defined('ABSPATH')) {
|
exit; // Exit if accessed directly
|
}
|
|
class IntegrationsRoutes extends Rest
|
{
|
|
/**
|
* Register REST routes
|
*/
|
public function registerRoutes(): void
|
{
|
Route::for('integrations')
|
->post([$this, 'handleAction'])
|
->args([
|
'service' => 'string|required|enum:'.implode(',',JVB()->getAvailableServices()),
|
'action' => 'string|required',
|
'user_id' => 'int',
|
'context' => 'string|enum:admin,user',
|
'data' => 'array'
|
])
|
->auth('user')
|
->rateLimit(20);
|
Route::for('oath/connect')
|
->post([$this, 'initiateOAuth'])
|
->auth('user')
|
->rateLimit(20)
|
->args([
|
'service' => 'string|required',
|
'user_id' => 'int',
|
'return_url'=> 'url'
|
]);
|
}
|
|
/**
|
* 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 = (user_can($request->get_param('user'), 'manage_options')) ? null : $request->get_param('user');
|
$integration = JVB()->connect($service, $theUserID);
|
|
if (!$integration) {
|
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) {
|
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');
|
|
$integration = JVB()->connect($service, $user_id);
|
|
if (!$integration || !$integration->isOAuthService) {
|
return $this->validationError(['message'=>'Invalid service']);
|
}
|
|
$auth_url = $integration->getOAuthUrl($return_url);
|
|
if ($auth_url) {
|
return $this->success($auth_url);
|
}
|
|
return $this->error('Failed to generate authorization URL');
|
}
|
}
|