first upload all files

This commit is contained in:
NW
2023-06-11 13:14:03 +01:00
parent f14dbc52b5
commit c08b36d1b6
1705 changed files with 106852 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
<?php
namespace Modules\User\Http\Controllers\Admin;
use Modules\User\Http\Controllers\BaseAuthController;
class AuthController extends BaseAuthController
{
/**
* Where to redirect users after login..
*
* @return string
*/
protected function redirectTo()
{
return route('admin.dashboard.index');
}
/**
* The login URL.
*
* @return string
*/
protected function loginUrl()
{
return route('admin.login');
}
/**
* Show login form.
*
* @return \Illuminate\Http\Response
*/
public function getLogin()
{
return view('user::admin.auth.login');
}
/**
* Show reset password form.
*
* @return \Illuminate\Http\Response
*/
public function getReset()
{
return view('user::admin.auth.reset.begin');
}
/**
* Reset complete form route.
*
* @param \Modules\User\Entities\User $user
* @param string $code
* @return string
*/
protected function resetCompleteRoute($user, $code)
{
return route('admin.reset.complete', [$user->email, $code]);
}
/**
* Password reset complete view.
*
* @return string
*/
protected function resetCompleteView()
{
return view('user::admin.auth.reset.complete');
}
}

View File

@@ -0,0 +1,54 @@
<?php
namespace Modules\User\Http\Controllers\Admin;
use Modules\Admin\Ui\Facades\TabManager;
use Modules\User\Http\Requests\UpdateProfileRequest;
class ProfileController
{
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit()
{
$tabs = TabManager::get('profile');
return view('user::admin.profile.edit', compact('tabs'));
}
/**
* Update the specified resource in storage.
*
* @param \Modules\User\Http\Requests\UpdateProfileRequest $request
* @return \Illuminate\Http\Response
*/
public function update(UpdateProfileRequest $request)
{
$this->bcryptPassword($request);
auth()->user()->update($request->all());
return back()->withSuccess(trans('admin::messages.resource_saved', [
'resource' => trans('user::users.profile'),
]));
}
/**
* Bcrypt user password.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
private function bcryptPassword($request)
{
if ($request->filled('password')) {
return $request->merge(['password' => bcrypt($request->password)]);
}
unset($request['password']);
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace Modules\User\Http\Controllers\Admin;
use Modules\User\Entities\Role;
use Modules\Admin\Traits\HasCrudActions;
use Modules\User\Http\Requests\SaveRoleRequest;
class RoleController
{
use HasCrudActions;
/**
* Model for the resource.
*
* @var string
*/
protected $model = Role::class;
/**
* Label of the resource.
*
* @var string
*/
protected $label = 'user::roles.role';
/**
* View path of the resource.
*
* @var string
*/
protected $viewPath = 'user::admin.roles';
/**
* Form requests for the resource.
*
* @var array|string
*/
protected $validation = SaveRoleRequest::class;
}

View File

