Fix bin/publish: copy docs.dist from project root

Fix bin/publish: use correct .env path for rspade_system
Fix bin/publish script: prevent grep exit code 1 from terminating script

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-10-21 02:08:33 +00:00
commit f6fac6c4bc
79758 changed files with 10547827 additions and 0 deletions

49
config/CLAUDE.md Executable file
View File

@@ -0,0 +1,49 @@
# Config Directory
This CLAUDE.md file contains a brief synopsis of the purpose of this directory, then a list of files in this directory with the file sizes of each file, and a short description and relevant key points of information for every file which is important in this directory. Unimportant files like images or temporary data directories are not listed in this file. When visiting this directory, the AI agent is instructed to do an ls on the directory to get the directory contents and file sizes - and if the file size diverges from the size in CLAUDE.md, that means the file has changed, and the description in CLAUDE.md is not up to date. This doesn't trigger this to be regenerated immediately, but let's say we wanted to know about a specific file by viewing CLAUDE.md and we discovered it was out of date, we would need to reread and update the documentation for that file in the CLAUDE.md at that time before we considered any details about it. CLAUDE.md might also contain other bits of information that is critical to know if you are looking at notes in the directory where the CLAUDE.md file lives.
## Directory Purpose
The Config directory contains Laravel configuration files that define how the application behaves. These files are loaded by the application during bootstrap and provide settings for everything from database connections to session handling. Many of these configuration values can be overridden with environment variables via the .env file.
## File Index
| File | Size | Description |
|------|------|-------------|
| app.php | 7,836 bytes | Core application configuration including application name ('RSpade'), environment settings, debug mode, timezone (UTC), and service providers. Registers all service providers and class aliases used throughout the application. |
| auth.php | 3,665 bytes | Authentication configuration with web guard as default, App\Models\User model, 60-minute password reset timeout, and 3-hour password confirmation window. Defines authentication guards, user providers, and password reset options. |
| broadcasting.php | 2,091 bytes | Event broadcasting configuration supporting Pusher, Ably, Redis, and other drivers. Used for real-time events and notifications. |
| cache.php | 3,272 bytes | Cache system settings with support for file, database, Redis, Memcached, and other cache stores. Configures default cache driver and store options. |
| cors.php | 846 bytes | Cross-Origin Resource Sharing settings for API routes, specifying allowed origins, methods, and headers for cross-domain requests. |
| database.php | 5,289 bytes | Database connection settings for MySQL, PostgreSQL, SQLite, and SQL Server, plus Redis configuration. Defines connection parameters, pool settings, and migration table name. |
| filesystems.php | 2,370 bytes | File storage configuration with local, public, and S3 disk options. Sets up where uploaded files, public assets, and private data are stored. |
| hashing.php | 1,572 bytes | Password hashing settings with bcrypt and Argon2 options, defining algorithm and computational costs for secure password storage. |
| logging.php | 3,749 bytes | Application logging setup with stack, single file, daily, Slack, and other channels. Configures how and where application logs are stored. |
| mail.php | 3,600 bytes | Email service configuration supporting SMTP, Mailgun, SES, and other mail drivers. Defines mail sender information and delivery settings. |
| models.php | 480 bytes | Custom registry of application models used for dynamic model loading and auto-discovery. |
| multi-tenant.php | 2,631 bytes | Custom multi-tenant system configuration with single-user tenant mode option, 48-hour invitation expiry, session key for current site ID ('current_site_id'), and site creation permissions. |
| queue.php | 2,906 bytes | Queue system configuration with sync, database, Redis, SQS, and other queue drivers for asynchronous task processing. |
| rspade.php | 1,223 bytes | RSpade application-specific settings including app name, description, 10 items per page default, todo list limits, and feature toggles for public profiles, sharing, and markdown support. |
| sanctum.php | 2,294 bytes | Laravel Sanctum configuration for API token authentication with token expiration and middleware settings. |
| services.php | 1,314 bytes | Third-party service credentials for Mailgun, Postmark, AWS, and Google reCAPTCHA with site and secret keys. |
| session.php | 7,079 bytes | Session handling configuration with 365-day session lifetime, HTTP-only cookies, and 'lax' same-site policy. Defines session driver, storage, and cookie settings. |
| view.php | 1,053 bytes | View compilation path settings, defining where compiled Blade templates are stored. |
## Implementation Notes
1. **Custom Configuration Files**:
- **models.php**: Application-specific model registry
- **multi-tenant.php**: Multi-tenant functionality configuration
- **rspade.php**: Application-specific settings for the RSpade platform
2. **Configuration Loading**:
- Configuration values are accessed using the `config()` helper
- Environment-specific values can override config files via `.env`
- Configuration is cached in production using `php artisan config:cache`
3. **Key Configuration Patterns**:
- Service providers are registered in app.php
- Third-party API keys are stored in services.php
- Feature toggles are defined in rspade.php
- Most files follow Laravel's standard configuration structure
- Default values are provided for all settings with environment variable fallbacks

124
config/api.php Executable file
View File

@@ -0,0 +1,124 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| API Settings
|--------------------------------------------------------------------------
|
| This file contains settings for the RSpade API system.
|
*/
/*
|--------------------------------------------------------------------------
| API Authentication
|--------------------------------------------------------------------------
|
| Configuration for API authentication.
|
*/
'token_prefix' => 'rspade_',
'token_expiry' => 365, // Default token expiration in days
/*
|--------------------------------------------------------------------------
| API Rate Limiting
|--------------------------------------------------------------------------
|
| Rate limits for API requests.
|
*/
'rate_limit' => [
'enabled' => true,
'max_requests_per_minute' => 60,
'max_requests_per_hour' => 1000,
'max_requests_per_day' => 10000,
],
/*
|--------------------------------------------------------------------------
| API Response Settings
|--------------------------------------------------------------------------
|
| Settings for API responses.
|
*/
'max_results_per_api_call' => env('API_MAX_RESULTS', 100),
'default_results_per_api_call' => 20,
/*
|--------------------------------------------------------------------------
| API Documentation Settings
|--------------------------------------------------------------------------
|
| Settings for the API documentation system.
|
*/
'docs' => [
'title' => 'RSpade API Documentation',
'description' => 'Documentation for the RSpade API system.',
'version' => '1.0.0',
'enable_tester' => true,
'enable_auto_token_generation' => true,
],
/*
|--------------------------------------------------------------------------
| API Token Permissions
|--------------------------------------------------------------------------
|
| Available permission sets for API tokens.
|
*/
'permissions' => [
'read' => [
'description' => 'Read-only access to API endpoints',
'endpoints' => [
'todo-lists.index',
'todo-lists.show',
'todos.index',
'todos.show',
],
],
'write' => [
'description' => 'Read-write access to API endpoints',
'endpoints' => [
'todo-lists.index',
'todo-lists.show',
'todo-lists.store',
'todo-lists.update',
'todo-lists.destroy',
'todos.index',
'todos.show',
'todos.store',
'todos.update',
'todos.destroy',
],
],
'admin' => [
'description' => 'Administrative access to API endpoints',
'endpoints' => [
'todo-lists.index',
'todo-lists.show',
'todo-lists.store',
'todo-lists.update',
'todo-lists.destroy',
'todos.index',
'todos.show',
'todos.store',
'todos.update',
'todos.destroy',
'users.index',
'users.show',
],
],
'root' => [
'description' => 'Root access to API endpoints (all endpoints)',
'endpoints' => [
'*',
],
],
],
];

240
config/app.php Executable file
View File

@@ -0,0 +1,240 @@
<?php
use Illuminate\Support\Facades\Facade;
/*
|--------------------------------------------------------------------------
| RSX Framework Configuration Note
|--------------------------------------------------------------------------
|
| Most RSX framework-specific configuration values and service providers
| are located in config/rsx.php. This file (config/app.php) is primarily
| for Laravel-specific and end-user application configuration.
|
| For RSX framework providers, integrations, and bundle processors,
| see: config/rsx.php
|
*/
return [
/*
|--------------------------------------------------------------------------
| Application Name
|--------------------------------------------------------------------------
|
| This value is the name of your application. This value is used when the
| framework needs to place the application's name in a notification or
| any other location as required by the application or its packages.
|
*/
'name' => env('APP_NAME', 'RSpade'),
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services the application utilizes. Set this in your ".env" file.
|
*/
'env' => env('APP_ENV', 'production'),
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => (bool) env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => env('APP_URL', 'http://localhost'),
'asset_url' => env('ASSET_URL'),
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'UTC',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
'faker_locale' => 'en_US',
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
/*
|--------------------------------------------------------------------------
| Maintenance Mode Driver
|--------------------------------------------------------------------------
|
| These configuration options determine the driver used to determine and
| manage Laravel's "maintenance mode" status. The "cache" driver will
| allow maintenance mode to be controlled across multiple machines.
|
| Supported drivers: "file", "cache"
|
*/
'maintenance' => [
'driver' => 'file',
// 'store' => 'redis',
],
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
// Illuminate\Session\SessionServiceProvider::class, // Disabled for custom session handler
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Package Service Providers...
*/
/*
* Application Service Providers...
*/
App\RSpade\Core\Providers\Rsx_Restricted_Routing_Provider::class, // Must be before RouteServiceProvider
App\Providers\AppServiceProvider::class,
// App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
// App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\RSpade\Core\Providers\Rsx_Framework_Provider::class,
App\RSpade\Core\Providers\Rsx_Bundle_Provider::class,
App\RSpade\Core\Providers\Rsx_Migration_Notice_Provider::class,
App\RSpade\Integrations\Jqhtml\JqhtmlServiceProvider::class,
// App\Providers\RecaptchaServiceProvider::class,
// App\Providers\GeocodingServiceProvider::class,
// App\Providers\EmailServiceProvider::class,
// App\Providers\BuildServiceProvider::class,
],
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
'aliases' => Facade::defaultAliases()->merge([
// 'ExampleClass' => App\Example\ExampleClass::class,
])->except(['Session'])->merge([
'Session' => App\RSpade\Core\Session\Session::class,
])->toArray(),
];

111
config/auth.php Executable file
View File

@@ -0,0 +1,111 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "session"
|
*/
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => Rsx\Models\User_Model::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| You may specify multiple password reset configurations if you have more
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire 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.
|
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
/*
|--------------------------------------------------------------------------
| Password Confirmation Timeout
|--------------------------------------------------------------------------
|
| Here you may define the amount of seconds before a password confirmation
| times out and the user is prompted to re-enter their password via the
| confirmation screen. By default, the timeout lasts for three hours.
|
*/
'password_timeout' => 10800,
];

227
config/authentication.php Executable file
View File

