public function handleForgot(Request $request, UserRepository $users)
{
if (!$this->checkCaptcha($request)) {
return json(trans('auth.validation.captcha'), 1);
}
if (config('mail.host') == "") {
return json(trans('auth.forgot.close'), 1);
}
if (Session::has('last_mail_time') && time() - session('last_mail_time') < 60) {
return json(trans('auth.forgot.frequent-mail'), 1);
}
// get user instance
$user = $users->get($request->input('email'), 'email');
if (!$user) {
return json(trans('auth.forgot.unregistered'), 1);
}
$uid = $user->uid;
// generate token for password resetting
$token = base64_encode($user->getToken() . substr(time(), 4, 6) . Utils::generateRndString(16));
$url = Option::get('site_url') . "/auth/reset?uid={$uid}&token={$token}";
try {
Mail::send('auth.mail', ['reset_url' => $url], function ($m) use($request) {
$site_name = Option::get('site_name');
$m->from(config('mail.username'), $site_name);
$m->to($request->input('email'))->subject(trans('auth.mail.title', ['sitename' => $site_name]));
});
Log::info("[Password Reset] Mail has been sent to [{$request->input('email')}] with token [{$token}]");
} catch (\Exception $e) {
return json(trans('auth.mail.failed', ['msg' => $e->getMessage()]), 2);
}
Session::put('last_mail_time', time());
return json(trans('auth.mail.success'), 0);
}