Prepare Beta Version

This commit is contained in:
2025-05-29 10:05:27 -06:00
parent a7002701f5
commit ea6b04f3f4
254 changed files with 5653 additions and 6569 deletions

117
config/auth.php Normal file
View File

@ -0,0 +1,117 @@
<?php
declare(strict_types=1);
return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option defines the default authentication "guard" and password
| reset "broker" for your application. You may change these values
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => env('AUTH_GUARD', 'web'),
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| which utilizes session storage plus the Eloquent user provider.
|
| All authentication guards have a user provider, which defines how the
| users are actually retrieved out of your database or other storage
| system used by the application. Typically, Eloquent is utilized.
|
| Supported: "session"
|
*/
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication guards have a user provider, which defines how the
| users are actually retrieved out of your database or other storage
| system used by the application. Typically, Eloquent is utilized.
|
| If you have multiple user tables or models you may configure multiple
| providers to represent the model / table. These providers may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => env('AUTH_MODEL', Koneko\VuexyAdmin\Models\User::class),
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| These configuration options specify the behavior of Laravel's password
| reset functionality, including the table utilized for token storage
| and the user provider that is invoked to actually retrieve users.
|
| The expiry time is the number of minutes that each reset token will be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
| The throttle setting is the number of seconds a user must wait before
| generating more password reset tokens. This prevents the user from
| quickly generating a very large amount of password reset tokens.
|
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
'expire' => 60,
'throttle' => 60,
],
],
/*
|--------------------------------------------------------------------------
| Password Confirmation Timeout
|--------------------------------------------------------------------------
|
| Here you may define the amount of seconds before a password confirmation
| window expires and users are asked to re-enter their password via the
| confirmation screen. By default, the timeout lasts for three hours.
|
*/
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
];

View File

