AIRAVATA-2156 Prevent deleting default SSH key Also fixes for the client-side description field validation
Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/a90dfedb Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/a90dfedb Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/a90dfedb Branch: refs/heads/develop Commit: a90dfedb1b51ce8de956ccc2b450a6269dc30b99 Parents: 9bc02d0 Author: Marcus Christie <[email protected]> Authored: Thu Oct 27 10:37:56 2016 -0400 Committer: Marcus Christie <[email protected]> Committed: Thu Oct 27 10:37:56 2016 -0400 ---------------------------------------------------------------------- app/controllers/AccountController.php | 8 ++++++++ app/views/account/credential-store.blade.php | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a90dfedb/app/controllers/AccountController.php ---------------------------------------------------------------------- diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php index bd8091d..b5361b5 100644 --- a/app/controllers/AccountController.php +++ b/app/controllers/AccountController.php @@ -473,6 +473,9 @@ class AccountController extends BaseController $userCredentialSummaries = URPUtilities::get_all_ssh_pub_keys_summary_for_user(); $credentialSummaryMap = $this->create_credential_summary_map(URPUtilities::get_all_ssh_pub_keys_summary_for_user()); $defaultCredentialSummary = $credentialSummaryMap[$userResourceProfile->credentialStoreToken]; + foreach ($userCredentialSummaries as $credentialSummary) { + $credentialSummary->canDelete = ($credentialSummary->token != $defaultCredentialSummary->token); + } return View::make("account/credential-store", array( "userResourceProfile" => $userResourceProfile, @@ -519,7 +522,12 @@ class AccountController extends BaseController public function deleteCredential() { + $userResourceProfile = URPUtilities::get_user_resource_profile(); $credentialStoreToken = Input::get("credentialStoreToken"); + if ($credentialStoreToken == $userResourceProfile->credentialStoreToken) { + return Redirect::to("account/credential-store")->with("error-message", "You are not allowed to delete the default SSH key."); + } + $credentialSummaryMap = $this->create_credential_summary_map(URPUtilities::get_all_ssh_pub_keys_summary_for_user()); $description = $credentialSummaryMap[$credentialStoreToken]->description; http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a90dfedb/app/views/account/credential-store.blade.php ---------------------------------------------------------------------- diff --git a/app/views/account/credential-store.blade.php b/app/views/account/credential-store.blade.php index 6908844..3f4fee6 100644 --- a/app/views/account/credential-store.blade.php +++ b/app/views/account/credential-store.blade.php @@ -14,6 +14,16 @@ </div> {{ Session::forget("message") }} @endif + + @if( Session::has("error-message")) + <div class="alert alert-danger alert-dismissible" role="alert"> + <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span + class="sr-only">Close</span></button> + {{{ Session::get("error-message") }}} + </div> + {{ Session::forget("error-message") }} + @endif + <h1>SSH Keys</h1> <h3>Default SSH Key</h3> <form class="form-inline" action="{{ URL::to('/') }}/account/set-default-credential" method="post"> @@ -66,9 +76,11 @@ {{ $credentialSummary->publicKey }} </td> <td> + @if ($credentialSummary->canDelete) <span data-token="{{$credentialSummary->token}}" data-description="{{$credentialSummary->description}}" class="glyphicon glyphicon-trash delete-credential"></span> + @endif </td> </tr> @endforeach @@ -117,12 +129,16 @@ $('.delete-credential').on('click', function(){ }); $('#credential-description').on('invalid', function(event){ + this.setCustomValidity("Please provide a description"); $('#credential-description-form-group').addClass('has-error'); }); $('#credential-description').on('keyup input change', function(event){ if (this.checkValidity) { + // Reset custom error message. If it isn't empty string it is considered invalid. + this.setCustomValidity(""); + // checkValidity will cause invalid event to be dispatched. See invalid + // event handler above which will set the custom error message. var valid = this.checkValidity(); - this.setCustomValidity("Please provide a description"); $('#credential-description-form-group').toggleClass('has-error', !valid); } });
