Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers\Core;
- use App\Helpers\ResponseHelper;
- use App\Http\Controllers\Controller;
- use App\Mail\AccountCreated;
- use App\Mail\ForgottenPassword;
- use App\Models\User;
- use http\Exception;
- use JWTAuth;
- use Validator;
- use Tymon\JWTAuth\Exceptions\JWTException;
- use Illuminate\Http\Request;
- use DB;
- use Illuminate\Support\Facades\Mail;
- class AuthenticateController extends Controller {
- public function activateAccount(Request $request) {
- $v = Validator::make($request->all(), [
- 'email' => 'required|email',
- 'email_key' => 'required|min:16'
- ]);
- if ($v->fails()) {
- return ResponseHelper::genericError();
- }
- $user = User::where('email', '=', $request->get('email'))->first();
- if ($user === null) {
- return ResponseHelper::buildResponse(false, null, 'User does not exist', 'INCORRECT_USER');
- } else if ($user->email_key !== $request->get('email_key')) {
- return ResponseHelper::buildResponse(false, null, 'Incorrect email key', 'INCORRECT_EMAIL_KEY');
- } else if ($user->activated === true) {
- return ResponseHelper::buildResponse(false, null, 'Account already activated', 'ACCOUNT_ALREADY_ACTIVATED');
- }
- $user->activated = true;
- $user->save();
- LogController::logEvent('USER_ACTIVATED',
- 'Id: ' . $user->id,
- $user->id, $request->ip());
- return ResponseHelper::buildResponse(true, null, null, null);
- }
- public function resetPassword(Request $request) {
- $v = Validator::make($request->all(), [
- 'email' => 'required|email',
- 'email_key' => 'required|min:16',
- 'password' => 'required|string|min:6|max:50|regex:/^(?=.{6,32}$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*/'
- ]);
- if ($v->fails()) {
- $failedRules = $v->failed();
- if (isset($failedRules['password']['Min']) || isset($failedRules['password']['Max'])) {
- return ResponseHelper::buildResponse(false, null, 'Password must be between 6 and 50 characters', 'REGISTRATION_PASSWORD_INVALID_LENGTH');
- } else if (isset($failedRules['password']['Regex'])) {
- return ResponseHelper::buildResponse(false, null, 'Invalid password.', 'REGISTRATION_PASSWORD_INVALID_REGEX');
- } else {
- return ResponseHelper::genericError();
- }
- }
- $email = $request->get('email');
- $user = User::where('email', '=', $email)->first();
- if ($user === null) {
- return ResponseHelper::buildResponse(false, null, 'User does not exist', 'INCORRECT_USER');
- } else if ($user->email_key !== $request->get('email_key')) {
- return ResponseHelper::buildResponse(false, null, 'Incorrect email key', 'INCORRECT_EMAIL_KEY');
- }
- $user->password = bcrypt($request->get('password'));
- $user->email_key = ResponseHelper::getKey();
- $user->save();
- return ResponseHelper::buildResponse(true, null, null, null);
- }
- public function forgottenPassword(Request $request) {
- $v = Validator::make($request->all(), [
- 'email' => 'required|email'
- ]);
- if ($v->fails()) {
- return ResponseHelper::genericError();
- }
- $email = $request->get('email');
- $user = User::where('email', '=', $email)->first();
- if ($user === null) {
- return ResponseHelper::buildResponse(false, null, 'User does not exist', 'INCORRECT_USER');
- }
- Mail::to($email)->send(new ForgottenPassword($user));
- return ResponseHelper::buildResponse(true, null, null, null);
- }
- public function register(Request $request) {
- $v = Validator::make($request->all(), [
- 'username' => 'required|string|min:3|max:15|unique:users',
- 'email' => 'required|string|max:255|email|unique:users',
- 'password' => 'required|string|min:6|max:50|regex:/^(?=.{6,32}$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*/'
- ]);
- if ($v->fails()) {
- $failedRules = $v->failed();
- if (isset($failedRules['email']['Unique'])) {
- return ResponseHelper::buildResponse(false, null, 'Email is already taken', 'REGISTRATION_EMAIL_ALREADY_EXISTS');
- } else if (isset($failedRules['email']['Email'])) {
- return ResponseHelper::buildResponse(false, null, 'Email format is invalid', 'REGISTRATION_EMAIL_INVALID_REGEX');
- } else if (isset($failedRules['username']['Unique'])) {
- return ResponseHelper::buildResponse(false, null, 'Username is already taken', 'REGISTRATION_USERNAME_ALREADY_EXISTS');
- } else if (isset($failedRules['username']['Max'])) {
- return ResponseHelper::buildResponse(false, null, 'Username must be at most 15 characters', 'REGISTRATION_USERNAME_TOO_LONG');
- } else if (isset($failedRules['username']['Min'])) {
- return ResponseHelper::buildResponse(false, null, 'Username must be at least 3 characters', 'REGISTRATION_USERNAME_TOO_SHORT');
- } else if (isset($failedRules['password']['Min']) || isset($failedRules['password']['Max'])) {
- return ResponseHelper::buildResponse(false, null, 'Password must be between 6 and 50 characters', 'REGISTRATION_PASSWORD_INVALID_LENGTH');
- } else if (isset($failedRules['password']['Regex'])) {
- return ResponseHelper::buildResponse(false, null, 'Password should contain at least 3 of the following: uppercases, lowercases, numbers, special characters.', 'REGISTRATION_PASSWORD_INVALID_REGEX');
- } else {
- return ResponseHelper::genericError();
- }
- }
- $username = $request->input('username');
- $first_name = 'DEFAULT_VALUE';
- $last_name = 'DEFAULT_VALUE';
- $email = $request->input('email');
- $password = bcrypt($request->input('password'));
- $activated = !config('app.email_confirmation_enabled');
- DB::beginTransaction();
- try {
- $createdUser = User::create([
- 'level' => 'USER',
- 'username' => $username,
- 'first_name' => $first_name,
- 'last_name' => $last_name,
- 'email' => $email,
- 'password' => $password,
- 'email_key' => ResponseHelper::getKey(),
- 'activated' => $activated
- ]);
- Mail::to($email)->send(new AccountCreated($createdUser));
- DB::commit();
- } catch (Exception $e) {
- DB::rollBack();
- return ResponseHelper::genericError();
- }
- LogController::logEvent('USER_REGISTERED',
- 'Id: ' . $createdUser->id,
- $createdUser->id, $request->ip());
- $data = [
- 'user' => $createdUser
- ];
- return ResponseHelper::buildResponse(true, $data, null, null);
- }
- public function login(Request $request) {
- $v = Validator::make($request->all(), [
- 'email' => 'required|string',
- 'password' => 'required|string',
- ]);
- if ($v->fails()) {
- return ResponseHelper::genericError();
- }
- $credentials = $request->only('email', 'password');
- try {
- $token = JWTAuth::attempt($credentials);
- // verify the credentials and create a token for the user
- if (!$token) {
- return ResponseHelper::buildResponse(false, null, 'Invalid credentials', 'INVALID_CREDENTIALS');
- }
- } catch (JWTException $e) {
- // something went wrong
- return ResponseHelper::genericError();
- }
- JWTAuth::setToken($token);
- $user = JWTAuth::authenticate();
- if ($user->activated === false) {
- return ResponseHelper::buildResponse(false, null, 'Account is not activated', 'ACCOUNT_NOT_ACTIVATED');
- }
- LogController::logEvent('USER_LOGIN',
- 'Id: ' . $user->id,
- $user->id, $request->ip());
- $data = [
- 'level' => $user->level,
- 'token' => $token
- ];
- return ResponseHelper::buildResponse(true, $data, null, null);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement