Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
b38cb16
feat: Implement authorization types and connection management
RishadAlam May 2, 2026
411454f
feat: Enhance Connections page with improved styling and table functi…
RishadAlam May 2, 2026
f3fd704
refactor: Clean up and comment out unused code in ConnectionControlle…
RishadAlam May 4, 2026
a3e1b5c
feat: Add authorization handling and connection management in Connect…
RishadAlam May 6, 2026
5014ec8
feat: Refactor authorization methods to unify header handling across …
RishadAlam May 6, 2026
09f62b4
Merge branch 'main' into feat/connection-system
RishadAlam May 7, 2026
5bb2c8f
feat: global authorization added for api keys
RishadAlam May 7, 2026
e4d3702
feat: enhance connection management with improved validation and erro…
RishadAlam May 7, 2026
7bbef3e
feat: refactor SystemeIOAuthorization to use PlatformAuthorization co…
RishadAlam May 7, 2026
ba3accc
feat: enhance authorization handling with SSL verification options an…
RishadAlam May 7, 2026
74efeeb
feat: implement OAuth2 connection flow with token exchange and UI com…
RishadAlam May 8, 2026
497bb13
feat: refactor error handling and JSON encoding in ConnectionController
RishadAlam May 8, 2026
2facfd1
feat: refactor authorization handling with shared AuthDataCodec for e…
RishadAlam May 8, 2026
144bad1
refactor: update error messages to use translation functions for bett…
RishadAlam May 8, 2026
873cd9d
feat: implement plugin check functionality and refactor WeDocs author…
RishadAlam May 8, 2026
8b9e1e7
Refactor integration authorization components to use PlatformAuthoriz…
RishadAlam May 9, 2026
dbcb541
feat: remove unused route files for various integrations
RishadAlam May 9, 2026
dd4421e
feat: add WP_PLUGIN_CHECK authorization type and update integrations
RishadAlam May 9, 2026
9bfc56c
refactor: platform check to plugin check across integrations
RishadAlam May 9, 2026
7997b54
Refactor authorization components to use new Authorization component
RishadAlam May 9, 2026
213fe49
feat: implement CredentialInjector for connection credential manageme…
RishadAlam May 11, 2026
1115fea
feat: update Fabman integration to fetch account ID and remove unused…
RishadAlam May 11, 2026
f4d032e
feat: enhance Oauth2Connection and AddNewConnection components to sup…
RishadAlam May 11, 2026
7826cf0
refactor: authorization handling across Rapidmail, Smaily, and Twilio…
RishadAlam May 11, 2026
f62ef02
refactor: Slack, SmartSuite, Vbout, and WhatsApp integrations to impr…
RishadAlam May 11, 2026
ffb45d3
refactor: enhance API connection handling, and streamline authenticat…
RishadAlam May 11, 2026
3f73c81
Refactor NutshellCRM, PerfexCRM, and SendPulse authorization componen…
RishadAlam May 11, 2026
24fa011
refactor: integration authorization components to use a unified Autho…
RishadAlam May 11, 2026
8709e3d
refactor: remove deprecated authentication methods and implement unif…
RishadAlam May 11, 2026
118a7b3
refactor: implement unified authorization handling for BenchMark and …
RishadAlam May 11, 2026
3988c29
refactor: unify authorization handling across ElasticEmail, Encharge,…
RishadAlam May 11, 2026
d83d16d
Refactor integration authorization components to use a unified Author…
RishadAlam May 12, 2026
a621046
Refactor MailRelay, Mailercloud, Mailify, Nimble, and PipeDrive integ…
RishadAlam May 12, 2026
322568a
Refactor FreshSales, Freshdesk, Getgist, Selzy, and Sendy integration…
RishadAlam May 12, 2026
9f3a960
Refactor integration authorization components to use a unified Author…
RishadAlam May 12, 2026
90dc1e0
refactor: authentication methods and integrate AuthorizationType for …
RishadAlam May 12, 2026
8d09575
refactor: Mautic and Salesforce integration components
RishadAlam May 12, 2026
4270064
refactor: integration components to use a unified Authorization compo…
RishadAlam May 12, 2026
30ea100
refactor: update SureCart integration to use bearer token and streaml…
RishadAlam May 13, 2026
3c38ddd
refactor: integration components to use a unified Authorization compo…
RishadAlam May 13, 2026
98989a3
refactor: integration components to use a unified Authorization compo…
RishadAlam May 13, 2026
544f686
refactor: Constant Contact and LionDesk integration components
RishadAlam May 13, 2026
7d684d4
refactor: update Oauth2Connection to support select input fields for …
RishadAlam May 13, 2026
5169981
Merge branch 'main' into feat/connection-system
RishadAlam May 13, 2026
c4b602c
refactor: Zoho integrations to streamline authorization process and r…
RishadAlam May 13, 2026
63b45d6
feat: implement Mailup OAuth2 authorization flow and refactor related…
RishadAlam May 15, 2026
a90627d
feat: add OAuth1 authorization support and refactor Trello integratio…
RishadAlam May 15, 2026
bf5a5d8
refactor: clean up MailChimp integration by removing unused code and …
RishadAlam May 15, 2026
bb4f1a8
feat: implement OAuth2 authorization flow for MailChimp integration a…
RishadAlam May 15, 2026
50ebedf
feat: implement API key authorization for Monday.com integration and …
RishadAlam May 15, 2026
58b788f
feat: implement Kirim Email integration with custom authorization and…
RishadAlam May 15, 2026
7e2166a
feat: enhance token handling and improve error messaging in integrations
RishadAlam May 15, 2026
ff6eae3
feat: enhance authorization error handling and improve connection res…
RishadAlam May 15, 2026
b92b65c
feat: refactor Connections component layout and enhance styling for b…
RishadAlam May 15, 2026
c606826
feat: update database version to 1.2 in Config and main plugin file
RishadAlam May 15, 2026
ffee57a
feat: remove GoogleSheetInfo component and its related functionality
RishadAlam May 15, 2026
8d343fd
feat: implement linked integrations handling in Connections component…
RishadAlam May 15, 2026
c29cd64
feat: add support for linked integrations in Connections component an…
RishadAlam May 15, 2026
8779e69
fix: improve access token validation in GoogleSheetController
RishadAlam May 15, 2026
0a1c1d2
Merge branch 'main' into feat/connection-system
RishadAlam May 25, 2026
c724ad4
Merge branch 'main' into feat/connection-system
RishadAlam Jun 29, 2026
e485a6f
refactor: format the frontend files by pretty fix
RishadAlam Jun 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
47 changes: 9 additions & 38 deletions backend/Actions/ACPT/ACPTController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,22 @@

