Files
nexusphp/app/Models/OauthProvider.php

49 lines
1.3 KiB
PHP
Raw Normal View History

2025-04-24 15:30:07 +07:00
<?php
namespace App\Models;
2025-10-12 03:48:04 +07:00
use App\Models\Traits\NexusActivityLogTrait;
2025-04-24 15:30:07 +07:00
use Laravel\Passport\Client;
2025-05-02 11:53:56 +07:00
use Nexus\Database\NexusDB;
2025-04-24 15:30:07 +07:00
use Ramsey\Uuid;
class OauthProvider extends NexusModel
{
2025-10-12 03:48:04 +07:00
use NexusActivityLogTrait;
2025-04-24 15:30:07 +07:00
protected $fillable = [
'uuid', 'name', 'client_id', 'client_secret', 'authorization_endpoint_url', 'token_endpoint_url',
'user_info_endpoint_url', 'id_claim', 'username_claim', 'email_claim', 'enabled', 'priority',
'level_claim', 'level_limit',
2025-04-24 15:30:07 +07:00
];
public $timestamps = true;
2025-05-02 11:53:56 +07:00
const NEW_UUID_CACHE_KEY = 'new_oauth_provider_uuid';
2025-04-24 15:30:07 +07:00
protected $casts = [
'enabled' => 'boolean',
];
protected static function booted(): void
{
static::creating(function (OauthProvider $model) {
2025-05-02 11:53:56 +07:00
$model->uuid = self::getNewUuid();
});
static::created(function (OauthProvider $model) {
NexusDB::cache_del(self::NEW_UUID_CACHE_KEY);
});
}
public static function getCallbackUrl(string $uuid): string
{
return sprintf("%s/oauth/callback/%s", getSchemeAndHttpHost(), $uuid);
}
private static function getNewUuid(): string
{
return NexusDB::remember(self::NEW_UUID_CACHE_KEY, 86400 * 365, function () {
return UUid\v4();
2025-04-24 15:30:07 +07:00
});
}
}