@@ -0,0 +1,94 @@
<?php
namespace Modules\User\Http\Controllers\Admin;
use Modules\User\Entities\User;
use Modules\Admin\Traits\HasCrudActions;
use Modules\User\Http\Requests\SaveUserRequest;
use Cartalyst\Sentinel\Laravel\Facades\Activation;
class UserController
{
use HasCrudActions;
/**
* Model for the resource.
*
* @var string
*/
protected $model = User::class;
/**
* Label of the resource.
*
* @var string
*/
protected $label = 'user::users.user';
/**
* View path of the resource.
*
* @var string
*/
protected $viewPath = 'user::admin.users';
/**
* Form requests for the resource.
*
* @var array|string
*/
protected $validation = SaveUserRequest::class;
/**
* Store a newly created resource in storage.
*
* @param \Modules\User\Http\Requests\SaveUserRequest $request
* @return \Illuminate\Http\Response
*/
public function store(SaveUserRequest $request)
{
$request->merge(['password' => bcrypt($request->password)]);
$user = User::create($request->all());
$user->roles()->attach($request->roles);
Activation::complete($user, Activation::create($user)->code);
return redirect()->route('admin.users.index')
->withSuccess(trans('admin::messages.resource_saved', ['resource' => trans('user::users.user')]));
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @param \Modules\User\Http\Requests\SaveUserRequest $request
* @return \Illuminate\Http\Response
*/
public function update($id, SaveUserRequest $request)
{
$user = User::findOrFail($id);
if (is_null($request->password)) {
unset($request['password']);
} else {
$request->merge(['password' => bcrypt($request->password)]);
}
$user->update($request->all());
$user->roles()->sync($request->roles);
if (! Activation::completed($user) && $request->activated === '1') {
Activation::complete($user, Activation::create($user)->code);
}
if (Activation::completed($user) && $request->activated === '0') {
Activation::remove($user);
}
return redirect()->route('admin.users.index')
->withSuccess(trans('admin::messages.resource_saved', ['resource' => trans('user::users.user')]));
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace Modules\User\Http\Controllers\Admin;
use Modules\User\Entities\User;
use Illuminate\Support\Facades\Mail;
use Modules\User\Mail\ResetPasswordEmail;
use Modules\User\Contracts\Authentication;
class UserResetPasswordController
{
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store($id, Authentication $auth)
{
$user = User::findOrFail($id);
$code = $auth->createReminderCode($user);
Mail::to($user)
->send(new ResetPasswordEmail($user, $this->getResetCompleteURL($user, $code)));
return redirect()->route('admin.users.index')
->withSuccess(trans('user::messages.users.reset_password_email_sent'));
}
private function getResetCompleteURL($user, $code)
{
return route('admin.reset.complete', [$user->email, $code]);
}
}

View File

@@ -0,0 +1,165 @@
<?php
namespace Modules\User\Http\Controllers;
use Exception;
use Modules\Page\Entities\Page;
use Modules\User\Entities\User;
use Modules\User\LoginProvider;
use Illuminate\Support\Facades\Cache;
use Laravel\Socialite\Facades\Socialite;
class AuthController extends BaseAuthController
{
/**
* Where to redirect users after login..
*
* @return string
*/
protected function redirectTo()
{
return route('account.dashboard.index');
}
/**
* The login URL.
*
* @return string
*/
protected function loginUrl()
{
return route('login');
}
/**
* Show login form.
*
* @return \Illuminate\Http\Response
*/
public function getLogin()
{
return view('public.auth.login', [
'providers' => LoginProvider::enabled(),
]);
}
/**
* Redirect the user to the given provider authentication page.
*
* @param string $provider
* @return \Illuminate\Http\Response
*/
public function redirectToProvider($provider)
{
if (! LoginProvider::isEnable($provider)) {
abort(404);
}
return Socialite::driver($provider)->redirect();
}
/**
* Obtain the user information from the given provider.
*
* @param string $provider
* @return \Illuminate\Http\Response
*/
public function handleProviderCallback($provider)
{
if (! LoginProvider::isEnable($provider)) {
abort(404);
}
try {
$user = Socialite::driver($provider)->user();
} catch (Exception $e) {
return redirect()->route('login')->with('error', $e->getMessage());
}
if (User::registered($user->getEmail())) {
auth()->login(
User::findByEmail($user->getEmail())
);
return redirect($this->redirectTo());
}
[$firstName, $lastName] = $this->extractName($user->getName());
$registeredUser = $this->auth->registerAndActivate([
'first_name' => $firstName,
'last_name' => $lastName,
'email' => $user->getEmail(),
'phone' => '',
'password' => str_random(),
]);
$this->assignCustomerRole($registeredUser);
auth()->login($registeredUser);
return redirect($this->redirectTo());
}
private function extractName($name)
{
return explode(' ', $name, 2);
}
/**
* Show registrations form.
*
* @return \Illuminate\Http\Response
*/
public function getRegister()
{
return view('public.auth.register', [
'privacyPageUrl' => $this->getPrivacyPageUrl(),
'providers' => LoginProvider::enabled(),
]);
}
/**
* Get privacy page url.
*
* @return string
*/
private function getPrivacyPageUrl()
{
return Cache::tags('settings')->rememberForever('privacy_page_url', function () {
return Page::urlForPage(setting('storefront_privacy_page'));
});
}
/**
* Show reset password form.
*
* @return \Illuminate\Http\Response
*/
public function getReset()
{
return view('public.auth.reset.begin');
}
/**
* Reset complete form route.
*
* @param \Modules\User\Entities\User $user
* @param string $code
* @return string
*/
protected function resetCompleteRoute($user, $code)
{
return route('reset.complete', [$user->email, $code]);
}
/**
* Password reset complete view.
*
* @return string
*/
protected function resetCompleteView()
{
return view('public.auth.reset.complete');
}
}

View File

@@ -0,0 +1,232 @@
<?php
namespace Modules\User\Http\Controllers;
use Modules\User\Entities\Role;
use Modules\User\Entities\User;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Mail;
use Modules\User\Mail\ResetPasswordEmail;
use Modules\User\Contracts\Authentication;
use Modules\User\Events\CustomerRegistered;
use Modules\User\Http\Requests\LoginRequest;
use Modules\User\Http\Requests\RegisterRequest;
use Modules\User\Http\Requests\PasswordResetRequest;
use Modules\User\Http\Requests\ResetCompleteRequest;
use Cartalyst\Sentinel\Checkpoints\ThrottlingException;
use Cartalyst\Sentinel\Checkpoints\NotActivatedException;
abstract class BaseAuthController extends Controller
{
/**
* The Authentication instance.
*
* @var \Modules\User\Contracts\Authentication
*/
protected $auth;
/**
* @param \Modules\User\Contracts\Authentication $auth
*/
public function __construct(Authentication $auth)
{
$this->auth = $auth;
$this->middleware('guest')->except('getLogout');
}
/**
* Where to redirect users after login..
*
* @return string
*/
abstract protected function redirectTo();
/**
* The login route.
*
* @return string
*/
abstract protected function loginUrl();
/**
* Show login form.
*
* @return \Illuminate\Http\Response
*/
abstract public function getLogin();
/**
* Show reset password form.
*
* @return \Illuminate\Http\Response
*/
abstract public function getReset();
/**
* Login a user.
*
* @param \Modules\User\Http\Requests\LoginRequest $request
* @return \Illuminate\Http\Response
*/
public function postLogin(LoginRequest $request)
{
try {
$loggedIn = $this->auth->login([
'email' => $request->email,
'password' => $request->password,
], (bool) $request->get('remember_me', false));
if (! $loggedIn) {
return back()->withInput()
->withError(trans('user::messages.users.invalid_credentials'));
}
return redirect()->intended($this->redirectTo());
} catch (NotActivatedException $e) {
return back()->withInput()
->withError(trans('user::messages.users.account_not_activated'));
} catch (ThrottlingException $e) {
return back()->withInput()
->withError(trans('user::messages.users.account_is_blocked', ['delay' => $e->getDelay()]));
}
}
/**
* Logout current user.
*
* @return void
*/
public function getLogout()
{
$this->auth->logout();
return redirect($this->loginUrl());
}
/**
* Register a user.
*
* @param \Modules\User\Http\Requests\RegisterRequest $request
* @return \Illuminate\Http\Response
*/
public function postRegister(RegisterRequest $request)
{
$user = $this->auth->registerAndActivate($request->only([
'first_name',
'last_name',
'email',
'phone',
'password',
]));
$this->assignCustomerRole($user);
event(new CustomerRegistered($user));
return redirect($this->loginUrl())
->withSuccess(trans('user::messages.users.account_created'));
}
protected function assignCustomerRole($user)
{
$role = Role::findOrNew(setting('customer_role'));
if ($role->exists) {
$this->auth->assignRole($user, $role);
}
}
/**
* Start the reset password process.
*
* @param \Modules\User\Http\Requests\PasswordResetRequest $request
* @return \Illuminate\Http\Response
*/
public function postReset(PasswordResetRequest $request)
{
$user = User::where('email', $request->email)->first();
if (is_null($user)) {
return back()->withInput()
->withError(trans('user::messages.users.no_user_found'));
}
$code = $this->auth->createReminderCode($user);
Mail::to($user)
->send(new ResetPasswordEmail($user, $this->resetCompleteRoute($user, $code)));
return back()->withSuccess(trans('user::messages.users.check_email_to_reset_password'));
}
/**
* Reset complete form route.
*
* @param \Modules\User\Entities\User $user
* @param string $code
* @return string
*/
abstract protected function resetCompleteRoute($user, $code);
/**
* Password reset complete view.
*
* @return string
*/
abstract protected function resetCompleteView();
/**
* Show reset password complete form.
*
* @param string $email
* @param string $code
* @return \Illuminate\Http\Response
*/
public function getResetComplete($email, $code)
{
$user = User::where('email', $email)->firstOrFail();
if ($this->invalidResetCode($user, $code)) {
return redirect()->route('reset')
->withError(trans('user::messages.users.invalid_reset_code'));
}
return $this->resetCompleteView()->with(compact('user', 'code'));
}
/**
* Determine the given reset code is invalid.
*
* @param \Modules\User\Entities\User $user
* @param string $code
* @return bool
*/
private function invalidResetCode($user, $code)
{
return $user->reminders()->where('code', $code)->doesntExist();
}
/**
* Complete the reset password process.
*
* @param string $email
* @param string $code
* @param \Modules\User\Http\Requests\ResetCompleteRequest $request
* @return \Illuminate\Http\Response
*/
public function postResetComplete($email, $code, ResetCompleteRequest $request)
{
$user = User::where('email', $email)->firstOrFail();
$completed = $this->auth->completeResetPassword($user, $code, $request->new_password);
if (! $completed) {
return back()->withInput()
->withError(trans('user::messages.users.invalid_reset_code'));
}
return redirect($this->loginUrl())
->withSuccess(trans('user::messages.users.password_has_been_reset'));
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace Modules\User\Http\Requests;
use Modules\Core\Http\Requests\Request;
class LoginRequest extends Request
{
/**
* Available attributes for users.
*
* @var string
*/
protected $availableAttributes = 'user::attributes.users';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|email',
'password' => 'required',
];
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Modules\User\Http\Requests;
use Modules\Core\Http\Requests\Request;
class PasswordResetRequest extends Request
{
/**
* Available attributes.
*
* @var string
*/
protected $availableAttributes = 'user::attributes.users';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|email',
];
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace Modules\User\Http\Requests;
use Modules\Core\Http\Requests\Request;
class RegisterRequest extends Request
{
/**
* Available attributes.
*
* @var string
*/
protected $availableAttributes = 'user::attributes.users';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'first_name' => ['required'],
'last_name' => ['required'],
'email' => ['required', 'email', 'unique:users'],
'phone' => ['required'],
'password' => ['required', 'confirmed', 'min:6'],
'captcha' => ['required', 'captcha'],
'privacy_policy' => ['accepted'],
];
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace Modules\User\Http\Requests;
use Modules\Core\Http\Requests\Request;
class ResetCompleteRequest extends Request
{
/**
* Available attributes.
*
* @var string
*/
protected $availableAttributes = 'user::attributes.users';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'new_password' => 'required|confirmed|min:6',
'new_password_confirmation' => 'required',
];
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Modules\User\Http\Requests;
use Modules\Core\Http\Requests\Request;
class SaveRoleRequest extends Request
{
/**
* Available attributes.
*
* @var string
*/
protected $availableAttributes = 'user::attributes.roles';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required',
];
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\User\Http\Requests;
use Illuminate\Validation\Rule;
use Modules\Core\Http\Requests\Request;
class SaveUserRequest extends Request
{
/**
* Available attributes.
*
* @var string
*/
protected $availableAttributes = 'user::attributes.users';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'first_name' => 'required',
'last_name' => 'required',
'email' => ['required', 'email', $this->emailUniqueRule()],
'phone' => ['required'],
'password' => 'nullable|confirmed|min:6',
'roles' => ['required', Rule::exists('roles', 'id')],
];
}
private function emailUniqueRule()
{
$rule = Rule::unique('users');
if ($this->route()->getName() === 'admin.users.update') {
$userId = $this->route()->parameter('id');
return $rule->ignore($userId);
}
return $rule;
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\User\Http\Requests;
use Illuminate\Validation\Rule;
use Modules\Core\Http\Requests\Request;
class UpdateProfileRequest extends Request
{
/**
* Available attributes.
*
* @var string
*/
protected $availableAttributes = 'user::attributes.users';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => ['required', Rule::unique('users')->ignore($this->email, 'email')],
'phone' => ['required'],
'first_name' => ['required'],
'last_name' => ['required'],
'password' => ['nullable', 'confirmed', 'min:6'],
];
}
/**
* Hash the user password against the bcrypt algorithm.
*
* @return $this|null
*/
public function bcryptPassword()
{
if ($this->filled('password')) {
return $this->merge(['password' => bcrypt($this->password)]);
}
unset($this['password']);
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Modules\User\Http\ViewComposers;
class CurrentUserComposer
{
/**
* Bind data to the view.
*
* @param \Illuminate\View\View $view
* @return void
*/
public function compose($view)
{
$view->with('currentUser', auth()->user());
}
}