@@ -0,0 +1,227 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Verification Methods
|--------------------------------------------------------------------------
|
| This file configures the various authentication verification methods
| used throughout the application. These options determine how users
| verify their identity in different contexts.
|
*/
/*
|--------------------------------------------------------------------------
| Two-Factor Authentication
|--------------------------------------------------------------------------
|
| Configure two-factor authentication (2FA) settings for the application.
| This includes SMS verification, email verification, and related options.
|
*/
'two_factor' => [
/*
|--------------------------------------------------------------------------
| Enable Two-Factor Authentication
|--------------------------------------------------------------------------
|
| When set to true, two-factor authentication features will be active.
| When disabled, all 2FA features are bypassed.
|
*/
'enabled' => env('TWO_FACTOR_ENABLED', false),
/*
|--------------------------------------------------------------------------
| Unrecognized Browser Verification Method
|--------------------------------------------------------------------------
|
| Method to use when verifying logins from unrecognized browsers.
| Options: 'sms', 'email', 'sms_email_fallback', 'none'
|
| - 'sms': Use SMS verification only
| - 'email': Use email verification only
| - 'sms_email_fallback': Try SMS first, fall back to email if SMS not available
| - 'none': No verification required
|
*/
'unrecognized_browser_method' => env('TWO_FACTOR_BROWSER_METHOD', 'none'),
/*
|--------------------------------------------------------------------------
| New Account Verification Method
|--------------------------------------------------------------------------
|
| Method to use when verifying new account registrations.
| Options: 'sms', 'email', 'sms_email_fallback', 'none'
|
*/
'new_account_method' => env('TWO_FACTOR_ACCOUNT_METHOD', 'email'),
/*
|--------------------------------------------------------------------------
| Password Reset Verification Method
|--------------------------------------------------------------------------
|
| Method to use when verifying password reset requests.
| Options: 'sms', 'email', 'sms_email_fallback', 'none'
|
*/
'password_reset_method' => env('TWO_FACTOR_RESET_METHOD', 'email'),
/*
|--------------------------------------------------------------------------
| SMS Authentication Settings
|--------------------------------------------------------------------------
|
*/
'sms' => [
// Allow SMS authentication (separate from verification)
'allow_sms_login' => env('SMS_LOGIN_ENABLED', false),
// Code validity in minutes
'code_lifetime' => env('SMS_CODE_LIFETIME', 10),
// Code length (number of digits)
'code_length' => 6,
// Resend timeout in seconds (e.g., 30 minutes = 1800 seconds)
'resend_timeout' => env('SMS_RESEND_TIMEOUT', 1800),
// Format of SMS message
'message_format' => 'Your verification code is: {code}',
],
/*
|--------------------------------------------------------------------------
| Trusted Device Settings
|--------------------------------------------------------------------------
|
*/
'trusted_devices' => [
// How long a device is trusted before requiring re-verification (in days)
'lifetime' => env('TRUSTED_DEVICE_LIFETIME', 30),
// Cookie name for the trusted device
'cookie_name' => 'trusted_device',
// How many devices can be trusted per user (0 for unlimited)
'max_devices' => env('MAX_TRUSTED_DEVICES', 5),
],
/*
|--------------------------------------------------------------------------
| Email Verification Settings
|--------------------------------------------------------------------------
|
*/
'email' => [
// How long a verification link is valid (in minutes)
'verification_lifetime' => env('EMAIL_VERIFICATION_LIFETIME', 1440), // 24 hours
// How long an invitation link is valid (in days)
'invitation_lifetime' => env('EMAIL_INVITATION_LIFETIME', 7),
],
],
/*
|--------------------------------------------------------------------------
| Single Sign-On (SSO) Configuration
|--------------------------------------------------------------------------
|
| Configure third-party authentication providers like Google, Microsoft,
| and Facebook for single sign-on capabilities.
|
*/
'sso' => [
/*
|--------------------------------------------------------------------------
| Enable SSO
|--------------------------------------------------------------------------
|
| Master switch to enable/disable all SSO functionality
|
*/
'enabled' => env('SSO_ENABLED', false),
/*
|--------------------------------------------------------------------------
| Providers Configuration
|--------------------------------------------------------------------------
|
| Configure each SSO provider individually
|
*/
'providers' => [
'google' => [
'enabled' => env('SSO_GOOGLE_ENABLED', false),
'client_id' => env('SSO_GOOGLE_CLIENT_ID'),
'client_secret' => env('SSO_GOOGLE_CLIENT_SECRET'),
'redirect' => env('APP_URL') . '/auth/google/callback',
'label' => 'Google',
'icon' => 'fab fa-google',
// Get credentials from: https://console.developers.google.com/
],
'microsoft' => [
'enabled' => env('SSO_MICROSOFT_ENABLED', false),
'client_id' => env('SSO_MICROSOFT_CLIENT_ID'),
'client_secret' => env('SSO_MICROSOFT_CLIENT_SECRET'),
'tenant' => env('SSO_MICROSOFT_TENANT', 'common'),
'redirect' => env('APP_URL') . '/auth/microsoft/callback',
'label' => 'Microsoft',
'icon' => 'fab fa-microsoft',
// Get credentials from: https://portal.azure.com/ under App Registrations
],
'facebook' => [
'enabled' => env('SSO_FACEBOOK_ENABLED', false),
'client_id' => env('SSO_FACEBOOK_CLIENT_ID'),
'client_secret' => env('SSO_FACEBOOK_CLIENT_SECRET'),
'redirect' => env('APP_URL') . '/auth/facebook/callback',
'label' => 'Facebook',
'icon' => 'fab fa-facebook',
// Get credentials from: https://developers.facebook.com/apps/
],
],
/*
|--------------------------------------------------------------------------
| SSO Link Options
|--------------------------------------------------------------------------
|
| Configure behavior for linking SSO accounts to existing user accounts
|
*/
'account_linking' => [
// If true, users can link multiple SSO providers to one account
'allow_multiple_providers' => true,
// If true, users must verify email before linking an SSO account
'require_email_verification' => true,
// If true and email matches, automatically link to existing account
'auto_link_by_email' => true,
],
],
/*
|--------------------------------------------------------------------------
| Pending Registration Configuration
|--------------------------------------------------------------------------
|
| Configure settings for pending registrations that require verification
|
*/
'pending_registrations' => [
// How long a pending registration is stored before expiring (in hours)
'expiration_hours' => env('PENDING_REGISTRATION_EXPIRATION', 24),
// Whether to allow re-registration with the same email before verification
'allow_reregistration' => true,
],
];

70
config/broadcasting.php Executable file
View File

@@ -0,0 +1,70 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "pusher", "ably", "redis", "log", "null"
|
*/
'default' => env('BROADCAST_DRIVER', 'null'),
/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over websockets. Samples of
| each available type of connection are provided inside this array.
|
*/
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com',
'port' => env('PUSHER_PORT', 443),
'scheme' => env('PUSHER_SCHEME', 'https'),
'encrypted' => true,
'useTLS' => env('PUSHER_SCHEME', 'https') === 'https',
],
'client_options' => [
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
],
],
'ably' => [
'driver' => 'ably',
'key' => env('ABLY_KEY'),
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];

110
config/cache.php Executable file
View File

@@ -0,0 +1,110 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Cache Store
|--------------------------------------------------------------------------
|
| This option controls the default cache connection that gets used while
| using this caching library. This connection is used when another is
| not explicitly specified when executing a given caching function.
|
*/
'default' => env('CACHE_DRIVER', 'file'),
/*
|--------------------------------------------------------------------------
| Cache Stores
|--------------------------------------------------------------------------
|
| Here you may define all of the cache "stores" for your application as
| well as their drivers. You may even define multiple stores for the
| same cache driver to group types of items stored in your caches.
|
| Supported drivers: "apc", "array", "database", "file",
| "memcached", "redis", "dynamodb", "octane", "null"
|
*/
'stores' => [
'apc' => [
'driver' => 'apc',
],
'array' => [
'driver' => 'array',
'serialize' => false,
],
'database' => [
'driver' => 'database',
'table' => 'cache',
'connection' => null,
'lock_connection' => null,
],
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'memcached' => [
'driver' => 'memcached',
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
'sasl' => [
env('MEMCACHED_USERNAME'),
env('MEMCACHED_PASSWORD'),
],
'options' => [
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
'lock_connection' => 'default',
],
'dynamodb' => [
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
'endpoint' => env('DYNAMODB_ENDPOINT'),
],
'octane' => [
'driver' => 'octane',
],
],
/*
|--------------------------------------------------------------------------
| Cache Key Prefix
|--------------------------------------------------------------------------
|
| When utilizing the APC, database, memcached, Redis, or DynamoDB cache
| stores there might be other applications using the same cache. For
| that reason, you may prefix every cache key to avoid collisions.
|
*/
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
];

83
config/cms.php Executable file
View File

@@ -0,0 +1,83 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| CMS Configuration
|--------------------------------------------------------------------------
|
| This file contains the configuration options for the CMS features.
|
*/
/*
|--------------------------------------------------------------------------
| Feature Accessibility Settings
|--------------------------------------------------------------------------
|
| These settings control which user roles can access CMS features.
| Options:
| - 'disabled': Feature is completely disabled
| - 'root_only': Only root users can access the feature
| - 'admin_or_root': Site administrators and root users can access the feature
|
*/
'feature_access' => [
'static_blocks' => env('CMS_STATIC_BLOCKS_ACCESS', 'root_only'),
'blog' => env('CMS_BLOG_ACCESS', 'admin_or_root'),
'pages' => env('CMS_PAGES_ACCESS', 'root_only'),
],
/*
|--------------------------------------------------------------------------
| Content Settings
|--------------------------------------------------------------------------
|
| Configuration options for CMS content management.
|
*/
'content' => [
// Maximum length for blog post content
'max_blog_content_length' => 100000,
// Maximum length for page content
'max_page_content_length' => 100000,
// Default options for new blog posts
'default_blog_options' => [
'allow_comments' => true,
'show_author' => true,
],
// Available blog categories
'blog_categories' => [
'news' => 'News',
'updates' => 'Updates',
'tutorials' => 'Tutorials',
'events' => 'Events',
'announcements' => 'Announcements',
],
],
/*
|--------------------------------------------------------------------------
| Layout Settings
|--------------------------------------------------------------------------
|
| Configuration for how CMS content is displayed in the layout.
|
*/
'layout' => [
// Number of blog posts to show per page
'blog_posts_per_page' => 10,
// Number of featured posts to show on home page
'featured_posts_count' => 3,
// Show blog post dates
'show_blog_dates' => true,
// Show blog post author
'show_blog_author' => true,
],
];

34
config/cors.php Executable file
View File

@@ -0,0 +1,34 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Cross-Origin Resource Sharing (CORS) Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your settings for cross-origin resource sharing
| or "CORS". This determines what cross-origin operations may execute
| in web browsers. You are free to adjust these settings as needed.
|
| To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
|
*/
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];

151
config/database.php Executable file
View File

@@ -0,0 +1,151 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/
'default' => env('DB_CONNECTION', 'mysql'),
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'search_path' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
// 'encrypt' => env('DB_ENCRYPT', 'yes'),
// 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
],
],
/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/
'migrations' => 'migrations',
/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
];

175
config/document_conversion.php Executable file
View File

