Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Models/Traits/HasAccessTokens.php
10259 views
1
<?php
2
3
namespace Pterodactyl\Models\Traits;
4
5
use Illuminate\Support\Str;
6
use Laravel\Sanctum\Sanctum;
7
use Pterodactyl\Models\ApiKey;
8
use Laravel\Sanctum\HasApiTokens;
9
use Illuminate\Database\Eloquent\Relations\HasMany;
10
use Pterodactyl\Extensions\Laravel\Sanctum\NewAccessToken;
11
12
/**
13
* @template TToken of \Laravel\Sanctum\Contracts\HasAbilities
14
*
15
* @mixin \Pterodactyl\Models\Model
16
*/
17
trait HasAccessTokens
18
{
19
/** @use \Laravel\Sanctum\HasApiTokens<TToken> */
20
use HasApiTokens {
21
tokens as private _tokens;
22
createToken as private _createToken;
23
}
24
25
public function tokens(): HasMany
26
{
27
return $this->hasMany(Sanctum::$personalAccessTokenModel);
28
}
29
30
public function createToken(?string $memo, ?array $ips): NewAccessToken
31
{
32
/** @var ApiKey $token */
33
$token = $this->tokens()->forceCreate([
34
'user_id' => $this->id,
35
'key_type' => ApiKey::TYPE_ACCOUNT,
36
'identifier' => ApiKey::generateTokenIdentifier(ApiKey::TYPE_ACCOUNT),
37
'token' => encrypt($plain = Str::random(ApiKey::KEY_LENGTH)),
38
'memo' => $memo ?? '',
39
'allowed_ips' => $ips ?? [],
40
]);
41
42
return new NewAccessToken($token, $plain);
43
}
44
}
45
46