From 8f9a38649487f1f5835578a8db9487196452586f Mon Sep 17 00:00:00 2001 From: Andy Heathershaw Date: Thu, 30 Apr 2020 08:38:37 +0100 Subject: [PATCH] Prevent deleting service definitions when they are in use throughout the system. Closes #153 --- .../Controllers/Admin/ServiceController.php | 25 +++++++++++++++++-- resources/lang/en/admin.php | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Admin/ServiceController.php b/app/Http/Controllers/Admin/ServiceController.php index 464878c..32e3e0f 100644 --- a/app/Http/Controllers/Admin/ServiceController.php +++ b/app/Http/Controllers/Admin/ServiceController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Admin; +use App\Configuration; use App\ExternalService; use App\Facade\Theme; use App\Facade\UserConfig; @@ -311,8 +312,28 @@ class ServiceController extends Controller private function isServiceInUse(ExternalService $service) { - // TODO check if the service is in use anywhere else and prevent it being deleted if so - return false; + switch ($service->service_type) + { + case ExternalService::FACEBOOK: + // Cannot delete Facebook service if it's set as the login provider + $facebookConfig = Configuration::where('key', 'facebook_external_service_id')->first(); + return !is_null($facebookConfig) && intval($facebookConfig->value) == $service->id; + + case ExternalService::GOOGLE: + // Cannot delete Google service if it's set as the login provider + $googleConfig = Configuration::where('key', 'google_external_service_id')->first(); + return !is_null($googleConfig) && intval($googleConfig->value) == $service->id; + + case ExternalService::DROPBOX: + return Storage::where('external_service_id', $service->id)->count() > 0; + + case ExternalService::TWITTER: + // Cannot delete Twitter service if it's set as the login provider + $twitterConfig = Configuration::where('key', 'twitter_external_service_id')->first(); + return !is_null($twitterConfig) && intval($twitterConfig->value) == $service->id; + } + + return true; } private function serviceTypeList() diff --git a/resources/lang/en/admin.php b/resources/lang/en/admin.php index 65a714a..2e5e9e1 100644 --- a/resources/lang/en/admin.php +++ b/resources/lang/en/admin.php @@ -72,7 +72,7 @@ return [ 'bulk_photos_changed' => ':number photo was updated successfully.|:number photos were updated successfully.', 'bulk_photos_changed_queued' => 'Your requested change has been queued. :number photo will be updated shortly.|Your requested change has been queued. :number photos will be updated shortly.', 'cannot_delete_own_user_account' => 'It is not possible to delete your own user account. Please ask another administrator to delete it for you.', - 'cannot_delete_service_in_use' => 'This service is still in use and cannot be deleted. Please remove any references to it in your configuration and try again.', + 'cannot_delete_service_in_use' => 'This service is still in use and cannot be deleted. Please remove any references to it in your configuration or storages and try again.', 'cannot_remove_own_admin' => 'You cannot remove your own administrator permissions. Please ask another administrator to remove the administrator permissions for you.', 'change_album_message' => 'Please select the album to move the photo(s) to:', 'change_album_title' => 'Move photo(s) to another album',