@@ -0,0 +1,175 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Document Conversion Configuration
|--------------------------------------------------------------------------
|
| This file contains the configuration for document conversion services.
| It controls which types of conversions are enabled and how they are
| executed.
|
*/
/*
|--------------------------------------------------------------------------
| Enable Document Conversion
|--------------------------------------------------------------------------
|
| Master switch to enable/disable all document conversion functionality.
| When disabled, all conversion attempts will be skipped.
|
*/
'enabled' => env('DOCUMENT_CONVERSION_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Conversion Types
|--------------------------------------------------------------------------
|
| Configure which types of conversions are enabled. Each conversion type
| can be individually enabled or disabled.
|
*/
'conversions' => [
// PDF to thumbnail conversion
'pdf_thumbnail' => [
'enabled' => env('PDF_THUMBNAIL_ENABLED', true),
'method' => env('PDF_THUMBNAIL_METHOD', 'imagick'), // 'imagick', 'ghostscript', 'remote'
'resolution' => env('PDF_THUMBNAIL_RESOLUTION', 300),
],
// Office documents to thumbnail conversion
'office_thumbnail' => [
'enabled' => env('OFFICE_THUMBNAIL_ENABLED', true),
'method' => env('OFFICE_THUMBNAIL_METHOD', 'libreoffice'), // 'libreoffice', 'remote'
],
// Spreadsheet to CSV conversion
'spreadsheet_to_csv' => [
'enabled' => env('SPREADSHEET_TO_CSV_ENABLED', true),
'method' => env('SPREADSHEET_TO_CSV_METHOD', 'libreoffice'), // 'libreoffice', 'remote'
],
// Document to text extraction for fulltext search
'text_extraction' => [
'enabled' => env('TEXT_EXTRACTION_ENABLED', true),
'store_extracted_text' => env('STORE_EXTRACTED_TEXT', true),
'method' => env('TEXT_EXTRACTION_METHOD', 'local'), // 'local', 'tika', 'remote'
],
],
/*
|--------------------------------------------------------------------------
| Supported File Types
|--------------------------------------------------------------------------
|
| Define which file extensions are supported for each conversion type.
|
*/
'supported_extensions' => [
'pdf_thumbnail' => ['pdf'],
'office_thumbnail' => [
'doc', 'docx', 'odt', 'rtf', 'txt',
'ppt', 'pptx', 'odp',
'xls', 'xlsx', 'ods',
],
'spreadsheet_to_csv' => [
'xls', 'xlsx', 'ods', 'csv'
],
'text_extraction' => [
'pdf', 'doc', 'docx', 'odt', 'rtf', 'txt',
'ppt', 'pptx', 'odp',
'xls', 'xlsx', 'ods', 'csv',
'html', 'htm', 'xml',
],
],
/*
|--------------------------------------------------------------------------
| External Service Configuration
|--------------------------------------------------------------------------
|
| Configuration for external document conversion services.
|
*/
'services' => [
// LibreOffice configuration
'libreoffice' => [
'binary_path' => env('LIBREOFFICE_PATH', '/usr/bin/soffice'),
'timeout' => env('LIBREOFFICE_TIMEOUT', 60), // in seconds
],
// Ghostscript configuration
'ghostscript' => [
'binary_path' => env('GHOSTSCRIPT_PATH', '/usr/bin/gs'),
'timeout' => env('GHOSTSCRIPT_TIMEOUT', 60), // in seconds
],
// Apache Tika configuration for text extraction
'tika' => [
'jar_path' => env('TIKA_PATH', '/usr/local/bin/tika-app.jar'),
'timeout' => env('TIKA_TIMEOUT', 60), // in seconds
],
// Remote conversion service (API)
'remote' => [
'api_url' => env('DOCUMENT_CONVERSION_API_URL'),
'api_key' => env('DOCUMENT_CONVERSION_API_KEY'),
'timeout' => env('DOCUMENT_CONVERSION_API_TIMEOUT', 30), // in seconds
],
// Docker service for isolated conversion
'docker' => [
'enabled' => env('DOCKER_CONVERSION_ENABLED', false),
'image' => env('DOCKER_CONVERSION_IMAGE', 'libreoffice/online:latest'),
'timeout' => env('DOCKER_CONVERSION_TIMEOUT', 120), // in seconds
],
],
/*
|--------------------------------------------------------------------------
| Temporary Files
|--------------------------------------------------------------------------
|
| Configuration for temporary files used during conversion.
|
*/
'temp_directory' => env('DOCUMENT_CONVERSION_TEMP_DIR', storage_path('app/temp')),
'cleanup_temp_files' => env('DOCUMENT_CONVERSION_CLEANUP_TEMP', true),
/*
|--------------------------------------------------------------------------
| Queue Configuration
|--------------------------------------------------------------------------
|
| Configuration for document conversion queuing system.
|
*/
'queue' => [
'enabled' => env('DOCUMENT_CONVERSION_QUEUE_ENABLED', true),
'queue_name' => env('DOCUMENT_CONVERSION_QUEUE', 'document-conversion'),
'connection' => env('DOCUMENT_CONVERSION_QUEUE_CONNECTION', 'sync'),
'retry_after' => env('DOCUMENT_CONVERSION_RETRY_AFTER', 60), // in seconds
'max_tries' => env('DOCUMENT_CONVERSION_MAX_TRIES', 3),
],
/*
|--------------------------------------------------------------------------
| Content Storage
|--------------------------------------------------------------------------
|
| Configuration for storing extracted content.
|
*/
'content_storage' => [
'disk' => env('DOCUMENT_CONTENT_DISK', 'local'),
'directory' => env('DOCUMENT_CONTENT_DIRECTORY', 'document-content'),
'suffix' => env('DOCUMENT_CONTENT_SUFFIX', '.content.txt'),
],
];

76
config/filesystems.php Executable file
View File

@@ -0,0 +1,76 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
| by the framework. The "local" disk, as well as a variety of cloud
| based disks are available to your application. Just store away!
|
*/
'default' => env('FILESYSTEM_DISK', 'local'),
/*
|--------------------------------------------------------------------------
| Filesystem Disks
|--------------------------------------------------------------------------
|
| Here you may configure as many filesystem "disks" as you wish, and you
| may even configure multiple disks of the same driver. Defaults have
| been set up for each driver as an example of the required values.
|
| Supported Drivers: "local", "ftp", "sftp", "s3"
|
*/
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'throw' => false,
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'throw' => false,
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'throw' => false,
],
],
/*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/
'links' => [
public_path('storage') => storage_path('app/public'),
],
];

131
config/geocoding.php Executable file
View File

@@ -0,0 +1,131 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Geocoding Configuration
|--------------------------------------------------------------------------
|
| This file contains the configuration for the geocoding system, which
| handles geocoding of mailing addresses and geolocation of IP addresses.
|
*/
/*
|--------------------------------------------------------------------------
| Mailing Address Geocoding
|--------------------------------------------------------------------------
|
| Configuration for geocoding physical mailing addresses
|
*/
'mailing_address' => [
// Which geocoding service to use
'service' => env('GEOCODE_ADDRESS_SERVICE', 'google_maps'),
// Available services and their configurations
'services' => [
'google_maps' => [
'api_key' => env('GOOGLE_MAPS_API_KEY'),
'region' => env('GOOGLE_MAPS_REGION', 'us'),
'language' => env('GOOGLE_MAPS_LANGUAGE', 'en'),
],
'mapbox' => [
'api_key' => env('MAPBOX_API_KEY'),
],
'here' => [
'api_key' => env('HERE_API_KEY'),
],
'opencage' => [
'api_key' => env('OPENCAGE_API_KEY'),
],
'locationiq' => [
'api_key' => env('LOCATIONIQ_API_KEY'),
],
],
// Maximum number of lookup attempts
'max_attempts' => 3,
// Retry delay in hours between lookup attempts
'retry_delay' => 1,
// Quota configuration
'quota' => [
// Maximum requests per day
'daily_limit' => env('GEOCODE_ADDRESS_DAILY_LIMIT', 2500),
// Lookback period for quota calculation in hours
'lookback_period' => env('GEOCODE_ADDRESS_LOOKBACK_PERIOD', 26),
],
],
/*
|--------------------------------------------------------------------------
| IP Address Geolocation
|--------------------------------------------------------------------------
|
| Configuration for geolocating IP addresses
|
*/
'ip_address' => [
// Which geolocation service to use
'service' => env('GEOCODE_IP_SERVICE', 'ipstack'),
// Available services and their configurations
'services' => [
'ipstack' => [
'api_key' => env('IPSTACK_API_KEY'),
],
'ipinfo' => [
'api_key' => env('IPINFO_API_KEY'),
],
'maxmind' => [
'account_id' => env('MAXMIND_ACCOUNT_ID'),
'license_key' => env('MAXMIND_LICENSE_KEY'),
'database_path' => storage_path('app/maxmind/GeoLite2-City.mmdb'),
'update_database' => env('MAXMIND_UPDATE_DATABASE', true),
],
'ip2location' => [
'api_key' => env('IP2LOCATION_API_KEY'),
],
],
// Maximum number of lookup attempts
'max_attempts' => 3,
// Retry delay in hours between lookup attempts
'retry_delay' => 1,
// Quota configuration
'quota' => [
// Maximum requests per day
'daily_limit' => env('GEOCODE_IP_DAILY_LIMIT', 1000),
// Lookback period for quota calculation in hours
'lookback_period' => env('GEOCODE_IP_LOOKBACK_PERIOD', 26),
],
],
/*
|--------------------------------------------------------------------------
| Geocoding Scheduling
|--------------------------------------------------------------------------
|
| Configuration for the automatic geocoding process
|
*/
'scheduling' => [
// Whether to enable automatic geocoding
'enabled' => env('GEOCODING_SCHEDULING_ENABLED', true),
// How often to check for new geocoding tasks (in minutes)
'check_interval' => env('GEOCODING_CHECK_INTERVAL', 10),
// How many addresses to process in a single run
'batch_size' => [
'mailing_address' => env('GEOCODING_BATCH_SIZE_ADDRESS', 1),
'ip_address' => env('GEOCODING_BATCH_SIZE_IP', 1),
],
],
];

52
config/hashing.php Executable file
View File

@@ -0,0 +1,52 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Hash Driver
|--------------------------------------------------------------------------
|
| This option controls the default hash driver that will be used to hash
| passwords for your application. By default, the bcrypt algorithm is
| used; however, you remain free to modify this option if you wish.
|
| Supported: "bcrypt", "argon", "argon2id"
|
*/
'driver' => 'bcrypt',
/*
|--------------------------------------------------------------------------
| Bcrypt Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Bcrypt algorithm. This will allow you
| to control the amount of time it takes to hash the given password.
|
*/
'bcrypt' => [
'rounds' => env('BCRYPT_ROUNDS', 10),
],
/*
|--------------------------------------------------------------------------
| Argon Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Argon algorithm. These will allow you
| to control the amount of time it takes to hash the given password.
|
*/
'argon' => [
'memory' => 65536,
'threads' => 1,
'time' => 4,
],
];