@ -1,20 +0,0 @@
<?php
declare(strict_types=1);
return [
'connections' => [
'keyvault' => [
'driver' => 'mysql',
'host' => env('KEYVAULT_DB_HOST', '127.0.0.1'),
'database' => env('KEYVAULT_DB_DATABASE', 'key_vault'),
'username' => env('KEYVAULT_DB_USERNAME', 'vault_user'),
'password' => env('KEYVAULT_DB_PASSWORD', 'secret'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => env('KEYVAULT_DB_PREFIX', ''),
'strict' => true,
'engine' => null,
],
],
];

View File

@ -1,5 +1,5 @@
<?php
// Variables
return [
"title" => "Koneko Soluciones Tecnológicas",
"description" => "Koneko Soluciones Tecnológicas ofrece desarrollo de sistemas empresariales, sitios web profesionales, inteligencia artificial, infraestructura y soluciones digitales avanzadas para negocios en México.",
@ -7,4 +7,18 @@ return [
"app_name" => "koneko.mx",
"app_logo" => "../vendor/vuexy-admin/img/logo/koneko-04.png",
"favicon" => "../vendor/vuexy-admin/img/logo/koneko-04.png",
// ================== 📦 CACHE GENERAL ==================
'cache' => [
'enabled' => (bool) env('KONEKO_CACHE_ENABLED', true),
'ttl' => (int) env('KONEKO_CACHE_TTL', 20 * 24 * 60), // 20 días
],
// ================== 📦 CACHE DE COMPONENTE ==================
'core' => [
'cache' => [
'enabled' => (bool) env('KONEKO_CORE_CACHE_ENABLED', true),
'ttl' => (int) env('KONEKO_CORE_CACHE_TTL', 20 * 24 * 60),
],
],
];

View File

@ -1,107 +0,0 @@
<?php
return [
// Personalización de interfaz
'vuexy' => [
'myLayout' => 'horizontal', // Options[String]: vertical(default), horizontal
'myTheme' => 'theme-semi-dark', // Options[String]: theme-default(default), theme-bordered, theme-semi-dark
'myStyle' => 'light', // Options[String]: light(default), dark & system mode
'myRTLSupport' => false, // options[Boolean]: true(default), false // To provide RTLSupport or not
'myRTLMode' => false, // options[Boolean]: false(default), true // To set layout to RTL layout (myRTLSupport must be true for rtl mode)
'hasCustomizer' => true, // options[Boolean]: true(default), false // Display customizer or not THIS WILL REMOVE INCLUDED JS FILE. SO LOCAL STORAGE WON'T WORK
'displayCustomizer' => true, // options[Boolean]: true(default), false // Display customizer UI or not, THIS WON'T REMOVE INCLUDED JS FILE. SO LOCAL STORAGE WILL WORK
'contentLayout' => 'compact', // options[String]: 'compact', 'wide' (compact=container-xxl, wide=container-fluid)
'navbarType' => 'static', // options[String]: 'sticky', 'static', 'hidden' (Only for vertical Layout)
'footerFixed' => false, // options[Boolean]: false(default), true // Footer Fixed
'menuFixed' => false, // options[Boolean]: true(default), false // Layout(menu) Fixed (Only for vertical Layout)
'menuCollapsed' => true, // options[Boolean]: false(default), true // Show menu collapsed, (Only for vertical Layout)
'headerType' => 'static', // options[String]: 'static', 'fixed' (for horizontal layout only)
'showDropdownOnHover' => false, // true, false (for horizontal layout only)
'authViewMode' => 'cover', // Options[String]: cover(default), basic
'maxQuickLinks' => 8, // options[Integer]: 8(default), 6, 8, 10
'customizerControls' => [
'style',
'headerType',
'contentLayout',
'layoutCollapsed',
'layoutNavbarOptions',
'themes',
], // To show/hide customizer options
],
// HTTPS y proxies
'security' => [
'force_https' => (bool) env('FORCE_HTTPS', false),
'trust_proxy' => (bool) env('TRUST_PROXY', false),
'trust_proxy_ips' => env('TRUST_PROXY_IPS', '*'),
// Key Vault & Encryption Management
'key_vault' => [
'driver' => env('VUEXY_KEY_VAULT_DRIVER', 'laravel'), // Options: laravel, sqlite, mysql, mariadb, go_service
'enabled' => (bool) env('VUEXY_KEY_VAULT_ENABLED', true),
// Laravel Default Encryption (APP_KEY)
'laravel' => [
'key' => env('APP_KEY'),
'algorithm' => 'AES-256-CBC',
],
// Second DB Configuration (Requires separate connection)
'database' => [
'connection' => env('VUEXY_KEY_VAULT_DB_CONNECTION', 'vault'),
'table' => env('VUEXY_KEY_VAULT_DB_TABLE', 'vault_keys'),
'algorithm' => env('VUEXY_KEY_VAULT_DB_ALGORITHM', 'AES-256-CBC'),
],
// External Go Microservice
'service' => [
'base_url' => env('VUEXY_KEY_VAULT_SERVICE_URL'),
'api_token' => env('VUEXY_KEY_VAULT_SERVICE_TOKEN'),
'timeout' => (int) env('VUEXY_KEY_VAULT_SERVICE_TIMEOUT', 5),
],
],
],
// Cache
'cache' => [
'enabled' => (bool) env('VUEXY_CACHE_ENABLED', true),
'ttl' => (int) env('VUEXY_CACHE_TTL', 20 * 24 * 60),
],
// Avatar
'avatar' => [
'initials' => [
'max_length' => (int) env('VUEXY_AVATAR_INITIALS_MAX_LENGTH', 2),
'disk' => env('VUEXY_AVATAR_INITIALS_DISK', 'public'),
'directory' => env('VUEXY_AVATAR_INITIALS_DIRECTORY', 'initial-avatars'),
'size' => (int) env('VUEXY_AVATAR_INITIALS_SIZE', 512),
'background' => env('VUEXY_AVATAR_INITIALS_BACKGROUND', '#EBF4FF'),
'colors' => json_decode(env('VUEXY_AVATAR_INITIALS_COLORS', json_encode(['#3b82f6', '#808390', '#28c76f', '#ff4c51', '#ff9f43', '#00bad1', '#4b4b4b'])), true),
'font_size_ratio' => (float) env('VUEXY_AVATAR_INITIALS_FONT_SIZE_RATIO', 0.4),
'fallback_text' => env('VUEXY_AVATAR_INITIALS_FALLBACK_TEXT', 'NA'),
'cache' => [
'ttl' => (int) env('VUEXY_AVATAR_INITIALS_CACHE_TTL', 30 * 24 * 60),
],
],
'image' => [
'disk' => env('VUEXY_AVATAR_IMAGE_DISK', 'public'),
'directory' => env('VUEXY_AVATAR_IMAGE_DIRECTORY', 'profile-photos'),
'width' => (int) env('VUEXY_AVATAR_IMAGE_WIDTH', 512),
'height' => (int) env('VUEXY_AVATAR_IMAGE_HEIGHT', 512),
'fit_method' => env('VUEXY_AVATAR_IMAGE_FIT_METHOD', 'cover'),
],
],
// Menú
'menu' => [
'cache' => [
'enabled' => (bool) env('VUEXY_MENU_CACHE_ENABLED', true),
'ttl' => (int) env('VUEXY_MENU_CACHE_TTL', 2 * 24 * 60),
],
'debug' => [
'show_broken_routers' => (bool) env('VUEXY_MENU_DEBUG_SHOW_BROKEN_ROUTES', false),
'show_disallowed_links' => (bool) env('VUEXY_MENU_DEBUG_SHOW_DISALLOWED_LINKS', false),
'show_hidden_items' => (bool) env('VUEXY_MENU_DEBUG_SHOW_HIDDEN_ITEMS', false),
],
],
];

View File

@ -0,0 +1,57 @@
<?php
declare(strict_types=1);
return [
/*
|--------------------------------------------------------------------------
| Vault Client Mode
|--------------------------------------------------------------------------
| Define si este proyecto se comporta como "client", "server", o "both".
| Este valor se puede usar para omitir migraciones o inicializar módulos.
*/
'mode' => env('KONEKO_KEY_VAULT_MODE', 'client'), // client | server | both
/*
|--------------------------------------------------------------------------
| Cliente de Claves - Lectura local o remota
|--------------------------------------------------------------------------
*/
'client' => [
'driver' => env('KONEKO_KEY_VAULT_DRIVER', 'laravel'), // koneko_api | database | laravel
'connection' => env('KONEKO_KEY_VAULT_DB_CONNECTION', 'vault'),
'table' => env('KONEKO_KEY_VAULT_DB_TABLE', 'vault_client_keys'),
'project' => env('KONEKO_PROJECT_CODE', 'erp'),
'namespace' => env('KONEKO_KEY_VAULT_NAMESPACE', 'default'),
'client_id' => env('KONEKO_CLIENT_ID'),
// 🔐 Opción para lectura desde archivo plano en sistema
'key_path' => env('KONEKO_KEY_VAULT_CLIENT_KEY_PATH', '/etc/koneko/vault_value.key'),
],
/*
|--------------------------------------------------------------------------
| Servidor de Claves - Proyectos que gestionan claves de múltiples clientes
|--------------------------------------------------------------------------
*/
'server' => [
'enabled' => env('KONEKO_KEY_VAULT_SERVER_ENABLED', false),
'connection' => env('KONEKO_KEY_VAULT_SERVER_CONNECTION', 'vault'),
'table' => env('KONEKO_KEY_VAULT_SERVER_TABLE', 'vault_client_keys'),
],
/*
|--------------------------------------------------------------------------
| Drivers disponibles (por ejemplo, API externa Koneko)
|--------------------------------------------------------------------------
*/
'drivers' => [
'koneko_api' => [
'base_url' => env('KONEKO_VAULT_API_URL', 'https://vault.koneko.mx/api/v1/keys'),
'api_token' => env('KONEKO_VAULT_API_TOKEN'),
'timeout' => (int) env('KONEKO_VAULT_API_TIMEOUT', 3),
],
],
];

View File

@ -0,0 +1,16 @@
<?php
declare(strict_types=1);
return [
'driver' => 'mysql',
'host' => env('KEYVAULT_DB_HOST', '127.0.0.1'),
'database' => env('KEYVAULT_DB_DATABASE', 'key_vault'),
'username' => env('KEYVAULT_DB_USERNAME', 'vault_user'),
'password' => env('KEYVAULT_DB_PASSWORD', 'secret'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => env('KEYVAULT_DB_PREFIX', ''),
'strict' => true,
'engine' => null,
];

48
config/koneko_layout.php Normal file
View File

@ -0,0 +1,48 @@
<?php
return [
// ================== 🌐 LAYOUT ==================
// Personalización de interfaz
'vuexy' => [
'myLayout' => 'horizontal', // Options[String]: vertical(default), horizontal
'myTheme' => 'theme-semi-dark', // Options[String]: theme-default(default), theme-bordered, theme-semi-dark
'myStyle' => 'light', // Options[String]: light(default), dark & system mode
'myRTLSupport' => false, // options[Boolean]: true(default), false // To provide RTLSupport or not
'myRTLMode' => false, // options[Boolean]: false(default), true // To set layout to RTL layout (myRTLSupport must be true for rtl mode)
'hasCustomizer' => true, // options[Boolean]: true(default), false // Display customizer or not THIS WILL REMOVE INCLUDED JS FILE. SO LOCAL STORAGE WON'T WORK
'displayCustomizer' => true, // options[Boolean]: true(default), false // Display customizer UI or not, THIS WON'T REMOVE INCLUDED JS FILE. SO LOCAL STORAGE WILL WORK
'contentLayout' => 'compact', // options[String]: 'compact', 'wide' (compact=container-xxl, wide=container-fluid)
'navbarType' => 'static', // options[String]: 'sticky', 'static', 'hidden' (Only for vertical Layout)
'footerFixed' => false, // options[Boolean]: false(default), true // Footer Fixed
'menuFixed' => false, // options[Boolean]: true(default), false // Layout(menu) Fixed (Only for vertical Layout)
'menuCollapsed' => true, // options[Boolean]: false(default), true // Show menu collapsed, (Only for vertical Layout)
'headerType' => 'static', // options[String]: 'static', 'fixed' (for horizontal layout only)
'showDropdownOnHover' => false, // true, false (for horizontal layout only)
'authViewMode' => 'cover', // Options[String]: cover(default), basic
'maxQuickLinks' => 12, // options[Integer]: 8(default), 8, 10, 12
'customizerControls' => [
'style',
'headerType',
'contentLayout',
'layoutCollapsed',
'layoutNavbarOptions',
'themes',
], // To show/hide customizer options
],
// 📋 Menú de Navegación
'menu' => [
'debug' => [
'show_broken_routes' => (bool) env('VUEXY_MENU_DEBUG_SHOW_BROKEN_ROUTES', false),
'show_disallowed_links'=> (bool) env('VUEXY_MENU_DEBUG_SHOW_DISALLOWED_LINKS', false),
'show_hidden_items' => (bool) env('VUEXY_MENU_DEBUG_SHOW_HIDDEN_ITEMS', false),
],
'cache' => [
'enabled' => (bool) env('VUEXY_MENU_CACHE_ENABLED', true),
'ttl' => (int) env('VUEXY_MENU_CACHE_TTL', 2 * 24 * 60),
],
],
'cache' => [
'enabled' => (bool) env('VUEXY_CACHE_ENABLED', true),
'ttl' => (int) env('VUEXY_CACHE_TTL', 2 * 24 * 60),
],
];

View File

@ -0,0 +1,59 @@
<?php
return [
// ================== 🔒 SEGURIDAD ==================
// 🔐 HTTPS y Proxies
'https' => [
'force' => (bool) env('FORCE_HTTPS', false),
],
'proxies' => [
'enabled' => (bool) env('TRUST_PROXY', false),
'ips' => env('TRUST_PROXY_IPS', '*'),
],
// 🗝️ Key Vault & Gestión de Claves
'key_vault' => [
// Namespace por defecto y cliente global (si aplica)
'default_namespace' => env('KONEKO_KEY_VAULT_NAMESPACE', 'default'),
'default_project' => env('KONEKO_PROJECT_CODE', 'erp'),
'default_client_id' => env('KONEKO_CLIENT_ID'),
// 🔑 Cliente que accede a claves de un servidor remoto o local
'client' => [
'driver' => env('KONEKO_KEY_VAULT_DRIVER', 'database'), // koneko_api, database, laravel
'connection' => env('KONEKO_KEY_VAULT_DB_CONNECTION', 'vault'),
'table' => env('KONEKO_KEY_VAULT_DB_TABLE', 'vault_client_keys'),
'project' => env('KONEKO_PROJECT_CODE', 'erp'),
'namespace' => env('KONEKO_KEY_VAULT_NAMESPACE', 'default'),
'client_id' => env('KONEKO_CLIENT_ID'),
],
// 🗃️ Conexión y configuración del servidor de claves (solo si actúa como vault)
'server' => [
'connection' => 'vault', // conexión que administra la tabla físicamente
'table' => 'vault_client_keys',
],
'drivers' => [
// Laravel Default Encryption (APP_KEY)
'laravel' => [
'key' => env('APP_KEY'),
'algorithm' => 'AES-256-CBC',
],
// Second DB Configuration (Requires separate connection)
'database' => [
'connection' => env('KONEKO_KEY_VAULT_DB_CONNECTION', 'vault'),
'table' => env('KONEKO_KEY_VAULT_DB_TABLE', 'vault_keys'),
'algorithm' => env('KONEKO_KEY_VAULT_DB_ALGORITHM', 'AES-256-CBC'),
],
// External Go Microservice
'koneko_api' => [
'base_url' => env('KONEKO_KEY_VAULT_SERVICE_URL'),
'api_token' => env('KONEKO_KEY_VAULT_SERVICE_TOKEN'),
'timeout' => (int) env('KONEKO_KEY_VAULT_SERVICE_TIMEOUT', 5),
],
],
],
];

39
config/koneko_ui.php Normal file
View File

@ -0,0 +1,39 @@
<?php
return [
// ================== 👤 UI / AVATAR ==================
'avatar' => [
// 🔠 Avatares por Iniciales
'initials' => [
'max_length' => (int) env('VUEXY_AVATAR_INITIALS_MAX_LENGTH', 2),
'disk' => env('VUEXY_AVATAR_INITIALS_DISK', 'public'),
'directory' => env('VUEXY_AVATAR_INITIALS_DIRECTORY', 'initial-avatars'),
'size' => (int) env('VUEXY_AVATAR_INITIALS_SIZE', 512),
'background' => env('VUEXY_AVATAR_INITIALS_BACKGROUND', '#EBF4FF'),
'colors' => json_decode(env('VUEXY_AVATAR_INITIALS_COLORS', json_encode([
'#3b82f6', '#808390', '#28c76f', '#ff4c51',
'#ff9f43', '#00bad1', '#4b4b4b'
])), true),
'font_size_ratio' => (float) env('VUEXY_AVATAR_INITIALS_FONT_SIZE_RATIO', 0.4),
'fallback_text' => env('VUEXY_AVATAR_INITIALS_FALLBACK_TEXT', 'NA'),
// 🧹 Mantenimiento y Depuración de Avatares
'maintenance' => [
'enabled' => (bool) env('VUEXY_AVATAR_CLEANUP_ENABLED', true),
'ttl_days' => (int) env('VUEXY_AVATAR_CLEANUP_TTL_DAYS', 30), // Días antes de considerar obsoletos los avatares
'cleanup_cron' => env('VUEXY_AVATAR_CLEANUP_CRON', '0 3 * * *'), // Hora de ejecución del Job de limpieza (por defecto a las 3 AM)
'max_batch_size' => (int) env('VUEXY_AVATAR_CLEANUP_MAX_BATCH', 500), // Máximo de archivos a procesar por ejecución
'log_deletions' => (bool) env('VUEXY_AVATAR_CLEANUP_LOG', true), // Registrar o no las eliminaciones
],
],
// 📸 Avatares por Imagen
'image' => [
'disk' => env('VUEXY_AVATAR_IMAGE_DISK', 'public'),
'directory' => env('VUEXY_AVATAR_IMAGE_DIRECTORY', 'profile-photos'),
'width' => (int) env('VUEXY_AVATAR_IMAGE_WIDTH', 512),
'height' => (int) env('VUEXY_AVATAR_IMAGE_HEIGHT', 512),
'fit_method' => env('VUEXY_AVATAR_IMAGE_FIT_METHOD', 'cover'),
],
],
];

View File

@ -481,15 +481,16 @@ return [
],
],
],
'_extra_quicklinks' => [
'Inicio' => [
'icon' => 'ti ti-home',
'route' => 'admin.core.pages.home.index',
'can' => 'admin.core.pages.home.view',
],
'Mi perfil' => [
'icon' => 'ti ti-user-circle',
'route' => 'admin.users.profile',
'_extra' => [
'_quicklinks' => [
'Inicio' => [
'icon' => 'ti ti-home',
'route' => 'admin.core.pages.home.index',
],
'Mi perfil' => [
'icon' => 'ti ti-user-circle',
'route' => 'admin.users.profile',
],
],
],
];