Fix FLEXIAPI-384 Allow carddav_user_credentials to be set and use the correct...

This commit is contained in:
Timothée Jaussoin 2025-09-11 08:42:15 +00:00
parent 6770e198d9
commit d8f0c47d8f
3 changed files with 65 additions and 36 deletions

View file

@ -11,19 +11,19 @@ use App\SpaceCardDavServer;
class CardDavServerController extends Controller
{
public function index(string $host)
public function index(string $domain)
{
return Space::where('host', $host)->firstOrFail()->carddavServers;
return Space::where('domain', $domain)->firstOrFail()->carddavServers;
}
public function show(string $host, int $carddavServerId)
public function show(string $domain, int $carddavServerId)
{
return Space::where('host', $host)->firstOrFail()->carddavServers()->findOrFail($carddavServerId);
return Space::where('domain', $domain)->firstOrFail()->carddavServers()->findOrFail($carddavServerId);
}
public function store(CardDavServer $request, string $host)
public function store(CardDavServer $request, string $domain)
{
$space = Space::where('host', $host)->firstOrFail();
$space = Space::where('domain', $domain)->firstOrFail();
$carddavServer = new SpaceCardDavServer;
$carddavServer->space_id = $space->id;
@ -34,9 +34,9 @@ class CardDavServerController extends Controller
return $carddavServer->save();
}
public function update(CardDavServer $request, string $host, int $carddavServerId)
public function update(CardDavServer $request, string $domain, int $carddavServerId)
{
$space = Space::where('host', $host)->firstOrFail();
$space = Space::where('domain', $domain)->firstOrFail();
$carddavServer = $space->carddavServers()->findOrFail($carddavServerId);
$carddavServer->fill($request->validated());
@ -46,9 +46,9 @@ class CardDavServerController extends Controller
return $carddavServer->save();
}
public function destroy(string $host, int $carddavServerId)
public function destroy(string $domain, int $carddavServerId)
{
$space = Space::where('host', $host)->firstOrFail();
$space = Space::where('domain', $domain)->firstOrFail();
$carddavServer = $space->carddavServers()->findOrFail($carddavServerId);
return $carddavServer->delete();

View file

@ -131,33 +131,33 @@ class SpaceController extends Controller
$space->name = $request->get('name');
$space->host = $request->get('host');
$space->super = $request->get('super');
$space->disable_chat_feature = $request->get('disable_chat_feature');
$space->disable_meetings_feature = $request->get('disable_meetings_feature');
$space->disable_broadcast_feature = $request->get('disable_broadcast_feature');
$space->hide_settings = $request->get('hide_settings');
$space->hide_account_settings = $request->get('hide_account_settings');
$space->disable_call_recordings_feature = $request->get('disable_call_recordings_feature');
$space->only_display_sip_uri_username = $request->get('only_display_sip_uri_username');
$space->assistant_hide_create_account = $request->get('assistant_hide_create_account');
$space->assistant_disable_qr_code = $request->get('assistant_disable_qr_code');
$space->assistant_hide_third_party_account = $request->get('assistant_hide_third_party_account');
$space->max_account = $request->get('max_account', 0);
$space->max_accounts = $request->get('max_accounts', 0);
$space->expire_at = $request->get('expire_at');
$space->copyright_text = $request->get('copyright_text');
$space->intro_registration_text = $request->get('intro_registration_text');
$space->newsletter_registration_address = $request->get('newsletter_registration_address');
$space->account_proxy_registrar_address = $request->get('account_proxy_registrar_address');
$space->account_realm = $request->get('account_realm');
$space->assistant_disable_qr_code = $request->get('assistant_disable_qr_code');
$space->assistant_hide_create_account = $request->get('assistant_hide_create_account');
$space->assistant_hide_third_party_account = $request->get('assistant_hide_third_party_account');
$space->copyright_text = $request->get('copyright_text');
$space->carddav_user_credentials = $request->get('carddav_user_credentials');
$space->custom_provisioning_entries = $request->get('custom_provisioning_entries');
$space->custom_provisioning_overwrite_all = $request->get('custom_provisioning_overwrite_all');
$space->provisioning_use_linphone_provisioning_header = $request->get('provisioning_use_linphone_provisioning_header');
$space->custom_theme = $request->get('custom_theme');
$space->web_panel = $request->get('web_panel');
$space->public_registration = $request->get('public_registration');
$space->phone_registration = $request->get('phone_registration');
$space->disable_broadcast_feature = $request->get('disable_broadcast_feature');
$space->disable_call_recordings_feature = $request->get('disable_call_recordings_feature');
$space->disable_chat_feature = $request->get('disable_chat_feature');
$space->disable_meetings_feature = $request->get('disable_meetings_feature');
$space->expire_at = $request->get('expire_at');
$space->hide_account_settings = $request->get('hide_account_settings');
$space->hide_settings = $request->get('hide_settings');
$space->intercom_features = $request->get('intercom_features');
$space->intro_registration_text = $request->get('intro_registration_text');
$space->max_account = $request->get('max_account', 0);
$space->max_accounts = $request->get('max_accounts', 0);
$space->newsletter_registration_address = $request->get('newsletter_registration_address');
$space->only_display_sip_uri_username = $request->get('only_display_sip_uri_username');
$space->phone_registration = $request->get('phone_registration');
$space->provisioning_use_linphone_provisioning_header = $request->get('provisioning_use_linphone_provisioning_header');
$space->public_registration = $request->get('public_registration');
$space->web_panel = $request->get('web_panel');
$space->save();

View file

@ -35,7 +35,7 @@ class ApiSpaceCardDavServersTest extends TestCase
$admin = Account::factory()->admin()->create();
$admin->generateUserApiKey();
$route = $this->spaceRoute . '/' . $admin->space->host . '/carddavs';
$route = $this->spaceRoute . '/' . $admin->space->domain . '/carddavs';
$uri = 'http://test.com';
$this->keyAuthenticated($admin)
@ -50,10 +50,30 @@ class ApiSpaceCardDavServersTest extends TestCase
$superAdmin = Account::factory()->superAdmin()->create();
$superAdmin->generateUserApiKey();
$route = $this->spaceRoute . '/' . $superAdmin->space->host . '/carddavs';
$route = $this->spaceRoute . '/' . $superAdmin->space->domain . '/carddavs';
$uri = 'http://test.com';
$uri2 = 'http://test2.com';
// Test with a standard admin first
$superAdmin->space->super = false;
$superAdmin->space->save();
$this->keyAuthenticated($superAdmin)
->json('GET', $route)
->assertStatus(403);
$superAdmin->space->super = true;
$superAdmin->space->save();
// Super Admin again
$this->keyAuthenticated($superAdmin)
->json('GET', $route)
->assertJson([])
->assertStatus(200);
$this->keyAuthenticated($superAdmin)
->json('POST', $route, [
'uri' => $uri
@ -133,7 +153,7 @@ class ApiSpaceCardDavServersTest extends TestCase
'algorithm' => 'MD5'
];
$route = $this->spaceRoute . '/' . $admin->space->host . '/carddavs';
$route = $this->spaceRoute . '/' . $admin->space->domain . '/carddavs';
// Creating the CardDav
$this->keyAuthenticated($superAdmin)
@ -143,7 +163,16 @@ class ApiSpaceCardDavServersTest extends TestCase
->assertStatus(200);
// Allowing CardDav credentials for Admin 1 space
Space::where('domain', $admin->domain)->update(['carddav_user_credentials' => true]);
$server = $this->keyAuthenticated($admin)
->json('GET', $this->spaceRoute . '/' . $admin->space->domain)
->assertStatus(200)
->json();
$server['carddav_user_credentials'] = true;
$this->keyAuthenticated($admin)
->json('PUT', $this->spaceRoute . '/' . $admin->space->domain, $server)
->assertStatus(200);
// First Admin can get its own credentials
$this->keyAuthenticated($admin)
@ -182,7 +211,7 @@ class ApiSpaceCardDavServersTest extends TestCase
Space::where('domain', $user->domain)->update(['super' => true]);
$this->keyAuthenticated($admin)
->json('POST', $this->spaceRoute . '/' . $admin->space->host . '/carddavs', [
->json('POST', $this->spaceRoute . '/' . $admin->space->domain . '/carddavs', [
'uri' => 'http://uri.com'
])
->assertStatus(200);