https://github.com/aldeebhasan/multi-agents
This package will help you to handle multi device operations
https://github.com/aldeebhasan/multi-agents
agent-managment devices-manager laravel multi-device settings-management
Last synced: 5 months ago
JSON representation
This package will help you to handle multi device operations
- Host: GitHub
- URL: https://github.com/aldeebhasan/multi-agents
- Owner: aldeebhasan
- Created: 2021-12-10T19:11:15.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-12-11T19:27:51.000Z (over 4 years ago)
- Last Synced: 2025-05-23T05:48:21.085Z (about 1 year ago)
- Topics: agent-managment, devices-manager, laravel, multi-device, settings-management
- Language: PHP
- Homepage:
- Size: 15.6 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Multi Agent Library
=====
A php package that enable the user to handle multiple agent (devices) at the same time. This package allows you to link
any model with many devices, and provide a kind of authentication for the functionality this device can use.
Installation
------------
Install using composer:
```bash
composer require aldeebhasan/multi-agents
```
After finishing the installation process you need to migrate the package tables to the database.
run the following command
```php
php artisan migrate
```
Basic Usage
-----------
### Devices
To identify that any specific model could be linked with various devices, you can use the `HasMultiAgent` trait.
```php
class Client
{
use HasMultiAgent;
...
```
To create a new device you can use the `register` function.
Note: `uuid` should be unique for each device
```php
$device = Device::register('uuid');
```
Now, you can use the following functions to link/unlink the device with the `Client` model
```php
use Aldeebhasan\MultiAgents\Models\Device
$device = Device::register('uuid');
$client = new Client();
// Link the device with the model
$client->linkDevices($device);
//you can also pass a list of device objects
$client->linkDevices([$device,$device,....]);
// Unlink the device from the model
$client->unlinkDevices($device);
//you can also pass a list of device objects
$client->unlinkDevices([$device,$device,....]);
//unlink all the devices related to specific model
$client->unlinkAll();
```
To retrieve all te devices lined to specific model
```php
$client->devices
```
To obtain the owner of the device use the following.
Note: The owner could be any model use the `HasMultiAgent` trait, and the device already linked to it.
```php
$device->owner
```
Finally, thanks for the [Agent](https://github.com/jenssegers/agent) package author, where you can perform a list of
check functions over the current device agent. yYou can check all the function related to the device egent
from [here](https://github.com/jenssegers/agent).
Now, to retrieve the device agent object you can use.
```php
$device = $client->devices->first();
$device->agent
```
### Middleware
After registering any device, the device object will have a `token` attribute.
This attribute should be sent at the `Header` or as `POST`or `GET` parameter with the key `Device-Token` to authenticate this registered device.
To use the device authentication middleware, you need to add it first to the `app\Http\Kernel.php` under `$routeMiddleware` as follow:
```php
'auth.device' => \Aldeebhasan\MultiAgents\Middleware\DeviceAuthenticated::class,
```
Next, you have to attach the middleware to your rout or inside your controller.
```php
//in the routes
Route::middleware(['auth.device'])->group(function () {
Route::get('/device-info', function () {
return getCurrentDevice();
});
});
//in the controller
public function __construct()
{
$this->middleware('auth.device';
}
```
The package contains `getCurrentDevice()` helper function to retrieve the device that match the passed `Device-Token`
Furthermore, if you want to authenticate only the devices linked with a specific model, you can pass the Model class name to the middleware.
```php
// if the passed token match with any of the token
// registered for the `Client` model it wil allow
// it to pass to the inner route.
// Otherwise, DeviceAuthenticationException Exception will be thrown
Route::middleware(['auth.device:'.Client::class])->group(function () {
Route::get('/device-info', function () {
return getCurrentDevice();
});
});
```
### Exceptions
Two kinds of exceptions could be thrown from the package DeviceAuthenticated middleware:
- **DeviceAuthenticationException**: when no device match the passed token.
- **DeviceExpiredTokenException**: when the device token is expired and the device need to be registered again.
### Settings
Each device could have a list of setting related to it.
You can initialize a list of settings you want to link with a specific set of devices, and attach them to the devices.
```php
use Aldeebhasan\MultiAgents\Models\Setting
$setting1 = Setting::register('key1');
$setting2 = Setting::register('key2');
//add settings with its value to specific device
$device->addSettings([
'key1'=>'value1',
'key2'=>'value2',
]);
//remove setting/s from a specific device
//single setting
$device->deleteSettings('key1');
//multiple settings
$device->deleteSettings(['key1','key2']);
//to perform the two operations togather and sync the settings with their value with specific device
$device2->syncSettings([
'key1'=>'value1',
]);
//the sync function will unlink all the settings doesn't much the keys,
// and link/change the value of the settings that are appeared in the provided list
```
Finally, to retrive all the setting related to specific device
```php
$device->getSettings();
//output: [
// 'key1'=>'value1',
// 'key2'=>'value2',
// ]
```
## License
Laravel Multi Agent package is licensed under [The MIT License (MIT)](https://github.com/git/git-scm.com/blob/main/MIT-LICENSE.txt).
## Security contact information
To report a security vulnerability, contact directly to the developer contact email [Here](mailto:aldeeb.91@gmail.com).