187 lines
7.7 KiB
PHP
187 lines
7.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Setting;
|
|
use Illuminate\Http\Request;
|
|
use Inertia\Inertia;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class SystemSettingController extends Controller
|
|
{
|
|
/**
|
|
* Display the system settings page.
|
|
*/
|
|
public function index()
|
|
{
|
|
abort_if(!auth()->user()->hasRole('super-admin') && !auth()->user()->can('settings.view'), 403, 'Unauthorized. Settings view permission required.');
|
|
|
|
$settings = Setting::all()->pluck('value', 'key');
|
|
|
|
$defaultSettings = [
|
|
'app_name' => 'biiproject kit v2',
|
|
'app_logo' => null,
|
|
'app_logo_text' => 'BK',
|
|
'app_description' => 'Enterprise Admin Platform',
|
|
'allow_registration' => '1',
|
|
'require_email_verification' => '0',
|
|
'password_minimum_length' => '8',
|
|
'password_require_symbols' => '0',
|
|
'password_require_numbers' => '0',
|
|
'password_require_mixed_case' => '0',
|
|
|
|
// Two Factor global toggles
|
|
'two_factor_totp_enabled' => '1',
|
|
'two_factor_email_enabled' => '1',
|
|
|
|
// OAuth
|
|
'oauth_google_enabled' => '0',
|
|
'oauth_google_client_id' => '',
|
|
'oauth_google_client_secret' => '',
|
|
'oauth_github_enabled' => '0',
|
|
'oauth_github_client_id' => '',
|
|
'oauth_github_client_secret' => '',
|
|
|
|
// SMTP
|
|
'mail_host' => 'smtp.mailtrap.io',
|
|
'mail_port' => '2525',
|
|
'mail_username' => '',
|
|
'mail_password' => '',
|
|
'mail_encryption' => 'tls',
|
|
'mail_from_address' => 'hello@biiproject.com',
|
|
'mail_from_name' => 'biiproject kit Admin',
|
|
|
|
'primary_color' => '#6366f1',
|
|
|
|
// Mobile App Control
|
|
'android_latest_version' => '1.0.0',
|
|
'android_min_version' => '1.0.0',
|
|
'android_maintenance_mode' => '0',
|
|
'android_playstore_url' => '',
|
|
];
|
|
|
|
$mergedSettings = array_merge($defaultSettings, $settings->toArray());
|
|
|
|
return Inertia::render('SystemSettings/Index', [
|
|
'settings' => $mergedSettings,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Update the system settings.
|
|
*/
|
|
public function update(Request $request)
|
|
{
|
|
abort_if(!auth()->user()->hasRole('super-admin') && !auth()->user()->can('settings.edit'), 403, 'Unauthorized. Settings edit permission required.');
|
|
|
|
$validated = $request->validate([
|
|
'settings' => 'required|array',
|
|
'settings.app_name' => 'required|string|max:255',
|
|
'settings.app_logo_text' => 'required|string|max:3',
|
|
'settings.app_description' => 'nullable|string',
|
|
'settings.allow_registration' => 'boolean',
|
|
'settings.require_email_verification' => 'boolean',
|
|
'settings.password_minimum_length' => 'integer|min:8',
|
|
'settings.password_require_symbols' => 'boolean',
|
|
'settings.password_require_numbers' => 'boolean',
|
|
'settings.password_require_mixed_case' => 'boolean',
|
|
|
|
'settings.two_factor_totp_enabled' => 'boolean',
|
|
'settings.two_factor_email_enabled' => 'boolean',
|
|
|
|
'settings.oauth_google_enabled' => 'boolean',
|
|
'settings.oauth_google_client_id' => 'nullable|string',
|
|
'settings.oauth_google_client_secret' => 'nullable|string',
|
|
'settings.oauth_github_enabled' => 'boolean',
|
|
'settings.oauth_github_client_id' => 'nullable|string',
|
|
'settings.oauth_github_client_secret' => 'nullable|string',
|
|
|
|
'settings.mail_host' => 'nullable|string',
|
|
'settings.mail_port' => 'nullable|string',
|
|
'settings.mail_username' => 'nullable|string',
|
|
'settings.mail_password' => 'nullable|string',
|
|
'settings.mail_encryption' => 'nullable|string',
|
|
'settings.mail_from_address' => 'nullable|email',
|
|
'settings.mail_from_name' => 'nullable|string',
|
|
|
|
'settings.primary_color' => 'required|string',
|
|
|
|
// Mobile App Control
|
|
'settings.android_latest_version' => 'nullable|string',
|
|
'settings.android_min_version' => 'nullable|string',
|
|
'settings.android_maintenance_mode' => 'boolean',
|
|
'settings.android_playstore_url' => 'nullable|url',
|
|
'logo_file' => 'nullable|image|max:2048',
|
|
]);
|
|
|
|
$settings = $validated['settings'];
|
|
|
|
if ($request->hasFile('logo_file')) {
|
|
$path = $request->file('logo_file')->store('branding', 'public');
|
|
$logoUrl = Storage::url($path);
|
|
Setting::updateOrCreate(['key' => 'app_logo'], ['value' => $logoUrl, 'type' => 'string']);
|
|
}
|
|
|
|
foreach ($settings as $key => $value) {
|
|
Setting::updateOrCreate(
|
|
['key' => $key],
|
|
['value' => (string) $value, 'type' => is_bool($value) ? 'boolean' : (is_int($value) ? 'integer' : 'string')]
|
|
);
|
|
}
|
|
|
|
Cache::forget('system_settings');
|
|
|
|
return back()->with('success', 'System configurations updated successfully.');
|
|
}
|
|
|
|
/**
|
|
* Send a test email using SMTP details from the request.
|
|
*/
|
|
public function testEmail(Request $request)
|
|
{
|
|
abort_if(!auth()->user()->hasRole('super-admin') && !auth()->user()->can('settings.test-email'), 403, 'Unauthorized. SMTP testing permission required.');
|
|
|
|
$request->validate([
|
|
'recipient' => 'required|email',
|
|
'mail_host' => 'nullable|string',
|
|
'mail_port' => 'nullable|string',
|
|
'mail_username' => 'nullable|string',
|
|
'mail_password' => 'nullable|string',
|
|
'mail_encryption' => 'nullable|string',
|
|
'mail_from_address' => 'nullable|email',
|
|
'mail_from_name' => 'nullable|string',
|
|
]);
|
|
|
|
try {
|
|
// Apply SMTP settings at runtime
|
|
config([
|
|
'mail.default' => 'smtp',
|
|
'mail.mailers.smtp.transport' => 'smtp',
|
|
'mail.mailers.smtp.host' => $request->input('mail_host'),
|
|
'mail.mailers.smtp.port' => $request->input('mail_port'),
|
|
'mail.mailers.smtp.username' => $request->input('mail_username'),
|
|
'mail.mailers.smtp.password' => $request->input('mail_password'),
|
|
'mail.mailers.smtp.encryption' => $request->input('mail_encryption') ?: 'tls',
|
|
'mail.from.address' => $request->input('mail_from_address'),
|
|
'mail.from.name' => $request->input('mail_from_name'),
|
|
]);
|
|
|
|
\Illuminate\Support\Facades\Mail::raw("Halo!\n\nIni adalah email uji coba (test email) dari sistem biiskit.\n\nJika Anda menerima email ini, berarti konfigurasi SMTP Anda berfungsi dengan baik!\n\nDetail Konfigurasi:\n- Host: " . ($request->input('mail_host') ?: '-') . "\n- Port: " . ($request->input('mail_port') ?: '-') . "\n- Sender: " . ($request->input('mail_from_address') ?: '-') . "\n\nSalam,\nAdmin biiskit", function ($message) use ($request) {
|
|
$message->to($request->input('recipient'))
|
|
->subject("Uji Coba Konfigurasi SMTP - biiskit");
|
|
});
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Email uji coba telah berhasil dikirim ke ' . $request->input('recipient')
|
|
]);
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Gagal mengirim email uji coba. Error: ' . $e->getMessage()
|
|
]);
|
|
}
|
|
}
|
|
}
|