Skip to content

Commit

Permalink
Global token + update code
Browse files Browse the repository at this point in the history
  • Loading branch information
Гарбуз Иван committed Oct 23, 2021
1 parent 0bfc820 commit b73123f
Show file tree
Hide file tree
Showing 18 changed files with 291 additions and 41 deletions.
Expand Up @@ -42,6 +42,7 @@ public function up()
$table->string('token')->unique();
$table->string('title')->nullable();
$table->datetime('expiration')->nullable();
$table->datetime('last_use')->nullable();
$table->index('token');
$table->timestamps();
});
Expand Down
71 changes: 71 additions & 0 deletions src/Commands/CreateGlobalTokenCommand.php
@@ -0,0 +1,71 @@
<?php

declare(strict_types=1);

namespace Garbuzivan\Laraveltokens\Commands;

use Carbon\Carbon;
use Garbuzivan\Laraveltokens\Exceptions\UserNotExistsException;
use Garbuzivan\Laraveltokens\TokenManager;
use Illuminate\Console\Command;
use Illuminate\Support\Composer;

class CreateGlobalTokenCommand extends Command
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'tokens:global-create {title} {day}';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Создать новый токен (tokens:create {title} {количество дней действия или 0 - бессрочно})';

/**
* The console command signature.
*
* @var string
*/
protected $signature = 'tokens:global-create {title} {day}';

/**
* @var Composer
*/
public Composer $composer;

/**
* @var TokenManager
*/
public TokenManager $TokenManager;

/**
* Create a new command instance.
*/
public function __construct(TokenManager $TokenManager)
{
parent::__construct();
$this->TokenManager = $TokenManager;
}

/**
* Execute the command.
*
* @return mixed
*/
public function handle()
{
$arguments = $this->arguments();
$title = $arguments['title'] ?? date('Y-m-d H:i:s');
$day = intval($arguments['day']);
$expiration = $day > 0 ? Carbon::now()->addDays($day) : null;
$token = $this->TokenManager->createGlobalToken($title, $expiration);
$date = is_null($expiration) ? 'навсегда' : 'до ' . $expiration->format('Y-m-d H:i:s');
$this->line('Глобальный токен ' . $token->token . ' создан '. $date . '.');
return 1;
}
}
3 changes: 2 additions & 1 deletion src/Commands/CreateTokenCommand.php
Expand Up @@ -72,7 +72,8 @@ public function handle()
$this->line('Пользователь ID ' . $user_id . ' не найден.');
return 1;
}
$this->line('Персональный токен ' . $token->token . ' создан до ' . $token->expiration . '.');
$date = is_null($expiration) ? 'навсегда' : 'до ' . $expiration->format('Y-m-d H:i:s');
$this->line('Персональный токен ' . $token->token . ' создан '. $date . '.');
return 1;
}
}
Expand Up @@ -4,7 +4,7 @@

namespace Garbuzivan\Laraveltokens\Exceptions;

class TokenIsNotNalidException extends \Exception
class TokenIsNotValidException extends \Exception
{

}
4 changes: 2 additions & 2 deletions src/Interfaces/AccessTokenRepositoryInterface.php
Expand Up @@ -155,11 +155,11 @@ public function getAccessToken(string $token): ?AccessToken;
/**
* Фиксация последней активности токена
*
* @param string $token
* @param int $token_id
*
* @return bool
*/
public function setLastUseAccessToken(string $token): bool;
public function setLastUseAccessToken(int $token_id): bool;

/**
* Проверка полиморфной связи
Expand Down
4 changes: 2 additions & 2 deletions src/Interfaces/GlobalTokenRepositoryInterface.php
Expand Up @@ -108,9 +108,9 @@ public function getGlobalToken(string $token): ?GlobalToken;
/**
* Фиксация последней активности токена
*
* @param string $token
* @param int $token_id
*
* @return bool
*/
public function setLastUseGlobalToken(string $token): bool;
public function setLastUseGlobalToken(int $token_id): bool;
}
8 changes: 8 additions & 0 deletions src/Interfaces/ModelToken.php
@@ -0,0 +1,8 @@
<?php

namespace Garbuzivan\Laraveltokens\Interfaces;

interface ModelToken
{

}
4 changes: 2 additions & 2 deletions src/Middleware/LaravelTokens.php
Expand Up @@ -6,7 +6,7 @@