317
config/ide-helper.php Executable file
View File

@@ -0,0 +1,317 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Filename
|--------------------------------------------------------------------------
|
| The default filename.
|
*/
'filename' => '_ide_helper.php',
/*
|--------------------------------------------------------------------------
| Models filename
|--------------------------------------------------------------------------
|
| The default filename for the models helper file.
|
*/
'models_filename' => '_ide_helper_models.php',
/*
|--------------------------------------------------------------------------
| PhpStorm meta filename
|--------------------------------------------------------------------------
|
| PhpStorm also supports the directory `.phpstorm.meta.php/` with arbitrary
| files in it, should you need additional files for your project; e.g.
| `.phpstorm.meta.php/laravel_ide_Helper.php'.
|
*/
'meta_filename' => '.phpstorm.meta.php',
/*
|--------------------------------------------------------------------------
| Fluent helpers
|--------------------------------------------------------------------------
|
| Set to true to generate commonly used Fluent methods.
|
*/
'include_fluent' => false,
/*
|--------------------------------------------------------------------------
| Factory builders
|--------------------------------------------------------------------------
|
| Set to true to generate factory generators for better factory()
| method auto-completion.
|
| Deprecated for Laravel 8 or latest.
|
*/
'include_factory_builders' => false,
/*
|--------------------------------------------------------------------------
| Write model magic methods
|--------------------------------------------------------------------------
|
| Set to false to disable write magic methods of model.
|
*/
'write_model_magic_where' => true,
/*
|--------------------------------------------------------------------------
| Write model external Eloquent builder methods
|--------------------------------------------------------------------------
|
| Set to false to disable write external Eloquent builder methods.
|
*/
'write_model_external_builder_methods' => true,
/*
|--------------------------------------------------------------------------
| Write model relation count properties
|--------------------------------------------------------------------------
|
| Set to false to disable writing of relation count properties to model DocBlocks.
|
*/
'write_model_relation_count_properties' => true,
/*
|--------------------------------------------------------------------------
| Write Eloquent model mixins
|--------------------------------------------------------------------------
|
| This will add the necessary DocBlock mixins to the model class
| contained in the Laravel framework. This helps the IDE with
| auto-completion.
|
| Please be aware that this setting changes a file within the /vendor directory.
|
*/
'write_eloquent_model_mixins' => false,
/*
|--------------------------------------------------------------------------
| Helper files to include
|--------------------------------------------------------------------------
|
| Include helper files. By default not included, but can be toggled with the
| -- helpers (-H) option. Extra helper files can be included.
|
*/
'include_helpers' => true,
'helper_files' => [
base_path() . '/vendor/laravel/framework/src/Illuminate/Support/helpers.php',
base_path() . '/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php',
base_path() . '/app/helpers.php',
base_path() . '/app/RSpade/helpers.php',
],
/*
|--------------------------------------------------------------------------
| Model locations to include
|--------------------------------------------------------------------------
|
| Define in which directories the ide-helper:models command should look
| for models.
|
| glob patterns are supported to easier reach models in sub-directories,
| e.g. `app/Services/* /Models` (without the space).
|
*/
'model_locations' => [
'app',
],
/*
|--------------------------------------------------------------------------
| Models to ignore
|--------------------------------------------------------------------------
|
| Define which models should be ignored.
|
*/
'ignored_models' => [
// App\MyModel::class,
],
/*
|--------------------------------------------------------------------------
| Models hooks
|--------------------------------------------------------------------------
|
| Define which hook classes you want to run for models to add custom information.
|
| Hooks should implement Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface.
|
*/
'model_hooks' => [
// App\Support\IdeHelper\MyModelHook::class
],
/*
|--------------------------------------------------------------------------
| Extra classes
|--------------------------------------------------------------------------
|
| These implementations are not really extended, but called with magic functions.
|
*/
'extra' => [
'Eloquent' => ['Illuminate\Database\Eloquent\Builder', 'Illuminate\Database\Query\Builder'],
'Session' => ['Illuminate\Session\Store'],
],
'magic' => [],
/*
|--------------------------------------------------------------------------
| Interface implementations
|--------------------------------------------------------------------------
|
| These interfaces will be replaced with the implementing class. Some interfaces
| are detected by the helpers, others can be listed below.
|
*/
'interfaces' => [
// App\MyInterface::class => App\MyImplementation::class,
],
/*
|--------------------------------------------------------------------------
| Support for camel cased models
|--------------------------------------------------------------------------
|
| There are some Laravel packages (such as Eloquence) that allow for accessing
| Eloquent model properties via camel case, instead of snake case.
|
| Enabling this option will support these packages by saving all model
| properties as camel case, instead of snake case.
|
| For example, normally you would see this:
|
| * @property \Illuminate\Support\Carbon $created_at
| * @property \Illuminate\Support\Carbon $updated_at
|
| With this enabled, the properties will be this:
|
| * @property \Illuminate\Support\Carbon $createdAt
| * @property \Illuminate\Support\Carbon $updatedAt
|
| Note, it is currently an all-or-nothing option.
|
*/
'model_camel_case_properties' => false,
/*
|--------------------------------------------------------------------------
| Property casts
|--------------------------------------------------------------------------
|
| Cast the given "real type" to the given "type".
|
*/
'type_overrides' => [
'integer' => 'int',
'boolean' => 'bool',
],
/*
|--------------------------------------------------------------------------
| Include DocBlocks from classes
|--------------------------------------------------------------------------
|
| Include DocBlocks from classes to allow additional code inspection for
| magic methods and properties.
|
*/
'include_class_docblocks' => false,
/*
|--------------------------------------------------------------------------
| Force FQN usage
|--------------------------------------------------------------------------
|
| Use the fully qualified (class) name in DocBlocks,
| even if the class exists in the same namespace
| or there is an import (use className) of the class.
|
*/
'force_fqn' => false,
/*
|--------------------------------------------------------------------------
| Use generics syntax
|--------------------------------------------------------------------------
|
| Use generics syntax within DocBlocks,
| e.g. `Collection<User>` instead of `Collection|User[]`.
|
*/
'use_generics_annotations' => true,
/*
|--------------------------------------------------------------------------
| Additional relation types
|--------------------------------------------------------------------------
|
| Sometimes it's needed to create custom relation types. The key of the array
| is the relationship method name. The value of the array is the fully-qualified
| class name of the relationship, e.g. `'relationName' => RelationShipClass::class`.
|
*/
'additional_relation_types' => [],
/*
|--------------------------------------------------------------------------
| Additional relation return types
|--------------------------------------------------------------------------
|
| When using custom relation types its possible for the class name to not contain
| the proper return type of the relation. The key of the array is the relationship
| method name. The value of the array is the return type of the relation ('many'
| or 'morphTo').
| e.g. `'relationName' => 'many'`.
|
*/
'additional_relation_return_types' => [],
/*
|--------------------------------------------------------------------------
| Run artisan commands after migrations to generate model helpers
|--------------------------------------------------------------------------
|
| The specified commands should run after migrations are finished running.
|
*/
'post_migrate' => [
// 'ide-helper:models --nowrite',
],
];

285
config/ignition.php Executable file
View File

