Dosu LogoDosu Logo
Ask
Join our Discord
Organization avatar
BAWES UniversePublic
BAWES Universe
DocumentsBAWES Universe
Plugn Integrations
Plugn Integrations
Type
Document
Status
Published
Created
Nov 5, 2025
Updated
Jun 10, 2026
Updated by
Dosu Bot

External Integrations in plugn/common/config/main.php#

This document lists all major external integrations configured in the backend, including their purpose, configuration location, and whether they are required for local development.

AWS S3#

Purpose:
Used for managing file uploads and resources in Amazon S3 buckets, including saving, copying, deleting files, and retrieving file metadata. The temporaryBucketResourceManager component is specifically used for temporary public uploads with a 24-hour expiry.

Configuration:
Configured as the temporaryBucketResourceManager component in plugn/common/config/main.php:

'temporaryBucketResourceManager' => [
    'class' => 'common\components\S3ResourceManager',
    'region' => 'eu-west-2',
    'key' => '...',
    'secret' => '...',
    'bucket' => 'plugn-public-anyone-can-upload-24hr-expiry'
],

Source

Local Development:
OPTIONAL. The backend will throw an error if required parameters are missing, but for local development, you can stub or omit this integration if file upload features are not needed.


Slack Webhooks#

Purpose:
Used for sending notifications and error reports to Slack channels. There are separate components for general notifications, TapPayments operations, and error reporting.

Configuration:
Configured as slack, slackTapOperation, and slackError components in plugn/common/config/main.php:

'slack' => [
    'class' => 'understeam\slack\Client',
    'url' => 'https://hooks.slack.com/services/...',
    'username' => 'Plugn',
],
'slackTapOperation' => [
    'class' => 'understeam\slack\Client',
    'url' => 'https://hooks.slack.com/services/...',
    'username' => 'Plugn',
],
'slackError' => [
    'class' => 'understeam\slack\Client',
    'url' => 'https://hooks.slack.com/services/...',
    'username' => 'Plugn',
],

Source

Local Development:
OPTIONAL. These can be stubbed or omitted for local development.


TapPayments#

Purpose:
Handles payment processing, including charges, refunds, and business/merchant creation. Supports multiple payment gateways (KNET, VISA/MASTER, MADA, BENEFIT).

Configuration:
Configured as the tapPayments component in plugn/common/config/main.php:

'tapPayments' => [
    'class' => 'common\components\TapPayments',
    'gatewayToUse' => \common\components\TapPayments::USE_LIVE_GATEWAY,
    'plugnLiveApiKey' => '...',
    'plugnTestApiKey' => '...',
    'destinationId' => '...',
],

Source

Local Development:
OPTIONAL. Required for payment features, but can be stubbed or omitted for local development if payments are not being tested.


MyFatoorah#

Purpose:
Provides payment processing through the MyFatoorah gateway, including supplier management, charges, refunds, and dashboard retrieval.

Configuration:
Configured as the myFatoorahPayment component in plugn/common/config/main.php:

'myFatoorahPayment' => [
    'class' => 'common\components\MyFatoorahPayment',
    'gatewayToUse' => \common\components\MyFatoorahPayment::USE_LIVE_GATEWAY,
    'kuwaitLiveApiKey' => '...',
    'kuwaitTestApiKey' => '...',
    'saudiLiveApiKey' => '...',
],

Source

Local Development:
OPTIONAL. Required for payment features, but can be stubbed or omitted for local development if payments are not being tested.


Cloudinary#

Purpose:
Manages media assets, including image upload, deletion, and retrieval.

Configuration:
Configured as the cloudinaryManager component in plugn/common/config/main.php:

'cloudinaryManager' => [
    'class' => 'common\components\CloudinaryManager',
    'cloud_name' => getenv('CLOUDINARY_CLOUD_NAME') ?: null,
    'api_key' => getenv('CLOUDINARY_API_KEY') ?: null,
    'api_secret' => getenv('CLOUDINARY_API_SECRET') ?: null,
],

Source

Local Development:
REQUIRED if using media management features. Cloudinary credentials must be provided via environment variables (CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET). CloudinaryManager validates credentials at runtime and will throw exceptions if any credential is missing or empty before performing upload, delete, or asset operations. This fail-safe behavior prevents accidental use of stale or partial credentials. Omit Cloudinary configuration entirely if not using media features in local development.


OneSignal#

Purpose:
Not present in the backend configuration. OneSignal is typically used for push notifications and appears to be managed on the frontend or another service tier.

Configuration:
Not configured in plugn/common/config/main.php.

Local Development:
Not applicable for backend local development.


Local-only Minimal Config#

To run the backend locally, only core dependencies are required (such as MySQL, Redis, PHP, etc.). All external integrations listed above (AWS S3, Slack webhooks, TapPayments, MyFatoorah, Cloudinary) can be stubbed or omitted for local development. You do not need to provide real API keys or connect to external services unless you are specifically developing or testing those features.

Example minimal config for local development:

// In plugn/common/config/main.php, you can stub integrations like this:
'temporaryBucketResourceManager' => [
    'class' => 'common\components\S3ResourceManager',
    'region' => '',
    'key' => '',
    'secret' => '',
    'bucket' => '',
],
'tapPayments' => [
    'class' => 'common\components\TapPayments',
    'gatewayToUse' => \common\components\TapPayments::USE_TEST_GATEWAY,
    'plugnLiveApiKey' => '',
    'plugnTestApiKey' => '',
    'destinationId' => '',
],
'myFatoorahPayment' => [
    'class' => 'common\components\MyFatoorahPayment',
    'gatewayToUse' => \common\components\MyFatoorahPayment::USE_TEST_GATEWAY,
    'kuwaitLiveApiKey' => '',
    'kuwaitTestApiKey' => '',
    'saudiLiveApiKey' => '',
],
'slack' => [
    'class' => 'understeam\slack\Client',
    'url' => '',
    'username' => 'Plugn',
],
// ...other stubs as needed

Note on Cloudinary: Do not use empty string stubs for Cloudinary credentials. CloudinaryManager fails closed when any required credential (cloud_name, api_key, or api_secret) is missing or empty. If you need Cloudinary features in local development, provide valid credentials via environment variables (CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET). If you do not need media features, omit the cloudinaryManager component entirely from your local config.

No external integration is strictly required to boot and run the backend locally, unless you are actively developing or testing features that depend on them.

Documents
Studenthub
API Contracts by Portal (Endpoints + Payloads + Error Codes)
API Contracts – Staff + Candidate Portals (Endpoints + Payload Pointers + Error Handling)
Auth Verification Email Flow – /v1/auth/resend-verification-email
Backend Codebase Tour (studenthub)
Candidate Signup & Email Verification – Frontend to Backend Flow
Database & Domain Model Reference (ERD + Status State Machines)
Email Sending, From Addresses & Providers (StudentHub Backend)
Production Operations & Deployments Runbook
Quickstart (Local Development)
Security, Auth & Permissions (RBAC + Tenant Scoping)
StudentHub Architecture Overview
StudentHub Overview
StudentHub – Complete Services & Infrastructure Map (Org-wide)”
Civil ID Upload Flow
DB, API endpoint, S3, Slack, and payment keys
Plugn Documentation Index (Updated)
Plugn Integrations
Plugn Quickstart (Day 1)
Plugn Repositories – Priority & Status
Plugn Store Data & Item API
Plugn – System Overview & Onboarding
plugn backend – local setup
plugn guide
plugn-dashboard-ionic – Setup & API Config