first commit

This commit is contained in:
2025-03-07 00:29:07 -06:00
commit b21a11c2ee
564 changed files with 94041 additions and 0 deletions

View File

@ -0,0 +1,31 @@
<?php
namespace Koneko\VuexyAdmin\Providers;
use Illuminate\Support\ServiceProvider;
use Koneko\VuexyAdmin\Services\GlobalSettingsService;
class ConfigServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register()
{
// Cargar configuración del sistema
$this->mergeConfigFrom(__DIR__.'/../config/vuexy.php', 'vuexy');
}
/**
* Bootstrap services.
*/
public function boot(): void
{
// Cargar configuración del sistema
$globalSettingsService = app(GlobalSettingsService::class);
$globalSettingsService->loadSystemConfig();
// Cargar configuración del sistema a través del servicio
app(GlobalSettingsService::class)->loadSystemConfig();
}
}

View File

@ -0,0 +1,124 @@
<?php
namespace Koneko\VuexyAdmin\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
use Laravel\Fortify\Fortify;
use Koneko\VuexyAdmin\Actions\Fortify\CreateNewUser;
use Koneko\VuexyAdmin\Actions\Fortify\ResetUserPassword;
use Koneko\VuexyAdmin\Actions\Fortify\UpdateUserPassword;
use Koneko\VuexyAdmin\Actions\Fortify\UpdateUserProfileInformation;
use Koneko\VuexyAdmin\Models\User;
use Koneko\VuexyAdmin\Services\AdminTemplateService;
class FortifyServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::createUsersUsing(CreateNewUser::class);
Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
RateLimiter::for('login', function (Request $request) {
$throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())) . '|' . $request->ip());
return Limit::perMinute(5)->by($throttleKey);
});
RateLimiter::for('two-factor', function (Request $request) {
return Limit::perMinute(5)->by($request->session()->get('login.id'));
});
Fortify::authenticateUsing(function (Request $request) {
$user = User::where('email', $request->email)
->where('status', User::STATUS_ENABLED)
->first();
if ($user && Hash::check($request->password, $user->password)) {
return $user;
}
});
// Simula lo que hace tu middleware y comparte `_admin`
$viewMode = Config::get('vuexy.custom.authViewMode');
$adminVars = app(AdminTemplateService::class)->getAdminVars();
// Configurar la vista del login
Fortify::loginView(function () use ($viewMode, $adminVars) {
$pageConfigs = ['myLayout' => 'blank'];
view()->share('_admin', $adminVars);
return view("vuexy-admin::auth.login-{$viewMode}", ['pageConfigs' => $pageConfigs]);
});
// Configurar la vista del registro (si lo necesitas)
Fortify::registerView(function () use ($viewMode, $adminVars) {
$pageConfigs = ['myLayout' => 'blank'];
view()->share('_admin', $adminVars);
return view("vuexy-admin::auth.register-{$viewMode}", ['pageConfigs' => $pageConfigs]);
});
// Configurar la vista de restablecimiento de contraseñas
Fortify::requestPasswordResetLinkView(function () use ($viewMode, $adminVars) {
$pageConfigs = ['myLayout' => 'blank'];
view()->share('_admin', $adminVars);
return view("vuexy-admin::auth.forgot-password-{$viewMode}", ['pageConfigs' => $pageConfigs]);
});
Fortify::resetPasswordView(function ($request) use ($viewMode, $adminVars) {
$pageConfigs = ['myLayout' => 'blank'];
view()->share('_admin', $adminVars);
return view("vuexy-admin::auth.reset-password-{$viewMode}", ['pageConfigs' => $pageConfigs, 'request' => $request]);
});
// Vista de verificación de correo electrónico
Fortify::verifyEmailView(function () use ($viewMode, $adminVars) {
view()->share('_admin', $adminVars);
return view("vuexy-admin::auth.verify-email-{$viewMode}");
});
// Vista de confirmación de contraseña
Fortify::confirmPasswordView(function () use ($viewMode, $adminVars) {
$pageConfigs = ['myLayout' => 'blank'];
view()->share('_admin', $adminVars);
return view("vuexy-admin::auth.confirm-password-{$viewMode}", ['pageConfigs' => $pageConfigs]);
});
// Configurar la vista para la verificación de dos factores
Fortify::twoFactorChallengeView(function () use ($viewMode, $adminVars) {
$pageConfigs = ['myLayout' => 'blank'];
view()->share('_admin', $adminVars);
return view("vuexy-admin::auth.two-factor-challenge-{$viewMode}", ['pageConfigs' => $pageConfigs]);
});
}
}

View File