@@ -0,0 +1,285 @@
<?php
use Spatie\Ignition\Solutions\SolutionProviders\BadMethodCallSolutionProvider;
use Spatie\Ignition\Solutions\SolutionProviders\MergeConflictSolutionProvider;
use Spatie\Ignition\Solutions\SolutionProviders\UndefinedPropertySolutionProvider;
use Spatie\LaravelIgnition\Recorders\DumpRecorder\DumpRecorder;
use Spatie\LaravelIgnition\Recorders\JobRecorder\JobRecorder;
use Spatie\LaravelIgnition\Recorders\LogRecorder\LogRecorder;
use Spatie\LaravelIgnition\Recorders\QueryRecorder\QueryRecorder;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\DefaultDbNameSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\GenericLaravelExceptionSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\IncorrectValetDbCredentialsSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\InvalidRouteActionSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingAppKeySolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingColumnSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingImportSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingLivewireComponentSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingMixManifestSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingViteManifestSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\RunningLaravelDuskInProductionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\TableNotFoundSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\UndefinedViewVariableSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\UnknownValidationSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\ViewNotFoundSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\OpenAiSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\SailNetworkSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\UnknownMariadbCollationSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\UnknownMysql8CollationSolutionProvider;
return [
/*
|--------------------------------------------------------------------------
| Editor
|--------------------------------------------------------------------------
|
| Choose your preferred editor to use when clicking any edit button.
|
| Supported: "phpstorm", "vscode", "vscode-insiders", "textmate", "emacs",
| "sublime", "atom", "nova", "macvim", "idea", "netbeans",
| "xdebug", "phpstorm-remote"
|
*/
'editor' => env('IGNITION_EDITOR', 'phpstorm'),
/*
|--------------------------------------------------------------------------
| Theme
|--------------------------------------------------------------------------
|
| Here you may specify which theme Ignition should use.
|
| Supported: "light", "dark", "auto"
|
*/
'theme' => env('IGNITION_THEME', 'auto'),
/*
|--------------------------------------------------------------------------
| Sharing
|--------------------------------------------------------------------------
|
| You can share local errors with colleagues or others around the world.
| Sharing is completely free and doesn't require an account on Flare.
|
| If necessary, you can completely disable sharing below.
|
*/
'enable_share_button' => env('IGNITION_SHARING_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Register Ignition commands
|--------------------------------------------------------------------------
|
| Ignition comes with an additional make command that lets you create
| new solution classes more easily. To keep your default Laravel
| installation clean, this command is not registered by default.
|
| You can enable the command registration below.
|
*/
'register_commands' => env('REGISTER_IGNITION_COMMANDS', false),
/*
|--------------------------------------------------------------------------
| Solution Providers
|--------------------------------------------------------------------------
|
| List of solution providers that should be loaded. You may specify additional
| providers as fully qualified class names.
|
*/
'solution_providers' => [
// from spatie/ignition
BadMethodCallSolutionProvider::class,
MergeConflictSolutionProvider::class,
UndefinedPropertySolutionProvider::class,
// from spatie/laravel-ignition
IncorrectValetDbCredentialsSolutionProvider::class,
MissingAppKeySolutionProvider::class,
DefaultDbNameSolutionProvider::class,
TableNotFoundSolutionProvider::class,
MissingImportSolutionProvider::class,
InvalidRouteActionSolutionProvider::class,
ViewNotFoundSolutionProvider::class,
RunningLaravelDuskInProductionProvider::class,
MissingColumnSolutionProvider::class,
UnknownValidationSolutionProvider::class,
MissingMixManifestSolutionProvider::class,
MissingViteManifestSolutionProvider::class,
MissingLivewireComponentSolutionProvider::class,
UndefinedViewVariableSolutionProvider::class,
GenericLaravelExceptionSolutionProvider::class,
OpenAiSolutionProvider::class,
SailNetworkSolutionProvider::class,
UnknownMysql8CollationSolutionProvider::class,
UnknownMariadbCollationSolutionProvider::class,
],
/*
|--------------------------------------------------------------------------
| Ignored Solution Providers
|--------------------------------------------------------------------------
|
| You may specify a list of solution providers (as fully qualified class
| names) that shouldn't be loaded. Ignition will ignore these classes
| and possible solutions provided by them will never be displayed.
|
*/
'ignored_solution_providers' => [
],
/*
|--------------------------------------------------------------------------
| Runnable Solutions
|--------------------------------------------------------------------------
|
| Some solutions that Ignition displays are runnable and can perform
| various tasks. By default, runnable solutions are only enabled when your
| app has debug mode enabled and the environment is `local` or
| `development`.
|
| Using the `IGNITION_ENABLE_RUNNABLE_SOLUTIONS` environment variable, you
| can override this behaviour and enable or disable runnable solutions
| regardless of the application's environment.
|
| Default: env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS')
|
*/
'enable_runnable_solutions' => env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS'),
/*
|--------------------------------------------------------------------------
| Remote Path Mapping
|--------------------------------------------------------------------------
|
| If you are using a remote dev server, like Laravel Homestead, Docker, or
| even a remote VPS, it will be necessary to specify your path mapping.
|
| Leaving one, or both of these, empty or null will not trigger the remote
| URL changes and Ignition will treat your editor links as local files.
|
| "remote_sites_path" is an absolute base path for your sites or projects
| in Homestead, Vagrant, Docker, or another remote development server.
|
| Example value: "/home/vagrant/Code"
|
| "local_sites_path" is an absolute base path for your sites or projects
| on your local computer where your IDE or code editor is running on.
|
| Example values: "/Users/<name>/Code", "C:\Users\<name>\Documents\Code"
|
*/
'remote_sites_path' => env('IGNITION_REMOTE_SITES_PATH', base_path()),
'local_sites_path' => env('IGNITION_LOCAL_SITES_PATH', ''),
/*
|--------------------------------------------------------------------------
| Housekeeping Endpoint Prefix
|--------------------------------------------------------------------------
|
| Ignition registers a couple of routes when it is enabled. Below you may
| specify a route prefix that will be used to host all internal links.
|
*/
'housekeeping_endpoint_prefix' => '_ignition',
/*
|--------------------------------------------------------------------------
| Settings File
|--------------------------------------------------------------------------
|
| Ignition allows you to save your settings to a specific global file.
|
| If no path is specified, a file with settings will be saved to the user's
| home directory. The directory depends on the OS and its settings but it's
| typically `~/.ignition.json`. In this case, the settings will be applied
| to all of your projects where Ignition is used and the path is not
| specified.
|
| However, if you want to store your settings on a project basis, or you
| want to keep them in another directory, you can specify a path where
| the settings file will be saved. The path should be an existing directory
| with correct write access.
| For example, create a new `ignition` folder in the storage directory and
| use `storage_path('ignition')` as the `settings_file_path`.
|
| Default value: '' (empty string)
*/
'settings_file_path' => '',
/*
|--------------------------------------------------------------------------
| Recorders
|--------------------------------------------------------------------------
|
| Ignition registers a couple of recorders when it is enabled. Below you may
| specify a recorders will be used to record specific events.
|
*/
'recorders' => [
DumpRecorder::class,
JobRecorder::class,
LogRecorder::class,
QueryRecorder::class,
],
/*
* When a key is set, we'll send your exceptions to Open AI to generate a solution
*/
'open_ai_key' => env('IGNITION_OPEN_AI_KEY'),
/*
|--------------------------------------------------------------------------
| Include arguments
|--------------------------------------------------------------------------
|
| Ignition show you stack traces of exceptions with the arguments that were
| passed to each method. This feature can be disabled here.
|
*/
'with_stack_frame_arguments' => true,
/*
|--------------------------------------------------------------------------
| Argument reducers
|--------------------------------------------------------------------------
|
| Ignition show you stack traces of exceptions with the arguments that were
| passed to each method. To make these variables more readable, you can
| specify a list of classes here which summarize the variables.
|
*/
'argument_reducers' => [
\Spatie\Backtrace\Arguments\Reducers\BaseTypeArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\ArrayArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\StdClassArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\EnumArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\ClosureArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\DateTimeArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\DateTimeZoneArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\SymphonyRequestArgumentReducer::class,
\Spatie\LaravelIgnition\ArgumentReducers\ModelArgumentReducer::class,
\Spatie\LaravelIgnition\ArgumentReducers\CollectionArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\StringableArgumentReducer::class,
],
];

18
config/jqhtml.php Executable file
View File

@@ -0,0 +1,18 @@
<?php
return [
// Where to store source maps
'source_maps_path' => storage_path('jqhtml-sourcemaps'),
// Show source code context in errors
'show_source_context' => env('APP_DEBUG', false),
// Lines of context around errors
'context_lines' => 5,
// Enable source map generation
'enable_source_maps' => env('APP_DEBUG', false),
// Source map mode: 'inline', 'external', or 'both'
'source_map_mode' => 'external',
];

122
config/logging.php Executable file
View File

@@ -0,0 +1,122 @@
<?php
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
return [
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Deprecations Log Channel
|--------------------------------------------------------------------------
|
| This option controls the log channel that should be used to log warnings
| regarding deprecated PHP and library features. This allows you to get
| your application ready for upcoming major versions of dependencies.
|
*/
'deprecations' => [
'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
'trace' => false,
],
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog",
| "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => env('LOG_LEVEL', 'critical'),
],
'papertrail' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
],
],
'stderr' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => StreamHandler::class,
'formatter' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => env('LOG_LEVEL', 'debug'),
],
'errorlog' => [
'driver' => 'errorlog',
'level' => env('LOG_LEVEL', 'debug'),
],
'null' => [
'driver' => 'monolog',
'handler' => NullHandler::class,
],
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
],
];

164
config/mail.php Executable file
View File

@@ -0,0 +1,164 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Mailer
|--------------------------------------------------------------------------
|
| This option controls the default mailer that is used to send any email
| messages sent by your application. Alternative mailers may be setup
| and used as needed; however, this mailer will be used by default.
|
*/
'default' => env('MAIL_MAILER', 'smtp'),
/*
|--------------------------------------------------------------------------
| Admin Email Address
|--------------------------------------------------------------------------
|
| This is the email address used for sending admin notifications,
| such as new site registrations or system alerts.
|
*/
'admin_email' => env('MAIL_ADMIN_EMAIL', 'admin@example.com'),
/*
|--------------------------------------------------------------------------
| Queue Processing
|--------------------------------------------------------------------------
|
| These settings control how the email queue is processed.
|
*/
'queue' => [
'batch_size' => env('MAIL_QUEUE_BATCH_SIZE', 10),
'retry_delay' => env('MAIL_QUEUE_RETRY_DELAY', 3600), // 1 hour in seconds
'max_attempts' => env('MAIL_QUEUE_MAX_ATTEMPTS', 2),
'cleanup_days' => env('MAIL_QUEUE_CLEANUP_DAYS', 7),
'expiration_hours' => env('MAIL_QUEUE_EXPIRATION_HOURS', 24),
],
/*
|--------------------------------------------------------------------------
| Test Email Filtering
|--------------------------------------------------------------------------
|
| Emails sent to addresses containing these patterns will be marked as
| delivered but never actually sent. They will be logged for debugging.
|
*/
'test_patterns' => [
'+test',
'admin.com',
'test.com',
'example.com',
],
/*
|--------------------------------------------------------------------------
| Mailer Configurations
|--------------------------------------------------------------------------
|
| Here you may configure all of the mailers used by your application plus
| their respective settings. Several examples have been configured for
| you and you are free to add your own as your application requires.
|
| Laravel supports a variety of mail "transport" drivers to be used while
| sending an e-mail. You will specify which one you are using for your
| mailers below. You are free to add additional mailers as required.
|
| Supported: "smtp", "sendmail", "mailgun", "ses",
| "postmark", "log", "array", "failover"
|
*/
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN'),
],
'ses' => [
'transport' => 'ses',
],
'mailgun' => [
'transport' => 'mailgun',
],
'postmark' => [
'transport' => 'postmark',
],
'sendmail' => [
'transport' => 'sendmail',
'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
],
'log' => [
'transport' => 'log',
'channel' => env('MAIL_LOG_CHANNEL'),
],
'array' => [
'transport' => 'array',
],
'failover' => [
'transport' => 'failover',
'mailers' => [
'smtp',
'log',
],
],
],
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
/*
|--------------------------------------------------------------------------
| Markdown Mail Settings
|--------------------------------------------------------------------------
|
| If you are using Markdown based email rendering, you may configure your
| theme and component paths here, allowing you to customize the design
| of the emails. Or, you may simply stick with the Laravel defaults!
|
*/
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
];

3
config/models.php Executable file
View File

@@ -0,0 +1,3 @@
<?php
return array (
);

127
config/multi-tenant.php Executable file
View File