use Closure;
use Garbuzivan\Laraveltokens\Exceptions\EmptyTokenException;
use Garbuzivan\Laraveltokens\Exceptions\TokenIsNotNalidException;
use Garbuzivan\Laraveltokens\Exceptions\TokenIsNotValidException;
use Garbuzivan\Laraveltokens\TokenManager;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Http\Request;
Expand Down Expand Up @@ -52,7 +52,7 @@ public function handle($request, Closure $next)
}
try {
$token = $this->TokenManager->auth($token);
} catch (TokenIsNotNalidException $e) {
} catch (TokenIsNotValidException $e) {
abort(403);
}
if ($token->user instanceof Authenticatable) {
Expand Down
3 changes: 2 additions & 1 deletion src/Models/AccessToken.php
Expand Up @@ -5,11 +5,12 @@
namespace Garbuzivan\Laraveltokens\Models;

use Carbon\Carbon;
use Garbuzivan\Laraveltokens\Interfaces\ModelToken;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;

class AccessToken extends Model
class AccessToken extends Model implements ModelToken
{
use HasFactory;

Expand Down
6 changes: 5 additions & 1 deletion src/Models/GlobalToken.php
Expand Up @@ -5,10 +5,11 @@
namespace Garbuzivan\Laraveltokens\Models;

use Carbon\Carbon;
use Garbuzivan\Laraveltokens\Interfaces\ModelToken;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class GlobalToken extends Model
class GlobalToken extends Model implements ModelToken
{
use HasFactory;

Expand All @@ -21,13 +22,15 @@ class GlobalToken extends Model
'token',
'title',
'expiration',
'last_use',
];

/**
* @var string[]
*/
protected $dates = [
'expiration',
'last_use',
'created_at',
'updated_at',
];
Expand All @@ -49,6 +52,7 @@ class GlobalToken extends Model
'token' => 'string',
'title' => 'string',
'expiration' => 'datetime',
'last_use' => 'datetime',
];

/**
Expand Down
3 changes: 2 additions & 1 deletion src/Models/RefreshToken.php
Expand Up @@ -5,12 +5,13 @@
namespace Garbuzivan\Laraveltokens\Models;

use Carbon\Carbon;
use Garbuzivan\Laraveltokens\Interfaces\ModelToken;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;

class RefreshToken extends Model
class RefreshToken extends Model implements ModelToken
{
use HasFactory;

Expand Down
7 changes: 3 additions & 4 deletions src/Repositories/AccessTokenRepository.php
Expand Up @@ -9,7 +9,6 @@
use Garbuzivan\Laraveltokens\Exceptions\UserNotExistsException;
use Garbuzivan\Laraveltokens\Interfaces\AccessTokenRepositoryInterface;
use Garbuzivan\Laraveltokens\Models\AccessToken;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\DB;

Expand Down Expand Up @@ -219,13 +218,13 @@ public function getAccessToken(string $token): ?AccessToken
/**
* Фиксация последней активности токена
*
* @param string $token
* @param int $token_id
*
* @return bool
*/
public function setLastUseAccessToken(string $token): bool
public function setLastUseAccessToken(int $token_id): bool
{
return (bool)AccessToken::where('token', $token)->update([
return (bool)AccessToken::where('id', $token_id)->update([
'last_use' => Carbon::now()->subMinutes(),
]);
}
Expand Down
6 changes: 3 additions & 3 deletions src/Repositories/GlobalTokenRepository.php
Expand Up @@ -149,13 +149,13 @@ public function getGlobalToken(string $token): ?GlobalToken
/**
* Фиксация последней активности токена
*
* @param string $token
* @param int $token_id
*
* @return bool
*/
public function setLastUseGlobalToken(string $token): bool
public function setLastUseGlobalToken(int $token_id): bool
{
return (bool)GlobalToken::where('token', $token)->update([
return (bool)GlobalToken::where('id', $token_id)->update([
'last_use' => Carbon::now()->subMinutes(),
]);
}
Expand Down
2 changes: 2 additions & 0 deletions src/ServiceProvider.php
Expand Up @@ -4,6 +4,7 @@

namespace Garbuzivan\Laraveltokens;

use Garbuzivan\Laraveltokens\Commands\CreateGlobalTokenCommand;
use Garbuzivan\Laraveltokens\Commands\CreateTokenCommand;
use Garbuzivan\Laraveltokens\Commands\DeactivationByIDCommand;
use Garbuzivan\Laraveltokens\Commands\DeactivationByUserCommand;
Expand Down Expand Up @@ -48,6 +49,7 @@ public function boot()
ProlongationByIDCommand::class,
ProlongationByUserCommand::class,
ProlongationByTokenCommand::class,
CreateGlobalTokenCommand::class,
]);
}
}
Expand Down

0 comments on commit b73123f

Please sign in to comment.