@ -0,0 +1,132 @@
<?php
namespace Koneko\VuexyAdmin\Providers;
use Koneko\VuexyAdmin\Http\Middleware\AdminTemplateMiddleware;
use Koneko\VuexyAdmin\Listeners\{ClearUserCache,HandleUserLogin};
use Koneko\VuexyAdmin\Livewire\Users\{UserIndex,UserShow,UserForm,UserOffCanvasForm};
use Koneko\VuexyAdmin\Livewire\Roles\RoleIndex;
use Koneko\VuexyAdmin\Livewire\Permissions\PermissionIndex;
use Koneko\VuexyAdmin\Livewire\Cache\{CacheFunctions,CacheStats,SessionStats,MemcachedStats,RedisStats};
use Koneko\VuexyAdmin\Livewire\AdminSettings\{ApplicationSettings,GeneralSettings,InterfaceSettings,MailSmtpSettings,MailSenderResponseSettings};
use Koneko\VuexyAdmin\Console\Commands\CleanInitialAvatars;
use Koneko\VuexyAdmin\Helpers\VuexyHelper;
use Koneko\VuexyAdmin\Models\User;
use Illuminate\Support\Facades\{URL,Event,Blade};
use Illuminate\Support\ServiceProvider;
use Illuminate\Foundation\AliasLoader;
use Illuminate\Auth\Events\{Login,Logout};
use Livewire\Livewire;
use OwenIt\Auditing\AuditableObserver;
use Spatie\Permission\PermissionServiceProvider;
class VuexyAdminServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
// Cargar configuraciones personalizadas
$this->mergeConfigFrom(__DIR__.'/../config/koneko.php', 'koneko');
// Register the module's services and providers
$this->app->register(ConfigServiceProvider::class);
$this->app->register(FortifyServiceProvider::class);
$this->app->register(PermissionServiceProvider::class);
// Register the module's aliases
AliasLoader::getInstance()->alias('Helper', VuexyHelper::class);
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
if(env('FORCE_HTTPS', false)){
URL::forceScheme('https');
}
// Registrar alias del middleware
$this->app['router']->aliasMiddleware('admin', AdminTemplateMiddleware::class);
// Sobrescribir ruta de traducciones para asegurar que se usen las del paquete
$this->app->bind('path.lang', function () {
return __DIR__ . '/../resources/lang';
});
// Register the module's routes
$this->loadRoutesFrom(__DIR__.'/../routes/admin.php');
// Cargar vistas del paquete
$this->loadViewsFrom(__DIR__.'/../resources/views', 'vuexy-admin');
// Registrar Componentes Blade
Blade::componentNamespace('VuexyAdmin\\View\\Components', 'vuexy-admin');
// Publicar los archivos necesarios
$this->publishes([
__DIR__.'/../config/fortify.php' => config_path('fortify.php'),
__DIR__.'/../config/image.php' => config_path('image.php'),
__DIR__.'/../config/vuexy_menu.php' => config_path('vuexy_menu.php'),
], 'vuexy-admin-config');
$this->publishes([
__DIR__.'/../database/seeders/' => database_path('seeders'),
__DIR__.'/../database/data' => database_path('data'),
], 'vuexy-admin-seeders');
$this->publishes([
__DIR__.'/../resources/img' => public_path('vendor/vuexy-admin/img'),
], 'vuexy-admin-images');
// Register the migrations
$this->loadMigrationsFrom(__DIR__ . '/../database/migrations');
// Registrar eventos
Event::listen(Login::class, HandleUserLogin::class);
Event::listen(Logout::class, ClearUserCache::class);
// Registrar comandos de consola
if ($this->app->runningInConsole()) {
$this->commands([
CleanInitialAvatars::class,
]);
}
// Registrar Livewire Components
$components = [
'user-index' => UserIndex::class,
'user-show' => UserShow::class,
'user-form' => UserForm::class,
'user-offcanvas-form' => UserOffCanvasForm::class,
'role-index' => RoleIndex::class,
'permission-index' => PermissionIndex::class,
'general-settings' => GeneralSettings::class,
'application-settings' => ApplicationSettings::class,
'interface-settings' => InterfaceSettings::class,
'mail-smtp-settings' => MailSmtpSettings::class,
'mail-sender-response-settings' => MailSenderResponseSettings::class,
'cache-stats' => CacheStats::class,
'session-stats' => SessionStats::class,
'redis-stats' => RedisStats::class,
'memcached-stats' => MemcachedStats::class,
'cache-functions' => CacheFunctions::class,
];
foreach ($components as $alias => $component) {
Livewire::component($alias, $component);
}
// Registrar auditoría en usuarios
User::observe(AuditableObserver::class);
}
}