@@ -0,0 +1,127 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Multi-Tenant Configuration
|--------------------------------------------------------------------------
|
| This file contains the configuration options for the multi-tenant system.
|
*/
/*
|--------------------------------------------------------------------------
| Enable Multi-Tenancy
|--------------------------------------------------------------------------
|
| When set to false, the application will operate in single-tenant mode.
| All users will be assigned to site ID 1, and multi-site features will
| be disabled in the UI and backend.
|
*/
'enabled' => env('MULTI_TENANT_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Enable Multi-User Mode
|--------------------------------------------------------------------------
|
| When set to false, the application will operate in single-user mode.
| All users will be admins of their own site and user management features
| will be disabled in the UI. Each user creates exactly one site on registration.
|
*/
'enable_multi_user' => env('MULTI_USER_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Single User Tenant Mode
|--------------------------------------------------------------------------
|
| When set to true, each user will automatically get their own site
| upon registration. This is useful for applications where each user
| should have their own isolated environment.
|
*/
'single_user_tenant' => env('SINGLE_USER_TENANT', false),
/*
|--------------------------------------------------------------------------
| Default Site ID
|--------------------------------------------------------------------------
|
| The site ID to use when multi-tenancy is disabled.
| This is also the site ID used when a user has no site context.
|
*/
'default_site_id' => env('DEFAULT_SITE_ID', 1),
/*
|--------------------------------------------------------------------------
| Session Key
|--------------------------------------------------------------------------
|
| The key used to store the current site ID in the session.
|
*/
'session_key' => 'current_site_id',
/*
|--------------------------------------------------------------------------
| Invitation Expiry Time
|--------------------------------------------------------------------------
|
| The number of hours until an invitation expires.
|
*/
'invitation_expiry_hours' => 48,
/*
|--------------------------------------------------------------------------
| Root User Email
|--------------------------------------------------------------------------
|
| The email of the root user who has access to all sites.
| Leave empty to disable the root user feature.
|
*/
'root_user_email' => env('ROOT_USER_EMAIL', null),
/*
|--------------------------------------------------------------------------
| Auto-join First Site
|--------------------------------------------------------------------------
|
| When a user signs up and doesn't have any site invitation,
| should they automatically be added to the first site?
| Useful for simple deployments or testing.
|
*/
'auto_join_first_site' => env('AUTO_JOIN_FIRST_SITE', false),
/*
|--------------------------------------------------------------------------
| Site Creation Allowed
|--------------------------------------------------------------------------
|
| Controls whether users can create new sites.
| When set to false, only root users can create new sites.
|
*/
'allow_site_creation' => env('ALLOW_SITE_CREATION', true),
/*
|--------------------------------------------------------------------------
| Administrator Permissions
|--------------------------------------------------------------------------
|
| Special permissions that can be granted to admin users when running in
| single-tenant mode or with the extended admin permissions enabled.
|
*/
'admin_permissions' => [
'reset_user_passwords' => env('ADMIN_CAN_RESET_PASSWORDS', false),
'view_user_sessions' => env('ADMIN_CAN_VIEW_SESSIONS', false),
],
];

117
config/notifications.php Executable file
View File

@@ -0,0 +1,117 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Notification Channel Configuration
|--------------------------------------------------------------------------
|
| This file contains configuration options for the application's notification
| system, including settings for email, SMS, and in-app notifications.
|
*/
/*
|--------------------------------------------------------------------------
| SMS Notifications
|--------------------------------------------------------------------------
|
| Configure SMS notification settings, including consent requirements,
| sending behavior, and queue management.
|
*/
'sms' => [
/*
|--------------------------------------------------------------------------
| Enable SMS for Application Notifications
|--------------------------------------------------------------------------
|
| This setting determines if the application uses SMS for general notifications
| beyond authentication purposes. When set to true, users will see consent
| options during registration and in their profile settings.
|
| This is separate from SMS authentication - this is for regular app notifications.
|
*/
'application_notifications_enabled' => env('SMS_APP_NOTIFICATIONS_ENABLED', false),
/*
|--------------------------------------------------------------------------
| SMS Queue Settings
|--------------------------------------------------------------------------
|
| Configuration for the SMS queue system that handles sending and retrying SMS
| messages.
|
*/
'queue' => [
// Retry delay in seconds before attempting to resend a failed SMS
'retry_delay' => env('SMS_RETRY_DELAY', 30),
// Maximum time in minutes to keep retrying a message before marking as failed
'message_timeout' => env('SMS_MESSAGE_TIMEOUT', 5),
// Maximum number of retry attempts before marking as failed
'max_retries' => env('SMS_MAX_RETRIES', 3),
],
/*
|--------------------------------------------------------------------------
| Phone Number Validation
|--------------------------------------------------------------------------
|
| Settings for phone number validation and formatting.
|
*/
'phone' => [
// Blocks test numbers with 555 in North American numbers
'block_test_numbers' => true,
// Default country code for phone numbers without one
'default_country_code' => env('DEFAULT_COUNTRY_CODE', 'US'),
],
],
/*
|--------------------------------------------------------------------------
| Registration Field Requirements
|--------------------------------------------------------------------------
|
| Configure which fields are required or optional during user registration.
| These settings determine what information is collected during signup.
|
*/
'registration' => [
// Require phone number during registration
'require_phone' => env('REGISTRATION_REQUIRE_PHONE', false),
// Collect phone number optionally during registration (ignored if require_phone is true)
'collect_phone' => env('REGISTRATION_COLLECT_PHONE', false),
// Require physical address during registration
'require_address' => env('REGISTRATION_REQUIRE_ADDRESS', false),
// Collect physical address optionally during registration (ignored if require_address is true)
'collect_address' => env('REGISTRATION_COLLECT_ADDRESS', false),
],
/*
|--------------------------------------------------------------------------
| General Notification Settings
|--------------------------------------------------------------------------
|
| General settings that apply to all notification types.
|
*/
'channels' => [
// Enable in-app notifications
'in_app' => env('NOTIFICATIONS_IN_APP_ENABLED', true),
// Enable email notifications
'email' => env('NOTIFICATIONS_EMAIL_ENABLED', true),
// Enable SMS notifications (requires SMS service to be configured)
'sms' => env('NOTIFICATIONS_SMS_ENABLED', false),
],
];

93
config/queue.php Executable file
View File

@@ -0,0 +1,93 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Queue Connection Name
|--------------------------------------------------------------------------
|
| Laravel's queue API supports an assortment of back-ends via a single
| API, giving you convenient access to each back-end using the same
| syntax for every one. Here you may define a default connection.
|
*/
'default' => env('QUEUE_CONNECTION', 'sync'),
/*
|--------------------------------------------------------------------------
| Queue Connections
|--------------------------------------------------------------------------
|
| Here you may configure the connection information for each server that
| is used by your application. A default configuration has been added
| for each back-end shipped with Laravel. You are free to add more.
|
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
|
*/
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
'after_commit' => false,
],
'beanstalkd' => [
'driver' => 'beanstalkd',
'host' => 'localhost',
'queue' => 'default',
'retry_after' => 90,
'block_for' => 0,
'after_commit' => false,
],
'sqs' => [
'driver' => 'sqs',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'default'),
'suffix' => env('SQS_SUFFIX'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'after_commit' => false,
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
'after_commit' => false,
],
],
/*
|--------------------------------------------------------------------------
| Failed Queue Jobs
|--------------------------------------------------------------------------
|
| These options configure the behavior of failed queue job logging so you
| can control which database and table are used to store the jobs that
| have failed. You may change them to any database / table you wish.
|
*/
'failed' => [
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
];

51
config/recaptcha.php Executable file
View File

@@ -0,0 +1,51 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| reCAPTCHA Configuration
|--------------------------------------------------------------------------
|
| This file contains configuration options for Google reCAPTCHA integration.
|
*/
/*
|--------------------------------------------------------------------------
| Enable reCAPTCHA
|--------------------------------------------------------------------------
|
| This setting controls whether reCAPTCHA is enabled for the application.
| When disabled, no reCAPTCHA will be displayed or validated.
|
*/
'enabled' => env('RECAPTCHA_ENABLED', false),
/*
|--------------------------------------------------------------------------
| Features that use reCAPTCHA
|--------------------------------------------------------------------------
|
| Configure which features should use reCAPTCHA when enabled.
|
*/
'features' => [
'registration' => env('RECAPTCHA_ON_REGISTRATION', true),
'login' => env('RECAPTCHA_ON_LOGIN', false),
'contact_form' => env('RECAPTCHA_ON_CONTACT', true),
'password_reset' => env('RECAPTCHA_ON_PASSWORD_RESET', false),
],
/*
|--------------------------------------------------------------------------
| API Configuration
|--------------------------------------------------------------------------
|
| reCAPTCHA API configuration settings.
| The site_key and secret_key are defined in config/services.php
|
*/
'version' => env('RECAPTCHA_VERSION', 'v2'),
'size' => env('RECAPTCHA_SIZE', 'normal'), // 'normal', 'compact'
'theme' => env('RECAPTCHA_THEME', 'light'), // 'light', 'dark'
];

487
config/rsx.php Executable file
View File

