mirror of
https://github.com/anikeen-com/id.git
synced 2026-03-13 13:46:13 +00:00
263 lines
5.6 KiB
Plaintext
263 lines
5.6 KiB
Plaintext
# Anikeen ID
|
|
|
|
[](https://packagist.org/packages/anikeen/id)
|
|
[](https://packagist.org/packages/anikeen/id)
|
|
[](https://packagist.org/packages/anikeen/id)
|
|
|
|
PHP Anikeen ID API Client for Laravel 11+
|
|
|
|
## Table of contents
|
|
|
|
1. [Installation](#installation)
|
|
2. [Event Listener](#event-listener)
|
|
3. [Configuration](#configuration)
|
|
4. [Implementing Auth](#implementing-auth)
|
|
5. [General](#general)
|
|
6. [Examples](#examples)
|
|
7. [Documentation](#documentation)
|
|
8. [Development](#Development)
|
|
|
|
## Installation
|
|
|
|
```
|
|
composer require anikeen/id
|
|
```
|
|
|
|
## Event Listener
|
|
|
|
In Laravel 11, the default EventServiceProvider provider was removed. Instead, add the listener using the listen method on the Event facade, in your `AppServiceProvider`
|
|
|
|
```
|
|
Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
|
|
$event->extendSocialite('anikeen-id', \Anikeen\Id\Socialite\Provider::class);
|
|
});
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Add environmental variables to your `.env`
|
|
|
|
```
|
|
ANIKEEN_ID_KEY=
|
|
ANIKEEN_ID_SECRET=
|
|
ANIKEEN_ID_CALLBACK_URL=http://localhost/auth/callback
|
|
```
|
|
|
|
You will need to add an entry to the services configuration file so that after config files are cached for usage in production environment (Laravel command `artisan config:cache`) all config is still available.
|
|
|
|
**Add to `config/services.php`:**
|
|
|
|
```php
|
|
'anikeen' => [
|
|
'client_id' => env('ANIKEEN_ID_KEY'),
|
|
'client_secret' => env('ANIKEEN_ID_SECRET'),
|
|
'redirect' => env('ANIKEEN_ID_CALLBACK_URL'),
|
|
'base_url' => env('ANIKEEN_ID_BASE_URL'),
|
|
],
|
|
```
|
|
|
|
```php
|
|
$middleware->web(append: [
|
|
\Anikeen\Id\Http\Middleware\CreateFreshApiToken::class,
|
|
]);
|
|
```
|
|
|
|
## Implementing Auth
|
|
|
|
This method should typically be called in the `boot` method of your `AuthServiceProvider` class:
|
|
|
|
```php
|
|
use Anikeen\Id\AnikeenId;
|
|
use Anikeen\Id\Providers\AnikeenIdSsoUserProvider;
|
|
use Illuminate\Http\Request;
|
|
|
|
/**
|
|
* Register any authentication / authorization services.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function boot()
|
|
{
|
|
Auth::provider('sso-users', function ($app, array $config) {
|
|
return new AnikeenIdSsoUserProvider(
|
|
$app->make(AnikeenId::class),
|
|
$app->make(Request::class),
|
|
$config['model'],
|
|
$config['fields'] ?? [],
|
|
$config['access_token_field'] ?? null
|
|
);
|
|
});
|
|
}
|
|
```
|
|
|
|
reference the guard in the `guards` configuration of your `auth.php` configuration file:
|
|
|
|
```php
|
|
'guards' => [
|
|
'web' => [
|
|
'driver' => 'session',
|
|
'provider' => 'users',
|
|
],
|
|
|
|
'api' => [
|
|
'driver' => 'anikeen-id',
|
|
'provider' => 'sso-users',
|
|
],
|
|
],
|
|
```
|
|
|
|
reference the provider in the `providers` configuration of your `auth.php` configuration file:
|
|
|
|
```php
|
|
'providers' => [
|
|
'users' => [
|
|
'driver' => 'eloquent',
|
|
'model' => App\Models\User::class,
|
|
],
|
|
|
|
'sso-users' => [
|
|
'driver' => 'sso-users',
|
|
'model' => App\Models\User::class,
|
|
'fields' => ['first_name', 'last_name', 'email'],
|
|
'access_token_field' => 'sso_access_token',
|
|
],
|
|
],
|
|
```
|
|
|
|
## General
|
|
|
|
#### Setters and Getters
|
|
|
|
```php
|
|
$anikeenId = new Anikeen\Id\AnikeenId();
|
|
|
|
$anikeenId->setClientId('abc123');
|
|
$anikeenId->setClientSecret('abc456');
|
|
$anikeenId->setToken('abcdef123456');
|
|
|
|
$anikeenId = $anikeenId->withClientId('abc123');
|
|
$anikeenId = $anikeenId->withClientSecret('abc123');
|
|
$anikeenId = $anikeenId->withToken('abcdef123456');
|
|
```
|
|
|
|
#### Error handling for an unsuccessful query:
|
|
|
|
```php
|
|
$result = $anikeenId->sshKeysByUserId('someInvalidId');
|
|
|
|
// Check, if the query was successfully
|
|
if (!$result->success()) {
|
|
die('Ooops: ' . $result->error());
|
|
}
|
|
```
|
|
|
|
#### Shift result to get single key data:
|
|
|
|
```php
|
|
$result = $anikeenId->sshKeysByUserId('someValidId');
|
|
|
|
$sshKey = $result->shift();
|
|
|
|
echo $sshKey->name;
|
|
```
|
|
|
|
## Examples
|
|
|
|
#### Get User SSH Key
|
|
|
|
```php
|
|
$anikeenId = new Anikeen\IdAnikeenId();
|
|
|
|
$anikeenId->setClientId('abc123');
|
|
|
|
// Get SSH Key by User ID
|
|
$result = $anikeenId->sshKeysByUserId('someValidId');
|
|
|
|
// Check, if the query was successfully
|
|
if (!$result->success()) {
|
|
die('Ooops: ' . $result->error());
|
|
}
|
|
|
|
// Shift result to get single key data
|
|
$sshKey = $result->shift();
|
|
|
|
echo $sshKey->name;
|
|
```
|
|
|
|
#### Create Order Preview
|
|
|
|
```php
|
|
$anikeenId = new \Anikeen\Id\AnikeenId();
|
|
|
|
// Create new Order Preview
|
|
$result = $anikeenId->createOrderPreview([
|
|
'country_iso' => 'de',
|
|
'items' => [
|
|
[
|
|
'type' => 'physical',
|
|
'name' => 'Test',
|
|
'price' => 2.99,
|
|
'unit' => 'onetime',
|
|
'units' => 1,
|
|
]
|
|
]
|
|
])->shift();
|
|
|
|
echo $preview->gross_total;
|
|
```
|
|
|
|
#### OAuth Tokens
|
|
|
|
```php
|
|
$anikeenId = new Anikeen\Id\AnikeenId();
|
|
|
|
$anikeenId->setClientId('abc123');
|
|
$anikeenId->setToken('abcdef123456');
|
|
|
|
$result = $anikeenId->getAuthedUser();
|
|
|
|
$user = $userResult->shift();
|
|
```
|
|
|
|
```php
|
|
$anikeenId->setToken('uvwxyz456789');
|
|
|
|
$result = $anikeenId->getAuthedUser();
|
|
```
|
|
|
|
```php
|
|
$result = $anikeenId->withToken('uvwxyz456789')->getAuthedUser();
|
|
```
|
|
|
|
#### Facade
|
|
|
|
```php
|
|
use Anikeen\Id\Facades\AnikeenId;
|
|
|
|
AnikeenId::withClientId('abc123')->withToken('abcdef123456')->getAuthedUser();
|
|
```
|
|
|
|
## Documentation
|
|
|
|
<!-- GENERATED-DOCS -->
|
|
|
|
[**OAuth Scopes Enums**](https://github.com/anikeen-com/id/blob/main/src/Enums/Scope.php)
|
|
|
|
## Development
|
|
|
|
#### Run Tests
|
|
|
|
```shell
|
|
composer test
|
|
```
|
|
|
|
```shell
|
|
BASE_URL=xxxx CLIENT_ID=xxxx CLIENT_KEY=yyyy CLIENT_ACCESS_TOKEN=zzzz composer test
|
|
```
|
|
|
|
#### Generate Documentation
|
|
|
|
```shell
|
|
composer docs
|
|
```
|