forked from admin/services_core
big update all menus
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Nas;
|
||||
|
||||
use App\Http\Controllers\ApiController;
|
||||
use App\Models\Tenant;
|
||||
use App\Models\TenantNasSetting;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class TenantNasSettingController extends ApiController
|
||||
{
|
||||
public function show(Request $request)
|
||||
{
|
||||
$tenant = $this->tenant($request);
|
||||
$setting = TenantNasSetting::firstOrCreate(['tenant_id' => $tenant->id], ['backend_mode' => 'routeros_api']);
|
||||
return $this->success($this->present($setting->load('radiusCluster:id,code,name,region,status')), 'Pengaturan backend NAS berhasil diambil');
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
$tenant = $this->tenant($request);
|
||||
$setting = TenantNasSetting::firstOrCreate(['tenant_id' => $tenant->id], ['backend_mode' => 'routeros_api']);
|
||||
$data = $request->validate([
|
||||
'tenant_id' => ['nullable','integer','exists:tenants,id'],
|
||||
'backend_mode' => ['required', Rule::in(['routeros_api','platform_radius','external_radius'])],
|
||||
'radius_cluster_id' => ['nullable','integer','exists:radius_clusters,id'],
|
||||
'external_radius_host' => ['nullable','string','max:255'],
|
||||
'external_auth_port' => ['nullable','integer','between:1,65535'],
|
||||
'external_accounting_port' => ['nullable','integer','between:1,65535'],
|
||||
'external_coa_port' => ['nullable','integer','between:1,65535'],
|
||||
'external_radius_secret' => ['nullable','string','max:1000'],
|
||||
'external_provisioning_api_url' => ['nullable','url:http,https','max:2000'],
|
||||
'external_provisioning_api_token' => ['nullable','string','max:2000'],
|
||||
'accounting_enabled' => ['nullable','boolean'],
|
||||
'coa_enabled' => ['nullable','boolean'],
|
||||
]);
|
||||
$usesExternal = $data['backend_mode'] === 'external_radius';
|
||||
if ($usesExternal && empty($data['external_radius_host'])) throw ValidationException::withMessages(['external_radius_host'=>'Host RADIUS eksternal wajib diisi.']);
|
||||
$data['hybrid_radius_source'] = null;
|
||||
foreach (['external_radius_secret','external_provisioning_api_token'] as $secret) if (blank($data[$secret] ?? null)) unset($data[$secret]);
|
||||
unset($data['tenant_id']);
|
||||
$setting->update($data);
|
||||
return $this->updated($this->present($setting->fresh()->load('radiusCluster:id,code,name,region,status')), 'Pengaturan backend NAS berhasil disimpan');
|
||||
}
|
||||
|
||||
private function tenant(Request $request): Tenant
|
||||
{
|
||||
$id = $request->user()->isMasterAdmin() ? ($request->integer('tenant_id') ?: $request->attributes->get('tenant_id')) : $request->attributes->get('tenant_id');
|
||||
abort_unless($id, 422, 'Tenant wajib dipilih.');
|
||||
return Tenant::findOrFail($id);
|
||||
}
|
||||
|
||||
private function present(TenantNasSetting $setting): array
|
||||
{
|
||||
return [...$setting->attributesToArray(), 'has_external_radius_secret'=>filled($setting->getRawOriginal('external_radius_secret')), 'has_external_provisioning_api_token'=>filled($setting->getRawOriginal('external_provisioning_api_token')), 'radius_cluster'=>$setting->radiusCluster];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user