@@ -0,0 +1,487 @@
<?php
/**
* RSX Framework Configuration
*
* Framework defaults and core operational settings. User customizations belong
* in /rsx/resource/config/rsx.php which is merged with this file.
*
* For extended documentation: php artisan rsx:man config_rsx
*
* ---
*
* MOVED TO USER CONFIG (/rsx/resource/config/rsx.php):
*
* The following configuration keys were moved from this file to user config
* because they represent user preferences rather than framework requirements:
*
* - locking
* - locking.timeout - Performance tuning preference
* - locking.always_write_lock - Debugging preference
* - locking.site_always_write - Debugging preference
* Reason: Developers may need to tune locking behavior for performance
*
* - development.auto_rename_files - IDE preference for file auto-renaming
* Reason: VS Code extension user preference
*
* - development.ignore_filename_convention - Disable filename checks globally
* Reason: Developer choice for convention enforcement
*
* - manifest.excluded_dirs - Additional directories to exclude from scanning
* Reason: Users may want custom exclusions (framework exclusions are hardcoded)
*
* - code_quality.generic_suffix_replacements - Required suffix specificity rules
* Reason: Users define their own naming patterns (Handler, Service, etc.)
*
* - console_debug.outputs - Debug output destinations (cli, web, ajax, laravel_log)
* Reason: User preference for debug visibility
*
* - console_debug.filter_mode - Filter mode (all, whitelist, blacklist, specific)
* Reason: User debugging workflow preference
*
* - console_debug.specific_channel - Specific channel to show
* Reason: User debugging focus
*
* - console_debug.whitelist - Channels to show in whitelist mode
* Reason: Users add custom application debug channels
*
* - console_debug.blacklist - Channels to hide in blacklist mode
* Reason: User preference for hiding noisy channels
*
* - console_debug.include_benchmark - Include timing in debug output
* Reason: User preference for performance analysis
*
* - console_debug.include_location - Include file/line in debug output
* Reason: User debugging preference
*
* - console_debug.include_backtrace - Include call stack in debug output
* Reason: User debugging preference
*
* - console_debug.enable_get_trace - Enable ?__trace=1 for plain text output
* Reason: User debugging preference
*
* - log_browser_errors - Log JavaScript errors to Laravel log
* Reason: User preference for client-side error tracking
*
* - response.default_view - Default view when controller doesn't specify
* Reason: Application-specific default
*
* - response.error_views - Custom error view templates (404, 500)
* Reason: Application-specific error pages
*
* - response.cors - CORS settings for API responses
* Reason: Application-specific API configuration
*
* - gatekeeper - Development preview authentication
* - gatekeeper.enabled - Enable/disable authentication
* - gatekeeper.password - Shared password
* - gatekeeper.cookie_name - Cookie name for auth
* - gatekeeper.cookie_lifetime_hours - Cookie lifetime
* - gatekeeper.title - Login page title
* - gatekeeper.subtitle - Login page description
* - gatekeeper.logo - Custom logo path
* Reason: Application-specific development site protection
*
* REMOVED (DEAD CODE):
*
* - middleware - RSX middleware configuration (UNUSED - no code references)
* - response.asset_cache - Asset caching settings (UNUSED - no code references)
*/
return [
/*
|--------------------------------------------------------------------------
| Manifest Modules
|--------------------------------------------------------------------------
|
| These modules process files during manifest scanning. Each module
| handles specific file types and extracts metadata. Modules are
| processed in priority order (lower number = higher priority).
|
*/
'manifest_modules' => [
// Core modules (can be copied and modified)
// PHP extraction is handled directly in Manifest to avoid DRY violations
// JavaScript is a first-class citizen, handled directly in Manifest.php
\App\RSpade\Core\Manifest\Modules\Blade_ManifestModule::class,
\App\RSpade\Integrations\Scss\Scss_ManifestModule::class,
// Custom modules
// \App\RSpade\Modules\Custom\MyCustomModule::class,
],
/*
|--------------------------------------------------------------------------
| Manifest Support Modules
|--------------------------------------------------------------------------
|
| These modules run AFTER the primary manifest is built to add
| supplementary metadata that requires the full manifest to be available.
| Order matters - modules are processed in the order listed.
|
*/
'manifest_support' => [
\App\RSpade\Modules\Model_ManifestSupport::class,
\App\RSpade\Integrations\Jqhtml\Jqhtml_ManifestSupport::class,
],
/*
|--------------------------------------------------------------------------
| Integrations
|--------------------------------------------------------------------------
|
| External integrations that extend the framework's capabilities.
| Each integration can provide file discovery, processing, and bundling.
|
*/
'integrations' => [
// Register integration service providers here
// These will be loaded automatically if enabled
'providers' => [
\App\RSpade\Integrations\Jqhtml\Jqhtml_Service_Provider::class,
\App\RSpade\Core\Controller\Controller_Service_Provider::class,
\App\RSpade\Core\Database\Database_Service_Provider::class,
],
// Integration-specific configuration
'jqhtml' => [
'compiler' => [
'cache' => true,
'cache_ttl' => 3600,
'source_maps' => true,
],
],
],
/*
|--------------------------------------------------------------------------
| Bundle Processors
|--------------------------------------------------------------------------
|
| Configure global processors that transform files during bundle compilation.
| These processors are automatically applied to all bundles based on file
| extensions. Order matters - processors with lower priority run first.
|
*/
'bundle_processors' => [
// SCSS/Sass processor
\App\RSpade\Integrations\Scss\Scss_BundleProcessor::class,
// JQHTML processor
\App\RSpade\Integrations\Jqhtml\Jqhtml_BundleProcessor::class,
// Add custom processors here
// \App\RSpade\Processors\MyCustomProcessor::class,
],
/*
|--------------------------------------------------------------------------
| Required Bundles
|--------------------------------------------------------------------------
|
| These bundles are automatically prepended to every bundle's include list.
| They provide core functionality that all bundles need.
|
*/
'required_bundles' => [
'jquery', // jQuery library - foundation for many components
'lodash', // Lodash utility library - common utilities
'core', // Core framework JS - Manifest, Rsx, cache, etc.
'jqhtml', // Jqhtml library - client side templating library
],
/*
|--------------------------------------------------------------------------
| Bundle Aliases
|--------------------------------------------------------------------------
|
| Map bundle aliases to their corresponding bundle classes.
| These aliases can be used in bundle 'include' arrays for convenience.
|
*/
'bundle_aliases' => [
'core' => \App\RSpade\Core\Bundle\Core_Bundle::class,
'jquery' => \App\RSpade\Bundles\Jquery_Bundle::class,
'lodash' => \App\RSpade\Bundles\Lodash_Bundle::class,
'bootstrap5' => \App\RSpade\Bundles\Bootstrap5_Bundle::class,
'jqhtml' => \App\RSpade\Integrations\Jqhtml\Jqhtml_Bundle::class,
],
/*
|--------------------------------------------------------------------------
| RSX Routing Configuration
|--------------------------------------------------------------------------
|
| Configure how RSX handles routing, caching, and request dispatch.
|
*/
'routing' => [
// Directories to check for static assets
'asset_dirs' => ['public', 'assets', 'static', 'dist', 'build'],
// Handler type priorities (lower number = higher priority)
'handler_priority' => [
'controller' => 1,
'file' => 2,
'asset' => 3,
'custom' => 4,
],
],
/*
|--------------------------------------------------------------------------
| Public Directory Configuration
|--------------------------------------------------------------------------
|
| Configure security and access control for the /rsx/public/ directory.
| Files in this directory are served at the root URL of the application.
|
*/
'public' => [
// Global patterns blocked from HTTP access for security
// These patterns are always blocked regardless of public_ignore.json
'ignore_patterns' => [
'public_ignore.json',
'.git',
'.gitignore',
'.gitattributes',
'*.php',
'.env',
'.env.*',
'*.sh',
'*.py',
'*.rb',
'*.conf',
'*.ini',
'*.sql',
'*.bak',
'*.tmp',
'*~',
],
],
/*
|--------------------------------------------------------------------------
| RSX Manifest Configuration
|--------------------------------------------------------------------------
|
| Configure how RSX discovers and indexes classes, routes, and attributes.
|
*/
'manifest' => [
// Base directories to scan (relative to base_path())
// Can be directories (will be scanned recursively) or individual files
'scan_directories' => [
'rsx', // Main RSX application directory (symlinked to ../rsx)
'app/RSpade/Core', // Core framework classes (runtime essentials)
'app/RSpade/Modules', // Manifest support modules
'app/RSpade/Integrations', // Integration modules (Jqhtml, Scss, etc.)
'app/RSpade/Bundles', // Third-party bundles
'app/RSpade/Core/Providers', // Service providers
'app/RSpade/CodeQuality', // Code quality rules and checks
'app/RSpade/Testing', // Testing framework classes
'app/RSpade/temp', // Framework developer testing directory
],
// Specific filenames to exclude from manifest scanning (anywhere in tree)
'excluded_files' => [
'CLAUDE.md', // Documentation for AI assistants
'.placeholder', // Empty directory markers
'.DS_Store', // macOS folder metadata
'Thumbs.db', // Windows thumbnail cache
'desktop.ini', // Windows folder settings
'.gitkeep', // Git empty directory markers
'.gitattributes', // Git attributes config
'_rsx_helper.php', // IDE helper stubs (auto-generated)
],
],
/*
|--------------------------------------------------------------------------
| RSX Development Settings
|--------------------------------------------------------------------------
|
| Diagnostic flags for debugging. Override in user config for preferences.
|
*/
'development' => [
// Show detailed error messages
'debug' => env('RSX_DEBUG', env('APP_DEBUG', false)),
// Log all dispatches for debugging
'log_dispatches' => env('RSX_LOG_DISPATCHES', false),
// Show route matching details in error pages
'show_route_details' => env('RSX_SHOW_ROUTE_DETAILS', env('APP_DEBUG', false)),
// Disable AJAX request batching for easier debugging
// When true, each Ajax.call() makes an immediate individual request
// When false (default), requests are batched using setTimeout(0)
'ajax_disable_batching' => env('AJAX_DISABLE_BATCHING', false),
],
/*
|--------------------------------------------------------------------------
| Code Quality Configuration
|--------------------------------------------------------------------------
|
| Settings for code quality checks and validation rules.
|
*/
'code_quality' => [
// Framework developer mode - enables additional testing capabilities
// When true, allows testing rules in app/RSpade/temp directory
'is_framework_developer' => env('IS_FRAMEWORK_DEVELOPER', false),
// Whitelisted PHP/JS files allowed in project root directory
// These are typically build configuration files and IDE helpers
'root_whitelist' => [
'vite.config.js',
'webpack.config.js',
'webpack.mix.js',
'_ide_helper.php', // Laravel IDE Helper
'_rsx_helper.php', // RSX IDE Helper
'.phpstorm.meta.php', // PhpStorm metadata
],
// Whitelisted test files allowed in rsx/ directory (not subdirectories)
// Test files should normally be in proper test directories, not loose in rsx/
'rsx_test_whitelist' => [
// Currently no test files should exist directly in rsx/
],
// Classes exempt from suffix inheritance rules
// Children of these classes can use any naming pattern
'suffix_exempt_classes' => [
'Jqhtml_Component', // JQHTML components can have flexible naming
'Component', // JQHTML v2 components can have flexible naming
'Rsx_System_Model_Abstract', // System models (e.g., Session) have special naming
],
],
/*
|--------------------------------------------------------------------------
| IDE Integration Configuration
|--------------------------------------------------------------------------
|
| Settings for VS Code extension and IDE bridge communication.
|
*/
'ide_integration' => [
// Application domain for IDE to connect to
// Set to 'auto' to auto-discover from first web request
// Or specify explicitly: 'https://example.com'
//
// WARNING: When set to 'auto', email sending will be restricted to test mode
// with whitelisted receivers only, as email functionality requires a hardcoded
// domain. Production email sending will be disabled.
// TODO: Implement email test mode when email functionality is added (~1 month)
'application_domain' => env('RSX_APPLICATION_DOMAIN', 'auto'),
// Path where IDE bridge files are stored (auth tokens, discovered domain)
'bridge_path' => 'storage/rsx-ide-bridge',
// Enable IDE services endpoint (disabled in production by default)
'enabled' => env('RSX_IDE_SERVICES_ENABLED', env('APP_ENV', 'local') !== 'production'),
],
/*
|--------------------------------------------------------------------------
| JavaScript Configuration
|--------------------------------------------------------------------------
|
| Settings for JavaScript parsing and transformation.
|
*/
'javascript' => [
'babel' => [
// Enable Babel transformation for decorators
'transform_enabled' => env('BABEL_TRANSFORM', true),
// Target environment for transformation (modern, es6, es5)
'target' => env('BABEL_TARGET', 'modern'),
// Cache directory for transformed files
'cache_dir' => 'storage/rsx-tmp/babel_cache',
],
// Enable decorator support (parsed and optionally transformed)
'decorators' => true,
// Note: Private fields (#private) use native browser support, not transpiled
],
/*
|--------------------------------------------------------------------------
| Console Debug Configuration
|--------------------------------------------------------------------------
|
| Core debug system settings. Override outputs and filters in user config.
|
*/
'console_debug' => [
// Master switch to enable/disable all console debug output
'enabled' => env('CONSOLE_DEBUG_ENABLED', true),
],
/*
|--------------------------------------------------------------------------
| Exception Handlers
|--------------------------------------------------------------------------
|
| Exception handlers are executed in priority order when exceptions occur.
| Each handler can choose to handle the exception (return a response) or
| pass it to the next handler (return null). Handlers are sorted by priority
| with lower numbers running first.
|
| Handler Priority Ranges:
| - 1-50: Critical/environment-specific (CLI, AJAX, Playwright)
| - 51-100: Standard handlers
| - 101-500: Low priority handlers
| - 501+: Fallback* or catch-all handlers (RSX dispatch bootstrapper)
|
| Users can add custom handlers or reorder existing ones by modifying this array.
|
*/
'exception_handlers' => [
\App\RSpade\Core\Exceptions\Cli_Exception_Handler::class, // Priority 10
\App\RSpade\Core\Exceptions\Ajax_Exception_Handler::class, // Priority 20
\App\RSpade\Core\Debug\Playwright_Exception_Handler::class, // Priority 30
\App\RSpade\Core\Providers\Rsx_Dispatch_Bootstrapper_Handler::class, // Priority 1000
],
/*
|--------------------------------------------------------------------------
| SSR Full Page Cache (FPC) Configuration
|--------------------------------------------------------------------------
|
| Settings for server-side rendered static page caching. Routes marked with
| #[Static_Page] attribute are pre-rendered as static HTML via headless
| Chrome (Playwright) and cached in Redis for optimal SEO and performance.
|
| Cache Behavior:
| - Only served to unauthenticated users (no active session)
| - Auto-invalidates on deployment (build_key changes)
| - Supports ETags for 304 Not Modified responses
| - Cache headers: 0s in dev, 5min in prod
|
| Commands:
| - php artisan rsx:ssr_fpc:create /route # Generate cache for route
| - php artisan rsx:ssr_fpc:reset # Clear all FPC caches
|
*/
'ssr_fpc' => [
// Enable SSR Full Page Cache system
'enabled' => env('SSR_FPC_ENABLED', false),
// Playwright generation timeout in milliseconds
'generation_timeout' => env('SSR_FPC_TIMEOUT', 30000),
],
];