namespace BitApps\Integrations\Actions\ACPT;

use BitApps\Integrations\Core\Util\HttpHelper;
use BitApps\Integrations\Authorization\AuthorizationType;
use WP_Error;

/**
* Provide functionality for ACPT integration
*/
class ACPTController
{
protected $_defaultHeader;

public function authentication($fieldsRequestParams)
{
$this->checkValidation($fieldsRequestParams);
$this->setHeaders($fieldsRequestParams->api_key);

$apiEndpoint = $fieldsRequestParams->base_url . '/wp-json/acpt/v1/taxonomy';
$response = HttpHelper::get($apiEndpoint, null, $this->_defaultHeader);

if (is_wp_error($response) || HttpHelper::$responseCode != 200) {
wp_send_json_error(
!empty($response->message)
? $response->message
: __('Please enter valid Api key-secret', 'bit-integrations'),
HttpHelper::$responseCode
);
}

wp_send_json_success(__('Authentication successful', 'bit-integrations'), 200);
}
public static array $authConfig = [
'authType' => AuthorizationType::API_KEY,
'slug' => 'acpt',
'fields' => [
'api_key' => 'value',
'base_url' => 'base_url',
],
];

public function execute($integrationData, $fieldValues)
{
Expand All @@ -59,20 +46,4 @@ public function execute($integrationData, $fieldValues)

return $acptApiResponse;
}

private function checkValidation($fieldsRequestParams, $customParam = '**')
{
if (empty($fieldsRequestParams->base_url) || empty($fieldsRequestParams->api_key) || empty($customParam)) {
wp_send_json_error(__('Requested parameter is empty', 'bit-integrations'), 400);
}
}

private function setHeaders($apiKey)
{
$this->_defaultHeader = [
'acpt-api-key' => $apiKey,
'Content-Type' => 'application/json',
'accept' => 'application/json',
];
}
}
2 changes: 0 additions & 2 deletions backend/Actions/ACPT/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,3 @@

