OwlCyberSecurity - MANAGER
Edit File: IlluminateReminderRepository.php
<?php /** * Part of the Sentinel package. * * NOTICE OF LICENSE * * Licensed under the 3-clause BSD License. * * This source file is subject to the 3-clause BSD License that is * bundled with this package in the LICENSE file. * * @package Sentinel * @version 2.0.18 * @author Cartalyst LLC * @license BSD License (3-clause) * @copyright (c) 2011-2019, Cartalyst LLC * @link http://cartalyst.com */ namespace Cartalyst\Sentinel\Reminders; use Carbon\Carbon; use Cartalyst\Sentinel\Users\UserInterface; use Cartalyst\Sentinel\Users\UserRepositoryInterface; use Cartalyst\Support\Traits\RepositoryTrait; class IlluminateReminderRepository implements ReminderRepositoryInterface { use RepositoryTrait; /** * The user repository. * * @var \Cartalyst\Sentinel\Users\UserRepositoryInterface */ protected $users; /** * The Eloquent reminder model name. * * @var string */ protected $model = 'Cartalyst\Sentinel\Reminders\EloquentReminder'; /** * The expiration time in seconds. * * @var int */ protected $expires = 259200; /** * Create a new Illuminate reminder repository. * * @param \Cartalyst\Sentinel\Users\UserRepositoryInterface $users * @param string $model * @param int $expires * @return void */ public function __construct(UserRepositoryInterface $users, $model = null, $expires = null) { $this->users = $users; if (isset($model)) { $this->model = $model; } if (isset($expires)) { $this->expires = $expires; } } /** * {@inheritDoc} */ public function create(UserInterface $user) { $reminder = $this->createModel(); $code = $this->generateReminderCode(); $reminder->fill([ 'code' => $code, 'completed' => false, ]); $reminder->user_id = $user->getUserId(); $reminder->save(); return $reminder; } /** * {@inheritDoc} */ public function exists(UserInterface $user, $code = null) { $expires = $this->expires(); $reminder = $this ->createModel() ->newQuery() ->where('user_id', $user->getUserId()) ->where('completed', false) ->where('created_at', '>', $expires); if ($code) { $reminder->where('code', $code); } return $reminder->first() ?: false; } /** * {@inheritDoc} */ public function complete(UserInterface $user, $code, $password) { $expires = $this->expires(); $reminder = $this ->createModel() ->newQuery() ->where('user_id', $user->getUserId()) ->where('code', $code) ->where('completed', false) ->where('created_at', '>', $expires) ->first(); if ($reminder === null) { return false; } $credentials = compact('password'); $valid = $this->users->validForUpdate($user, $credentials); if ($valid === false) { return false; } $this->users->update($user, $credentials); $reminder->fill([ 'completed' => true, 'completed_at' => Carbon::now(), ]); $reminder->save(); return true; } /** * {@inheritDoc} */ public function removeExpired() { $expires = $this->expires(); return $this ->createModel() ->newQuery() ->where('completed', false) ->where('created_at', '<', $expires) ->delete(); } /** * Returns the expiration date. * * @return \Carbon\Carbon */ protected function expires() { return Carbon::now()->subSeconds($this->expires); } /** * Returns a random string for a reminder code. * * @return string */ protected function generateReminderCode() { return str_random(32); } }