/
var
/
www
/
html
/
cravings
/
app
/
Http
/
Controllers
/
Auth
/
Upload File
HOME
<?php namespace App\Http\Controllers\Auth; use App\AppConstants; use App\User; use App\Http\Controllers\Controller; use App\Mail\RegisterUser; use App\Mail\NewUser; use App\Mail\ResendLink; use App\Mail\UserRegistered; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Auth\Events\Registered; use Illuminate\Http\Request; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Http\JsonResponse; use Illuminate\Support\Str; use Illuminate\Support\Facades\Mail; use Illuminate\Validation\ValidationException; class RegisterController extends Controller { /* |-------------------------------------------------------------------------- | Register Controller |-------------------------------------------------------------------------- | | This controller handles the registration of new users as well as their | validation and creation. By default this controller uses a trait to | provide this functionality without requiring any additional code. | */ use RegistersUsers; /** * Where to redirect users after registration. * * @var string */ protected $redirectTo = '/'; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest'); } /** * Show the application registration form. * * @return \Illuminate\View\View */ public function showRegistrationForm() { return view('auth.register', ['page' => 'User', 'name' => AppConstants::REGISTER_NAME, 'username' => AppConstants::REGISTER_USERNAME]); } /** * Show the application's login form. * * @return \Illuminate\View\View */ public function showApiRegisterForm(Request $request) { return view('auth.app_register', ['name' => AppConstants::REGISTER_NAME, 'username' => AppConstants::REGISTER_USERNAME]); } public function register(Request $request) { try { $this->validator($request->all())->validate(); } catch (ValidationException $e) { return view('auth.register', ['errorbag' => $e->errors(), 'fields' => $request->all()]); } event(new Registered($user = $this->create($request->all()))); Mail::to($user)->send(new RegisterUser($user)); Mail::to(getenv('ADMIN_EMAIL'))->send(new NewUser($user)); $this->guard()->login($user); if ($response = $this->registered($request, $user)) { return $response; } return $request->wantsJson() ? new JsonResponse([], 201) : redirect()->intended($this->redirectPath())->with('status', 'Logged in'); } public function apiRegister(Request $request) { $data = json_decode($request->getContent(), true); $validator = $this->validator($data); if ($validator->fails()) { return response()->json(['status' => 'failed', 'message' => $validator->errors()]); } $user = $this->create($data); if(!$user) return response()->json(['error' => 'Account could not be created, try again.']); event(new Registered($user)); $this->guard()->login($user); return response()->json(['user' => $user->email], 201); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { return Validator::make($data, [ AppConstants::REGISTER_USERNAME => 'required|string|max:255|min:6|unique:users', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8', ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ protected function create(array $data) { return User::create([ 'name' => $data[AppConstants::REGISTER_NAME], 'username' => $data[AppConstants::REGISTER_NAME], 'email' => strtolower($data['email']), 'password' => Hash::make($data['password']), 'role' => $data['role'] ?? 'user', 'avatar' => '', 'created_at' => (new \DateTime('now', new \DateTimeZone('Africa/Lagos')))->format('Y-m-d H:i:s') ]); } public function verifyEmail(Request $request, $token) { $email = urldecode($request->query('email')); $user = User::where(['verification_token' => $token, 'email' => $email])->first(); if($user && (new \DateTime($user->verification_start) > new \DateTime('24 hours ago'))){ $user->verification_token = ''; $user->verification_start = null; $user->verified = true; $user->save(); $this->guard()->login($user); return $user->role === 'tester' ? redirect()->route('test_begin') : redirect()->route('home'); }elseif(!$user){ return view('user.error', ['message' => 'Link invalid']); }else { // $user->delete(); return view('user.error', ['message' => 'Verification link has expired. Try again', 'expired' => true, 'email' => $user->email]); } } public function resendVerificationEmail(Request $request) { $email = $request->query('email'); $user = User::where(['email' => $email])->firstOrFail(); $user->verification_token = Str::random(30); $user->verification_start = (new \DateTime('now', new \DateTimeZone('Africa/Lagos')))->format('Y-m-d H:i:s'); $user->save(); Mail::to($user)->send(new ResendLink($user)); return view('user.holder', ['user' => $user]); } }