Settings pages: - Redesign layout to match Sendkit (max-w-4xl, space-y-12, Separator sections) - Merge Members page into Workspace settings with Table, invite Dialog, ConfirmDeleteModal - Add workspace logo upload/delete routes and controller methods - Translate all hardcoded strings in Workspace.vue modals Language system: - Drop languages table, replace language_id FK with locale string column on users - Create config/languages.php for available languages and default locale - Add Spanish (es) translations (13 files) - Simplify HandleInertiaRequests, ProfileController, RegisteredUserController Code quality: - Add declare(strict_types=1) to all PHP files - Fix MastodonPublisher using wrong attribute (filename -> original_filename) - Fix HasMediaTest for new has_photo/photo_url accessors - Fix PublishToSocialPlatformTest type error revealed by strict_types - Remove orphaned Language model from AppServiceProvider morph map - Update User TypeScript interface (has_photo, photo_url, locale) - Eager load media relation on workspaces to prevent N+1 - Add 8 new tests for workspace logo upload/delete - Update workspace settings test to assert members/invitations props All 710 tests passing.
100 lines
2.9 KiB
PHP
100 lines
2.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
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.
|
|
|
|
|
*/
|
|
|
|
'postmark' => [
|
|
'key' => env('POSTMARK_API_KEY'),
|
|
],
|
|
|
|
'resend' => [
|
|
'key' => env('RESEND_API_KEY'),
|
|
],
|
|
|
|
'ses' => [
|
|
'key' => env('AWS_ACCESS_KEY_ID'),
|
|
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
|
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
|
],
|
|
|
|
'slack' => [
|
|
'notifications' => [
|
|
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
|
|
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
|
|
],
|
|
],
|
|
|
|
'linkedin' => [
|
|
'client_id' => env('LINKEDIN_CLIENT_ID'),
|
|
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
|
|
'redirect' => env('LINKEDIN_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
'linkedin-openid' => [
|
|
'client_id' => env('LINKEDIN_CLIENT_ID'),
|
|
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
|
|
'redirect' => env('LINKEDIN_CLIENT_REDIRECT'),
|
|
'redirect_page' => env('LINKEDIN_PAGE_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
'x' => [
|
|
'client_id' => env('X_CLIENT_ID'),
|
|
'client_secret' => env('X_CLIENT_SECRET'),
|
|
'redirect' => env('X_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
'tiktok' => [
|
|
'client_id' => env('TIKTOK_CLIENT_ID'),
|
|
'client_secret' => env('TIKTOK_CLIENT_SECRET'),
|
|
'redirect' => env('TIKTOK_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
// Google OAuth (used for YouTube)
|
|
'google' => [
|
|
'client_id' => env('GOOGLE_CLIENT_ID'),
|
|
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
|
|
'redirect' => env('GOOGLE_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
// Facebook Pages
|
|
'facebook' => [
|
|
'client_id' => env('FACEBOOK_CLIENT_ID'),
|
|
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
|
|
'redirect' => env('FACEBOOK_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
// Instagram
|
|
'instagram' => [
|
|
'client_id' => env('INSTAGRAM_CLIENT_ID'),
|
|
'client_secret' => env('INSTAGRAM_CLIENT_SECRET'),
|
|
'redirect' => env('INSTAGRAM_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
// Threads
|
|
'threads' => [
|
|
'client_id' => env('THREADS_CLIENT_ID'),
|
|
'client_secret' => env('THREADS_CLIENT_SECRET'),
|
|
'redirect' => env('THREADS_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
// Pinterest
|
|
'pinterest' => [
|
|
'client_id' => env('PINTEREST_CLIENT_ID'),
|
|
'client_secret' => env('PINTEREST_CLIENT_SECRET'),
|
|
'redirect' => env('PINTEREST_CLIENT_REDIRECT'),
|
|
],
|
|
|
|
];
|