Skip to content

Repository files navigation

Note

This is a fork of the now abandoned frontegg/php-sdk. For now it will remain as a simply a repository dependency, but given the time, inclination, and community ask, we will re-publish this package for broader consumption.

Frontegg PHP SDK

alt text

Frontegg is a web platform where SaaS companies can set up their fully managed, scalable and brand aware - SaaS features and integrate them into their SaaS portals in up to 5 lines of code.

Installation

Use the package manager Composer to install Frontegg SDK for PHP.

Add this repository to your composer.json:

{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/beamible/frontegg-php"
}
],
}

Then install the package:

composer require frontegg/php-sdk

Usage

Frontegg offers multiple components for integration with the Frontegg's scalable back-end and front-end libraries.

Simple Examples

Minimal configuration:

<?phprequire_once'./vendor/autoload.php';
require_once'./src/Frontegg/autoload.php';
useFrontegg\Frontegg;
usePsr\Http\Message\RequestInterface;
$config = [
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_SECRET_API_KEY',
'contextResolver' => function(RequestInterface$request) {
return [
'tenantId' => 'THE-TENANT-ID',
'userId' => 'test-user-id',
'permissions' => [],
];
},
];
$frontegg = newFrontegg($config);
$frontegg->init();

Advanced configuration:

<?phprequire_once'./vendor/autoload.php';
require_once'./src/Frontegg/autoload.php';
useFrontegg\Frontegg;
useFrontegg\HttpClient\FronteggCurlHttpClient;
usePsr\Http\Message\RequestInterface;
$config = [
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_SECRET_API_KEY',
'apiBaseUrl' => 'https://api.frontegg.com/',
'authenticationBaseUrl' => 'https://api.frontegg.com/',
'apiUrls' => [
'authentication' => '/auth/vendor',
'audits' => '/audits',
],
'contextResolver' => function(RequestInterface$request) {
return [
'tenantId' => 'THE-TENANT-ID',
'userId' => 'test-user-id',
'permissions' => [],
];
},
'disableCors' => false, // You can enable/disable CORS headers for Middleware Proxy.'httpClientHandler' => newFronteggCurlHttpClient(), // You can provide custom HTTP client.
];
$frontegg = newFrontegg($config);
$frontegg->init();

Configuration

Option NameTypeDefault ValueNote
clientIdstringNoneClient Id. Required
clientSecretstringNoneAPI Key. Required
contextResolvercallableNoneCallback to provide context info. Required
apiBaseUrlstringhttps://api.frontegg.comBase API URL
authenticationBaseUrlstringhttps://api.frontegg.comBase URL used for authentication
apiUrlsarray[]List of URLs of the API services
disableCorsboolfalseDisabling CORS headers for Middleware Proxy
httpClientHandlerspecial interface*Curl client**Custom HTTP client
apiVersionstring'v1'Not used yet. API version

*special interface - Frontegg\HttpClient\FronteggHttpClientInterface,

**Curl client - Frontegg\HttpClient\FronteggCurlHttpClient

Audits

Let your customers record the events, activities and changes made to their tenant.

Frontegg’s Managed Audit Logs feature allows a SaaS company to embed an end-to-end working feature in just several lines of code.

Sending audits

<?phprequire_once'./vendor/autoload.php';
require_once'./src/Frontegg/autoload.php';
useFrontegg\Frontegg;
useFrontegg\HttpClient\FronteggCurlHttpClient;
usePsr\Http\Message\RequestInterface;
$config = [
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_SECRET_API_KEY',
'apiBaseUrl' => 'https://api.frontegg.com/',
'apiUrls' => [
'authentication' => '/auth/vendor',
'audits' => '/audits',
],
'contextResolver' => function(RequestInterface$request) {
return [
'tenantId' => 'THE-TENANT-ID',
'userId' => 'test-user-id',
'permissions' => [],
];
},
'disableCors' => false, // You can enable/disable CORS headers for Middleware Proxy.'httpClientHandler' => newFronteggCurlHttpClient(), // You can provide custom HTTP client.'apiVersion' => 'v1', // Not used yet. Coming soon.
];
$frontegg = newFrontegg($config);
$auditLog = $frontegg->sendAudit('THE-TENANT-ID', [
'user' => 'testuser@t.com',
'resource' => 'Portal',
'action' => 'Login',
'severity' => 'Info',
'ip' => '123.1.2.3',
]);

Fetching audits