67
config/sanctum.php Executable file
View File

@@ -0,0 +1,67 @@
<?php
use Laravel\Sanctum\Sanctum;
return [
/*
|--------------------------------------------------------------------------
| Stateful Domains
|--------------------------------------------------------------------------
|
| Requests from the following domains / hosts will receive stateful API
| authentication cookies. Typically, these should include your local
| and production domains which access your API via a frontend SPA.
|
*/
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort()
))),
/*
|--------------------------------------------------------------------------
| Sanctum Guards
|--------------------------------------------------------------------------
|
| This array contains the authentication guards that will be checked when
| Sanctum is trying to authenticate a request. If none of these guards
| are able to authenticate the request, Sanctum will use the bearer
| token that's present on an incoming request for authentication.
|
*/
'guard' => ['web'],
/*
|--------------------------------------------------------------------------
| Expiration Minutes
|--------------------------------------------------------------------------
|
| This value controls the number of minutes until an issued token will be
| considered expired. If this value is null, personal access tokens do
| not expire. This won't tweak the lifetime of first-party sessions.
|
*/
'expiration' => null,
/*
|--------------------------------------------------------------------------
| Sanctum Middleware
|--------------------------------------------------------------------------
|
| When authenticating your first-party SPA with Sanctum you may need to
| customize some of the middleware Sanctum uses while processing the
| request. You may change the middleware listed below as required.
|
*/
'middleware' => [
'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
],
];

89
config/services.php Executable file
View File

@@ -0,0 +1,89 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Mailgun, Postmark, AWS and more. This file provides the de facto
| location for this type of information, allowing packages to have
| a conventional file to locate the various service credentials.
|
*/
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
'scheme' => 'https',
],
'postmark' => [
'token' => env('POSTMARK_TOKEN'),
],
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
/*
|--------------------------------------------------------------------------
| Google reCAPTCHA
|--------------------------------------------------------------------------
*/
'recaptcha' => [
'site_key' => env('RECAPTCHA_SITE_KEY', ''),
'secret_key' => env('RECAPTCHA_SECRET_KEY', ''),
],
/*
|--------------------------------------------------------------------------
| Twilio SMS
|--------------------------------------------------------------------------
|
| Twilio is used for sending SMS messages, including verification codes.
| Create an account at https://www.twilio.com/ to get these credentials.
|
*/
'twilio' => [
'enabled' => env('TWILIO_ENABLED', false),
'sid' => env('TWILIO_SID', ''),
'token' => env('TWILIO_TOKEN', ''),
'from' => env('TWILIO_FROM', ''),
],
/*
|--------------------------------------------------------------------------
| Social Media Authentication Services
|--------------------------------------------------------------------------
|
| These settings are used for SSO authentication with various providers.
| They are separate from the SSO settings in authentication.php which
| control which providers are enabled in the UI.
|
*/
'google' => [
'client_id' => env('SSO_GOOGLE_CLIENT_ID'),
'client_secret' => env('SSO_GOOGLE_CLIENT_SECRET'),
'redirect' => env('APP_URL') . '/auth/google/callback',
],
'microsoft' => [
'client_id' => env('SSO_MICROSOFT_CLIENT_ID'),
'client_secret' => env('SSO_MICROSOFT_CLIENT_SECRET'),
'tenant' => env('SSO_MICROSOFT_TENANT', 'common'),
'redirect' => env('APP_URL') . '/auth/microsoft/callback',
],
'facebook' => [
'client_id' => env('SSO_FACEBOOK_CLIENT_ID'),
'client_secret' => env('SSO_FACEBOOK_CLIENT_SECRET'),
'redirect' => env('APP_URL') . '/auth/facebook/callback',
],
];

216
config/session.php Executable file
View File

@@ -0,0 +1,216 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Session Driver
|--------------------------------------------------------------------------
|
| This option controls the default session "driver" that will be used on
| requests. By default, we will use the lightweight native driver but
| you may specify any of the other wonderful drivers provided here.
|
| Supported: "file", "cookie", "database", "apc",
| "memcached", "redis", "dynamodb", "array"
|
*/
'driver' => env('SESSION_DRIVER', 'array'),
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/
'lifetime' => env('SESSION_LIFETIME', 525600), // 365 days * 24 hours * 60 minutes = 525600 minutes
'expire_on_close' => false,
/*
|--------------------------------------------------------------------------
| Custom Session Lifetimes
|--------------------------------------------------------------------------
|
| Custom lifetimes for different session types.
| Auth sessions last for 3 months (90 days * 24 hours * 60 minutes = 129600 minutes).
| Guest sessions last for 24 hours (1440 minutes).
|
*/
'auth_lifetime' => env('SESSION_AUTH_LIFETIME', 129600), // 3 months
'guest_lifetime' => env('SESSION_GUEST_LIFETIME', 1440), // 24 hours
/*
|--------------------------------------------------------------------------
| Session Encryption
|--------------------------------------------------------------------------
|
| This option allows you to easily specify that all of your session data
| should be encrypted before it is stored. All encryption will be run
| automatically by Laravel and you can use the Session like normal.
|
*/
'encrypt' => false,
/*
|--------------------------------------------------------------------------
| Session File Location
|--------------------------------------------------------------------------
|
| When using the native session driver, we need a location where session
| files may be stored. A default has been set for you but a different
| location may be specified. This is only needed for file sessions.
|
*/
'files' => storage_path('framework/sessions'),
/*
|--------------------------------------------------------------------------
| Session Database Connection
|--------------------------------------------------------------------------
|
| When using the "database" or "redis" session drivers, you may specify a
| connection that should be used to manage these sessions. This should
| correspond to a connection in your database configuration options.
|
*/
'connection' => env('SESSION_CONNECTION'),
/*
|--------------------------------------------------------------------------
| Session Database Table
|--------------------------------------------------------------------------
|
| When using the "database" session driver, you may specify the table we
| should use to manage the sessions. Of course, a sensible default is
| provided for you; however, you are free to change this as needed.
|
*/
'table' => 'sessions',
/*
|--------------------------------------------------------------------------
| Session Cache Store
|--------------------------------------------------------------------------
|
| While using one of the framework's cache driven session backends you may
| list a cache store that should be used for these sessions. This value
| must match with one of the application's configured cache "stores".
|
| Affects: "apc", "dynamodb", "memcached", "redis"
|
*/
'store' => env('SESSION_STORE'),
/*
|--------------------------------------------------------------------------
| Session Sweeping Lottery
|--------------------------------------------------------------------------
|
| Some session drivers must manually sweep their storage location to get
| rid of old sessions from storage. Here are the chances that it will
| happen on a given request. By default, the odds are 2 out of 100.
|
*/
'lottery' => [2, 100],
/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver.
|
*/
'cookie' => env(
'SESSION_COOKIE',
'rspade_session'
),
/*
|--------------------------------------------------------------------------
| Session Cookie Path
|--------------------------------------------------------------------------
|
| The session cookie path determines the path for which the cookie will
| be regarded as available. Typically, this will be the root path of
| your application but you are free to change this when necessary.
|
*/
'path' => '/',
/*
|--------------------------------------------------------------------------
| Session Cookie Domain
|--------------------------------------------------------------------------
|
| Here you may change the domain of the cookie used to identify a session
| in your application. This will determine which domains the cookie is
| available to in your application. A sensible default has been set.
|
*/
'domain' => env('SESSION_DOMAIN'),
/*
|--------------------------------------------------------------------------
| HTTPS Only Cookies
|--------------------------------------------------------------------------
|
| By setting this option to true, session cookies will only be sent back
| to the server if the browser has a HTTPS connection. This will keep
| the cookie from being sent to you when it can't be done securely.
|
*/
'secure' => env('SESSION_SECURE_COOKIE'),
/*
|--------------------------------------------------------------------------
| HTTP Access Only
|--------------------------------------------------------------------------
|
| Setting this value to true will prevent JavaScript from accessing the
| value of the cookie and the cookie will only be accessible through
| the HTTP protocol. You are free to modify this option if needed.
|
*/
'http_only' => true,
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| will set this value to "lax" since this is a secure default value.
|
| Supported: "lax", "strict", "none", null
|
*/
'same_site' => 'lax',
];

71
config/sitemap.php Executable file
View File

@@ -0,0 +1,71 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Sitemap Configuration
|--------------------------------------------------------------------------
|
| This file contains configuration options for the sitemap generator.
|
*/
// Path where the sitemap will be generated (relative to public path)
'path' => 'sitemap.xml',
// How frequently the sitemap should be regenerated (in hours)
'regenerate_interval' => 3,
// Maximum number of URLs per sitemap (0 for unlimited)
'max_urls' => 50000,
// Whether to use sitemap index for large sites (creates multiple sitemaps)
'use_index' => false,
// Default values for sitemap entries
'defaults' => [
'change_freq' => 'weekly',
'priority' => 0.5,
],
// Which parts of the application should trigger regeneration
'observe' => [
'blog_posts' => true,
'static_blocks' => true,
'todo_lists' => true,
],
// Cooldown period after generation (in seconds) to prevent multiple regenerations
'cooldown' => 30,
// Categories for organizing sitemap entries
'categories' => [
'pages' => [
'name' => 'Pages',
'description' => 'Static pages and content',
'priority' => 0.8,
'change_freq' => 'monthly',
],
'blog' => [
'name' => 'Blog',
'description' => 'Blog posts and categories',
'priority' => 0.7,
'change_freq' => 'weekly',
],
'user_content' => [
'name' => 'User Content',
'description' => 'User-generated content like public todo lists',
'priority' => 0.6,
'change_freq' => 'daily',
],
'auth' => [
'name' => 'Authentication',
'description' => 'Login, registration, and account pages',
'priority' => 0.4,
'change_freq' => 'monthly',
],
],
// Public site URL (used if app.url is not set)
'site_url' => env('SITE_URL', null),
];

36
config/view.php Executable file
View File

@@ -0,0 +1,36 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| View Storage Paths
|--------------------------------------------------------------------------
|
| Most templating systems load templates from disk. Here you may specify
| an array of paths that should be checked for your views. Of course
| the usual Laravel view path has already been registered for you.
|
*/
'paths' => [
resource_path('views'),
],
/*
|--------------------------------------------------------------------------
| Compiled View Path
|--------------------------------------------------------------------------
|
| This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value.
|
*/
'compiled' => env(
'VIEW_COMPILED_PATH',
realpath(storage_path('framework/views'))
),
];