DatabaseTokenRepository.php 1.68 KB
Newer Older
Jens Segers's avatar
Jens Segers committed
1 2 3
<?php

namespace Jenssegers\Mongodb\Auth;
duxet's avatar
duxet committed
4

David Schreck's avatar
David Schreck committed
5 6
use DateTime;
use DateTimeZone;
7
use Illuminate\Auth\Passwords\DatabaseTokenRepository as BaseDatabaseTokenRepository;
8
use Illuminate\Support\Facades\Date;
9
use MongoDB\BSON\UTCDateTime;
duxet's avatar
duxet committed
10

11
class DatabaseTokenRepository extends BaseDatabaseTokenRepository
Jens Segers's avatar
Jens Segers committed
12
{
Jens Segers's avatar
Jens Segers committed
13
    /**
14
     * @inheritdoc
Jens Segers's avatar
Jens Segers committed
15 16 17
     */
    protected function getPayload($email, $token)
    {
Jens Segers's avatar
Jens Segers committed
18 19 20
        return [
            'email' => $email,
            'token' => $this->hasher->make($token),
21
            'created_at' => new UTCDateTime(Date::now()->format('Uv')),
Jens Segers's avatar
Jens Segers committed
22
        ];
Jens Segers's avatar
Jens Segers committed
23 24 25
    }

    /**
26
     * @inheritdoc
Jens Segers's avatar
Jens Segers committed
27
     */
Le The Hoang's avatar
Le The Hoang committed
28
    protected function tokenExpired($createdAt)
29 30 31 32 33 34 35 36 37 38 39 40
    {
        $createdAt = $this->convertDateTime($createdAt);

        return parent::tokenExpired($createdAt);
    }

    /**
     * @inheritdoc
     */
    protected function tokenRecentlyCreated($createdAt)
    {
        $createdAt = $this->convertDateTime($createdAt);
41

42 43 44 45
        return parent::tokenRecentlyCreated($createdAt);
    }

    private function convertDateTime($createdAt)
Jens Segers's avatar
Jens Segers committed
46
    {
47
        // Convert UTCDateTime to a date string.
Le The Hoang's avatar
Le The Hoang committed
48 49
        if ($createdAt instanceof UTCDateTime) {
            $date = $createdAt->toDateTime();
50
            $date->setTimezone(new DateTimeZone(date_default_timezone_get()));
Le The Hoang's avatar
Le The Hoang committed
51
            $createdAt = $date->format('Y-m-d H:i:s');
Simon Schaufelberger's avatar
Simon Schaufelberger committed
52
        } elseif (is_array($createdAt) && isset($createdAt['date'])) {
Le The Hoang's avatar
Le The Hoang committed
53
            $date = new DateTime($createdAt['date'], new DateTimeZone(isset($createdAt['timezone']) ? $createdAt['timezone'] : 'UTC'));
Jens Segers's avatar
Jens Segers committed
54
            $date->setTimezone(new DateTimeZone(date_default_timezone_get()));
Le The Hoang's avatar
Le The Hoang committed
55
            $createdAt = $date->format('Y-m-d H:i:s');
Jens Segers's avatar
Jens Segers committed
56 57
        }

58
        return $createdAt;
Jens Segers's avatar
Jens Segers committed
59
    }
duxet's avatar
duxet committed
60
}