GraphictoriaWeb/web/app/Http/Controllers/AuthController.php

126 lines
3.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use App\Helpers\AuthHelper;
use App\Models\User;
class AuthController extends Controller
{
/**
* Creates an account for the user.
*
* @return Response
*/
public function Register(Request $request) {
if(AuthHelper::Guard($request))
return Response(null, 400);
/* */
$data = $request->all();
if ($request->input('password') != $request->input('confirmation'))
return Response()->json(['message'=>'The passwords you supplied don\'t match!', 'badInputs'=>['password','confirmation']]);
$valid = Validator::make(
$data,
[
'username' => ['required', 'string', 'regex:/[a-zA-Z0-9._]+/', 'max:20'],
'email' => ['required', 'string', 'email', 'max:255'],
'password' => ['required', 'string', 'min:8'],
]
);
if ($valid->stopOnFirstFailure()->fails()) {
$error = $valid->errors()->first();
$messages = $valid->messages()->get('*');
return Response()->json(['message'=>$error, 'badInputs'=>[array_keys($messages)]]);
}
if(User::where('username', $data['username'])->first())
return Response()->json(['message'=>'This user already exists.', 'badInputs'=>['username']]);
if(User::where('email', $data['email'])->first())
return Response()->json(['message'=>'This email is already in use!', 'badInputs'=>['email']]);
$user = new User();
$user->username = $data['username'];
$user->email = $data['email'];
$user->password = Hash::make($data['password']);
$user->about = 'I\'m new to Graphictoria!';
$user->save();
$request->session()->regenerate();
$newSession = AuthHelper::GrantSession($request, $user->id);
$request->session()->put('authentication', $newSession->token);
return Response()->json(['message'=>'Success!', 'badInputs'=>[]]);
}
/**
* Logs the user in.
*
* @return Response
*/
public function Login(Request $request) {
if(AuthHelper::Guard($request))
return Response(null, 400);
/* */
$data = $request->all();
$valid = Validator::make(
$data,
[
'username' => ['required', 'string'],
'password' => ['required', 'string'],
]
);
if ($valid->stopOnFirstFailure()->fails()) {
$error = $valid->errors()->first();
$messages = $valid->messages()->get('*');
return Response()->json(['message'=>$error, 'badInputs'=>[array_keys($messages)]]);
}
/* */
$user = User::where('username', $request->input('username'))->first();
if (!$user)
return Response()->json(['message'=>'That user doesn\'t exist.', 'badInputs'=>['username']]);
if (Hash::check($request->input('password'), $user->password))
return Response()->json(['message'=>'The password you tried is incorrect.', 'badInputs'=>['password']]);
$request->session()->regenerate();
$newSession = AuthHelper::GrantSession($request, $user->id);
$request->session()->put('authentication', $newSession->token);
return Response()->json(['message'=>'Success!', 'badInputs'=>[]]);
}
/**
* Logs the user out and kills the session.
*
* @return Response
*/
public function Logout(Request $request) {
if(!AuthHelper::Guard($request))
return Response(null, 400);
AuthHelper::RemoveSession($request);
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}