<?phprequire_once'./vendor/autoload.php';
require_once'./src/Frontegg/autoload.php';
useFrontegg\Frontegg;
useFrontegg\HttpClient\FronteggCurlHttpClient;
usePsr\Http\Message\RequestInterface;
$config = [
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_SECRET_API_KEY',
'contextResolver' => function(RequestInterface$request) {
return [
'tenantId' => 'THE-TENANT-ID',
'userId' => 'test-user-id',
'permissions' => [],
];
},
'apiBaseUrl' => 'https://api.frontegg.com/',
'apiUrls' => [
'authentication' => '/auth/vendor',
'audits' => '/audits',
],
'httpClientHandler' => newFronteggCurlHttpClient(), // You can provide custom HTTP client.
];
$frontegg = newFrontegg($config);
$auditsLog = $frontegg->getAudits(
'THE-TENANT-ID',
'Text to filter',
0, // Offset10, // Count'action', // Field to sort by'ASC'// Sort direction ('ASC' or 'DESC')// ... Additional filters
);

Events

Events triggering is easy and maximum configurable for different notification channels.

require_once'./vendor/autoload.php';
require_once'./src/Frontegg/autoload.php';
useFrontegg\Events\Config\ChannelsConfig;
useFrontegg\Events\Config\DefaultProperties;
useFrontegg\Events\Config\TriggerOptions;
useFrontegg\Events\Channel\WebHookBody;
useFrontegg\Frontegg;
usePsr\Http\Message\RequestInterface;
$clientId = 'YOUR_CLIENT_ID';
$apikey = 'YOUR_API_KEY';
$config = [
'clientId' => $clientId,
'clientSecret' => $apikey,
'contextResolver' => function(RequestInterface$request) {
return [
'tenantId' => 'THE-TENANT-ID',
'userId' => 'test-user-id',
'permissions' => [],
];
},
];
$frontegg = newFrontegg($config);
$triggerOptions = newTriggerOptions(
'eventKeyForTest',
newDefaultProperties(
'Default title',
'Default description',
[
'name' => 'Policy 4',
'id' => '11223456783245234',
]
),
newChannelsConfig(
newWebHookBody([
'title' => 'Test title!',
])
),
'YOUR_TENANT_ID'
);
$response = $frontegg->triggerEvent($triggerOptions);

Middleware (Proxy)

The Frontegg Proxy forwards requests to the Frontegg API and pass back responses.

There is no Middleware (filters mechanism for HTTP request) in raw PHP, but in some frameworks it is. For example, in Laravel.

Here you can see example for raw PHP. You can easily adapt it for your framework with Middleware (for Laravel see https://github.com/frontegg/samples/tree/master/frontegg-laravel-starter).

<?phprequire_once'./vendor/autoload.php';
require_once'./src/Frontegg/autoload.php';
useFrontegg\Frontegg;
useGuzzleHttp\Psr7\Request;
usePsr\Http\Message\RequestInterface;
/** * Setup routing rule for "/frontegg" URIs. * Can be a part of middleware f.e. in Laravel. */if (isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], '/frontegg') === 0) {
$request = newRequest('POST', $_SERVER['REQUEST_URI']);
$response = handleFronteggUri($request);
}
// ...functionhandleFronteggUri(RequestInterface$request)
{
$clientId = 'YOUR_CLIENT_ID';
$apikey = 'YOUR_API_KEY';
$config = [
'clientId' => $clientId,
'clientSecret' => $apikey,
'apiBaseUrl' => 'https://dev-api.frontegg.com/',
'contextResolver' => function(RequestInterface$request) {
return [
'tenantId' => 'THE-TENANT-ID',
'userId' => 'test-user-id',
'permissions' => [],
];
},
'disableCors' => false,
];
$frontegg = newFrontegg($config);
$response = $frontegg->forward($request);
return$response->getBody(); }

Another example of raw PHP and with adapting request parameters to Psr-7 Request object:

<?phpuseFrontegg\Frontegg;
usePsr\Http\Message\RequestInterface;
useGuzzleHttp\Psr7\Request;
$requestMethod = $_SERVER['REQUEST_METHOD'];
$requestUri = str_replace('/api/frontegg', '', $_SERVER['REQUEST_URI']);
$httpHeaders = getallheaders();
$body = http_build_query($requestMethod === 'GET' ? $_GET : $_POST);
// Here you can see how to setup Psr-7 Request object.$adapterRequest = newRequest($requestMethod, $requestUri, $httpHeaders, $body);
$clientId = 'CLIENT_ID';
$apikey = 'API_KEY';
$tenantId = 'THE_TENANT_ID';
$config = [
'clientId' => $clientId,
'clientSecret' => $apikey,
'apiBaseUrl' => 'https://api.test.com/',
'contextResolver' => function(RequestInterface$request) use ($tenantId) {
return [
'tenantId' => $tenantId,
'userId' => 'test-user-id',
'permissions' => [],
];
},
'disableCors' => false,
];
$frontegg = newFrontegg($config);
$response = $frontegg->forward($adapterRequest);
print$response->getBody();

About

Frontegg PHP SDK

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages