Adjust join token expiry for event dates
This commit is contained in:
@@ -27,14 +27,21 @@ class EventJoinTokenService
|
||||
];
|
||||
|
||||
if ($expiresAt = Arr::get($attributes, 'expires_at')) {
|
||||
$payload['expires_at'] = $expiresAt instanceof Carbon
|
||||
$resolvedExpiry = $expiresAt instanceof Carbon
|
||||
? $expiresAt
|
||||
: Carbon::parse($expiresAt);
|
||||
} else {
|
||||
$ttlHours = (int) (GuestPolicySetting::current()->join_token_ttl_hours ?? 0);
|
||||
|
||||
if ($ttlHours > 0) {
|
||||
$payload['expires_at'] = now()->addHours($ttlHours);
|
||||
$minimumExpiry = $this->minimumExpiryForEvent($event);
|
||||
if ($minimumExpiry && $resolvedExpiry->lessThan($minimumExpiry)) {
|
||||
$resolvedExpiry = $minimumExpiry;
|
||||
}
|
||||
|
||||
$payload['expires_at'] = $resolvedExpiry;
|
||||
} else {
|
||||
$defaultExpiry = $this->defaultExpiryForEvent($event);
|
||||
|
||||
if ($defaultExpiry) {
|
||||
$payload['expires_at'] = $defaultExpiry;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +55,21 @@ class EventJoinTokenService
|
||||
});
|
||||
}
|
||||
|
||||
public function extendExpiryForEvent(Event $event): int
|
||||
{
|
||||
$minimumExpiry = $this->minimumExpiryForEvent($event);
|
||||
|
||||
if (! $minimumExpiry) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $event->joinTokens()
|
||||
->whereNull('revoked_at')
|
||||
->whereNotNull('expires_at')
|
||||
->where('expires_at', '<', $minimumExpiry)
|
||||
->update(['expires_at' => $minimumExpiry]);
|
||||
}
|
||||
|
||||
public function revoke(EventJoinToken $joinToken, ?string $reason = null): EventJoinToken
|
||||
{
|
||||
unset($joinToken->plain_token);
|
||||
@@ -162,6 +184,61 @@ class EventJoinTokenService
|
||||
return hash('sha256', $token);
|
||||
}
|
||||
|
||||
public function minimumExpiryForEvent(Event $event): ?Carbon
|
||||
{
|
||||
$eventDate = $this->resolveEventDate($event);
|
||||
|
||||
if (! $eventDate) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$ttlHours = $this->defaultTtlHours();
|
||||
|
||||
if ($ttlHours > 0) {
|
||||
return $eventDate->copy()->addHours($ttlHours);
|
||||
}
|
||||
|
||||
return $eventDate;
|
||||
}
|
||||
|
||||
private function defaultExpiryForEvent(Event $event): ?Carbon
|
||||
{
|
||||
$ttlHours = $this->defaultTtlHours();
|
||||
|
||||
if ($ttlHours <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$defaultExpiry = now()->addHours($ttlHours);
|
||||
$minimumExpiry = $this->minimumExpiryForEvent($event);
|
||||
|
||||
if ($minimumExpiry && $minimumExpiry->greaterThan($defaultExpiry)) {
|
||||
$defaultExpiry = $minimumExpiry;
|
||||
}
|
||||
|
||||
return $defaultExpiry;
|
||||
}
|
||||
|
||||
private function resolveEventDate(Event $event): ?Carbon
|
||||
{
|
||||
if (! ($event->date instanceof Carbon)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$eventDate = $event->date->copy();
|
||||
|
||||
if ($eventDate->format('H:i:s') === '00:00:00') {
|
||||
$eventDate = $eventDate->endOfDay();
|
||||
}
|
||||
|
||||
return $eventDate;
|
||||
}
|
||||
|
||||
private function defaultTtlHours(): int
|
||||
{
|
||||
return (int) (GuestPolicySetting::current()->join_token_ttl_hours ?? 0);
|
||||
}
|
||||
|
||||
private function normalizeDeviceId(?string $deviceId): ?string
|
||||
{
|
||||
if (! is_string($deviceId) || trim($deviceId) === '') {
|
||||
|
||||
Reference in New Issue
Block a user