OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)
This commit is contained in:
114
app/Domain/Auth/Repositories/AccessTokenRepository.php
Normal file
114
app/Domain/Auth/Repositories/AccessTokenRepository.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
namespace Leantime\Domain\Auth\Repositories;
|
||||
|
||||
use Illuminate\Database\ConnectionInterface;
|
||||
use Illuminate\Support\Str;
|
||||
use Leantime\Core\Db\Db;
|
||||
|
||||
class AccessTokenRepository
|
||||
{
|
||||
private ConnectionInterface $db;
|
||||
|
||||
public function __construct(Db $db)
|
||||
{
|
||||
$this->db = $db->getConnection();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DateTimeInterface|null $expiresAt Optional absolute expiry. Null
|
||||
* keeps the historical non-expiring
|
||||
* behavior; getTokenByUserId() already
|
||||
* honors expires_at when set.
|
||||
*/
|
||||
public function createToken(int $userId, string $name, array $abilities = ['*'], ?\DateTimeInterface $expiresAt = null): array
|
||||
{
|
||||
$token = Str::random(40);
|
||||
$hashedToken = hash('sha256', $token);
|
||||
|
||||
$id = $this->db->table('zp_access_tokens')->insertGetId([
|
||||
'tokenable_type' => 'Leantime\\Domain\\Auth\\Services\\Auth',
|
||||
'tokenable_id' => $userId,
|
||||
'name' => $name,
|
||||
'token' => $hashedToken,
|
||||
'abilities' => json_encode($abilities),
|
||||
'expires_at' => $expiresAt,
|
||||
'created_at' => now(),
|
||||
]);
|
||||
|
||||
return [
|
||||
'id' => $id,
|
||||
'token' => $token,
|
||||
];
|
||||
}
|
||||
|
||||
public function findToken(string $token): ?array
|
||||
{
|
||||
$hashedToken = hash('sha256', $token);
|
||||
|
||||
$result = $this->db->table('zp_access_tokens')
|
||||
->where('token', $hashedToken)
|
||||
->first();
|
||||
|
||||
return $result ? (array) $result : null;
|
||||
}
|
||||
|
||||
public function findTokenById(int $tokenId): ?array
|
||||
{
|
||||
$result = $this->db->table('zp_access_tokens')
|
||||
->where('id', $tokenId)
|
||||
->first();
|
||||
|
||||
return $result ? (array) $result : null;
|
||||
}
|
||||
|
||||
public function deleteToken(int $id): bool
|
||||
{
|
||||
return $this->db->table('zp_access_tokens')
|
||||
->where('id', $id)
|
||||
->delete() > 0;
|
||||
}
|
||||
|
||||
public function updateLastUsedAt(int $id): bool
|
||||
{
|
||||
return $this->db->table('zp_access_tokens')
|
||||
->where('id', $id)
|
||||
->update(['last_used_at' => now()]) > 0;
|
||||
}
|
||||
|
||||
public function getTokenByUserId(int|string $userId, ?string $name = null): ?array
|
||||
{
|
||||
$query = $this->db->table('zp_access_tokens')
|
||||
->where('tokenable_id', $userId)
|
||||
->where(function ($q) {
|
||||
$q->whereNull('expires_at')
|
||||
->orWhere('expires_at', '>', now());
|
||||
});
|
||||
|
||||
if ($name !== null) {
|
||||
$query->where('name', $name);
|
||||
}
|
||||
|
||||
$result = $query->first();
|
||||
|
||||
return $result ? (array) $result : null;
|
||||
}
|
||||
|
||||
public function getAllTokensByUserId(int|string $userId, ?string $name = null): ?array
|
||||
{
|
||||
$query = $this->db->table('zp_access_tokens')
|
||||
->where('tokenable_id', $userId);
|
||||
|
||||
if ($name !== null) {
|
||||
$query->where('name', $name);
|
||||
}
|
||||
|
||||
$results = $query->get();
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return array_map(fn ($item) => (array) $item, $results->toArray());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user