use BitApps\Integrations\Actions\ACPT\ACPTController;
use BitApps\Integrations\Core\Util\Route;

Route::post('acpt_authentication', [ACPTController::class, 'authentication']);
16 changes: 0 additions & 16 deletions backend/Actions/AcademyLms/AcademyLmsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,6 @@ public function __construct($integrationID)
$this->_integrationID = $integrationID;
}

/**
* Process ajax request for generate_token
*
* @return JSON zoho crm api response and status
*/
public static function Authorization()
{
include_once ABSPATH . 'wp-admin/includes/plugin.php';
if (is_plugin_active('academy/academy.php')) {
wp_send_json_success(true, 200);
}

// translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'Academy Lms'));
}

public static function getAllLesson()
{
if (!class_exists('Academy')) {
Expand Down
1 change: 0 additions & 1 deletion backend/Actions/AcademyLms/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,5 @@
use BitApps\Integrations\Actions\AcademyLms\AcademyLmsController;
use BitApps\Integrations\Core\Util\Route;

Route::post('academy_lms_authorize', [AcademyLmsController::class, 'Authorization']);
Route::get('academy_lms_all_course', [AcademyLmsController::class, 'getAllCourse']);
Route::get('academy_lms_all_lesson', [AcademyLmsController::class, 'getAllLesson']);
46 changes: 10 additions & 36 deletions backend/Actions/ActiveCampaign/ActiveCampaignController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

namespace BitApps\Integrations\Actions\ActiveCampaign;

use BitApps\Integrations\Authorization\AuthorizationType;
use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;

Expand All @@ -14,6 +15,15 @@
*/
class ActiveCampaignController
{
public static array $authConfig = [
'authType' => AuthorizationType::API_KEY,
'slug' => 'activecampaign',
'fields' => [
'api_key' => 'value',
'api_url' => 'api_url',
],
];

private $_integrationID;

public function __construct($integrationID)
Expand All @@ -26,42 +36,6 @@ public static function _apiEndpoint($api_url, $method)
return "{$api_url}/api/3/{$method}/";
}

/**
* Process ajax request
*
* @param $requestsParams Params to authorize
*
* @return JSON Active Campaign api response and status
*/
public static function activeCampaignAuthorize($requestsParams)
{
if (
empty($requestsParams->api_key)
|| empty($requestsParams->api_url)
) {
wp_send_json_error(
__(
'Requested parameter is empty',
'bit-integrations'
),
400
);
}

$apiEndpoint = self::_apiEndpoint($requestsParams->api_url, 'accounts');
$authorizationHeader['Api-Token'] = $requestsParams->api_key;
$apiResponse = HttpHelper::get($apiEndpoint, null, $authorizationHeader);

if (is_wp_error($apiResponse) || empty($apiResponse)) {
wp_send_json_error(
empty($apiResponse) ? 'Unknown' : $apiResponse,
400
);
}

wp_send_json_success(true);
}

/**
* Process ajax request for refresh lists
*
Expand Down
1 change: 0 additions & 1 deletion backend/Actions/ActiveCampaign/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
use BitApps\Integrations\Actions\ActiveCampaign\ActiveCampaignController;
use BitApps\Integrations\Core\Util\Route;

Route::post('aCampaign_authorize', [ActiveCampaignController::class, 'activeCampaignAuthorize']);
Route::post('aCampaign_headers', [ActiveCampaignController::class, 'activeCampaignHeaders']);
Route::post('aCampaign_lists', [ActiveCampaignController::class, 'activeCampaignLists']);
Route::post('aCampaign_accounts', [ActiveCampaignController::class, 'activeCampaignAccounts']);
Expand Down
35 changes: 9 additions & 26 deletions backend/Actions/Acumbamail/AcumbamailController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

namespace BitApps\Integrations\Actions\Acumbamail;

use BitApps\Integrations\Authorization\AuthorizationType;
use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;

Expand All @@ -14,6 +15,14 @@
*/
class AcumbamailController
{
public static array $authConfig = [
'authType' => AuthorizationType::API_KEY,
'slug' => 'acumbamail',
'fields' => [
'auth_token' => 'value',
],
];

private $baseUrl = 'https://acumbamail.com/api/1/';

public function fetchAllLists($requestParams)
Expand Down Expand Up @@ -46,32 +55,6 @@ public function fetchAllLists($requestParams)
}
}

public function acumbamailAuthAndFetchSubscriberList($requestParams)
{
if (empty($requestParams->auth_token)) {
wp_send_json_error(
__(
'Requested parameter is empty',
'bit-integrations'
),
400
);
}
$apiEndpoints = $this->baseUrl . 'getSubscribers/';

$requestParams = [
'auth_token' => $requestParams->auth_token,
];

$response = HttpHelper::post($apiEndpoints, $requestParams);

if ($response == 'Unauthorized' || $response == 'This endpoint is not available for non-paying customers' || $response == 'Your auth token has expired check /apidoc/ for the new one') {
wp_send_json_error($response, 400);
} else {
wp_send_json_success($response, 200);
}
}

public function acumbamailRefreshFields($refreshFieldsRequestParams)
{
if (empty($refreshFieldsRequestParams->auth_token) || empty($refreshFieldsRequestParams->list_id)) {
Expand Down
1 change: 0 additions & 1 deletion backend/Actions/Acumbamail/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,5 @@
use BitApps\Integrations\Actions\Acumbamail\AcumbamailController;
use BitApps\Integrations\Core\Util\Route;

Route::post('acumbamail_authorization_and_fetch_subscriber_list', [AcumbamailController::class, 'acumbamailAuthAndFetchSubscriberList']);
Route::post('acumbamail_fetch_all_list', [AcumbamailController::class, 'fetchAllLists']);
Route::post('acumbamail_refresh_fields', [AcumbamailController::class, 'acumbamailRefreshFields']);
10 changes: 0 additions & 10 deletions backend/Actions/Affiliate/AffiliateController.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,6 @@ public static function pluginActive($option = null)
return false;
}

public static function authorizeAffiliate()
{
include_once ABSPATH . 'wp-admin/includes/plugin.php';
if (self::pluginActive()) {
wp_send_json_success(true, 200);
}
// translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'Affiliate'));
}

public static function getAllAffiliate()
{
$cache_key = Config::withPrefix('affiliate_wp_all_affiliates');
Expand Down
1 change: 0 additions & 1 deletion backend/Actions/Affiliate/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,4 @@
use BitApps\Integrations\Actions\Affiliate\AffiliateController;
use BitApps\Integrations\Core\Util\Route;

Route::post('affiliate_authorize', [AffiliateController::class, 'authorizeAffiliate']);
Route::post('affiliate_fetch_all_affiliate', [AffiliateController::class, 'getAllAffiliate']);
32 changes: 10 additions & 22 deletions backend/Actions/AgiledCRM/AgiledCRMController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

namespace BitApps\Integrations\Actions\AgiledCRM;

use BitApps\Integrations\Authorization\AuthorizationType;
use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;

Expand All @@ -14,29 +15,16 @@
*/
class AgiledCRMController
{
protected $_defaultHeader;

public function authentication($fieldsRequestParams)
{
if (empty($fieldsRequestParams->auth_token) || empty($fieldsRequestParams->brand)) {
wp_send_json_error(__('Requested parameter is empty', 'bit-integrations'), 400);
}
public static array $authConfig = [
'authType' => AuthorizationType::API_KEY,
'slug' => 'agiledcrm',
'fields' => [
'auth_token' => 'value',
'brand' => 'brand',
],
];

$brand = $fieldsRequestParams->brand;
$apiKey = $fieldsRequestParams->auth_token;
$apiEndpoint = "https://my.agiled.app/api/v1/users?api_token={$apiKey}";
$header = [
'Brand' => $brand
];

$response = HttpHelper::get($apiEndpoint, null, $header);

if (isset($response->data[0]->id)) {
wp_send_json_success(__('Authentication successful', 'bit-integrations'), 200);
} else {
wp_send_json_error(__('Please enter valid Brand name & API key', 'bit-integrations'), 400);
}
}
protected $_defaultHeader;

public function getAllOwners($fieldsRequestParams)
{
Expand Down
1 change: 0 additions & 1 deletion backend/Actions/AgiledCRM/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
use BitApps\Integrations\Actions\AgiledCRM\AgiledCRMController;
use BitApps\Integrations\Core\Util\Route;

Route::post('agiled_authentication', [AgiledCRMController::class, 'authentication']);
Route::post('agiled_fetch_all_owners', [AgiledCRMController::class, 'getAllOwners']);
Route::post('agiled_fetch_all_accounts', [AgiledCRMController::class, 'getAllAccounts']);
Route::post('agiled_fetch_all_sources', [AgiledCRMController::class, 'getAllSources']);
Expand Down
14 changes: 13 additions & 1 deletion backend/Actions/Airtable/AirtableController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

namespace BitApps\Integrations\Actions\Airtable;

use BitApps\Integrations\Authorization\AuthorizationType;
use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;

Expand All @@ -14,9 +15,17 @@
*/
class AirtableController
{
public static array $authConfig = [
'authType' => AuthorizationType::BEARER_TOKEN,
'slug' => 'airtable',
'fields' => [
'auth_token' => 'token',
],
];

protected $_defaultHeader;

public function authentication($fieldsRequestParams)
public function fetchAllBases($fieldsRequestParams)
{
if (empty($fieldsRequestParams->auth_token)) {
wp_send_json_error(__('Requested parameter is empty', 'bit-integrations'), 400);
Expand All @@ -31,6 +40,7 @@ public function authentication($fieldsRequestParams)
$response = HttpHelper::get($apiEndpoint, null, $header);

if (isset($response->bases)) {
$bases = [];
foreach ($response->bases as $base) {
if ($base->permissionLevel === 'create') {
$bases[] = [
Expand Down Expand Up @@ -61,6 +71,7 @@ public function getAllTables($fieldsRequestParams)
$response = HttpHelper::get($apiEndpoint, null, $header);

if (isset($response->tables)) {
$tables = [];
foreach ($response->tables as $table) {
$tables[] = [
'id' => $table->id,
Expand Down Expand Up @@ -91,6 +102,7 @@ public function getAllFields($fieldsRequestParams)
$acceptedTypes = ['singleLineText', 'multilineText', 'singleSelect', 'multipleSelects', 'multipleAttachments', 'date', 'phoneNumber', 'email', 'url', 'number', 'currency', 'percent', 'duration', 'rating', 'barcode'];

if (isset($response->tables)) {
$fields = [];
foreach ($response->tables as $table) {
if ($table->id === $tableId) {
foreach ($table->fields as $field) {
Expand Down
2 changes: 1 addition & 1 deletion backend/Actions/Airtable/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
use BitApps\Integrations\Actions\Airtable\AirtableController;
use BitApps\Integrations\Core\Util\Route;

Route::post('airtable_authentication', [AirtableController::class, 'authentication']);
Route::post('airtable_fetch_all_bases', [AirtableController::class, 'fetchAllBases']);
Route::post('airtable_fetch_all_tables', [AirtableController::class, 'getAllTables']);
Route::post('airtable_fetch_all_fields', [AirtableController::class, 'getAllFields']);
Loading
Loading