From 1ea40525f9202165a2f107a2665eae73e19df9ab Mon Sep 17 00:00:00 2001 From: Jeroen De Meerleer Date: Thu, 6 May 2021 13:30:12 +0200 Subject: [PATCH] BUGFIX: non-secret variables --- public/resources/job/add.js | 20 +++++++++++++----- src/Repository/Job.php | 41 +++++++++++++++++++++++++++++-------- templates/job/add.html.twig | 29 +++++++++++++++----------- 3 files changed, 64 insertions(+), 26 deletions(-) diff --git a/public/resources/job/add.js b/public/resources/job/add.js index 10d8745..66ed944 100644 --- a/public/resources/job/add.js +++ b/public/resources/job/add.js @@ -1,7 +1,7 @@ $(function() { initDatePickers(); initCronType(); - initSecretInputs(); + initVarInputs(); initDelayPattern(); bsCustomFileInput.init() }); @@ -25,11 +25,21 @@ function initCronType() }) } -function initSecretInputs() +function initVarInputs() { - $('.addsecret-btn').on('click', function() { - $('.secret-group:first-child').clone().appendTo('.secrets').removeClass('hidden'); - $('.secrets-description').removeClass('hidden'); + $('.addvar-btn').on('click', function() { + let index = $('.var-group').length; + $('.var-group:first-child').clone().appendTo('.vars').removeClass('hidden'); + $('.var-group:last-child').data({index: index}); + $('.var-group:last-child .var-issecret').prop('name', 'var-issecret[' + index + ']'); + $('.var-group:last-child .var-id').prop('name', 'var-id[' + index + ']'); + $('.var-group:last-child .var-value').prop('name', 'var-value[' + index + ']'); + $('.vars-description').removeClass('hidden'); + }) + $(document).on('click', '.var-issecret', function() { + let ischecked = $(this).prop('checked'); + $(this).parents('.var-group').find('.var-value').prop('type', ischecked ? 'password' : 'text'); + }) } diff --git a/src/Repository/Job.php b/src/Repository/Job.php index 6a1d35e..0b164de 100644 --- a/src/Repository/Job.php +++ b/src/Repository/Job.php @@ -56,10 +56,17 @@ class Job case 'ssh': $data['host'] = $values['host']; $data['user'] = $values['user']; + if(!empty($values['privkey-password'])) { + $newsecretkey = count($values['var-value']); + $values['var-id'][$newsecretkey] = 'privkey-password'; + $values['var-issecret'][$newsecretkey] = true; + $values['var-value'][$newsecretkey] = $values['privkey-password']; + } if(!empty($_FILES['privkey']['tmp_name'])) { - $newsecretkey = count($values['secretval']); - $values['secretid'][$newsecretkey] = 'ssh-privkey'; - $values['secretval'][$newsecretkey] = base64_encode(file_get_contents($_FILES['privkey']['tmp_name'])); + $newsecretkey = count($values['var-value']); + $values['var-id'][$newsecretkey] = 'ssh-privkey'; + $values['var-issecret'][$newsecretkey] = true; + $values['var-value'][$newsecretkey] = base64_encode(file_get_contents($_FILES['privkey']['tmp_name'])); } $data['command'] = $values['command']; break; @@ -70,13 +77,27 @@ class Job if(empty($parsedUrl['host'])) { return ['success' => false, 'message' => 'Some data was invalid']; } + if(!empty($values['basicauth-password'])) { + $newsecretkey = count($values['var-value']); + $values['var-id'][$newsecretkey] = 'basicauth-password'; + $values['var-issecret'][$newsecretkey] = true; + $values['var-value'][$newsecretkey] = $values['basicauth-password']; + } $data['host'] = $parsedUrl['host']; break; } - if(!empty($values['secretval'])) { - foreach($values['secretval'] as $key => $name) { - if(!empty($name)) $data['secrets'][$values['secretid'][$key]] = base64_encode(Secret::encrypt($values['secretval'][$key])); + if(!empty($values['var-value'])) { + foreach($values['var-value'] as $key => $name) { + if(!empty($name)) { + if(isset($values['var-issecret'][$key])) { + $data['vars'][$values['var-id'][$key]]['issecret'] = true; + $data['vars'][$values['var-id'][$key]]['value'] = base64_encode(Secret::encrypt($values['var-value'][$key])); + } else { + $data['vars'][$values['var-id'][$key]]['issecret'] = false; + $data['vars'][$values['var-id'][$key]]['value'] = $values['var-value'][$key]; + } + } } } @@ -95,9 +116,11 @@ class Job $jobRslt = $jobStmt->execute([':id' => $id])->fetchAssociative(); $jobRslt['data'] = json_decode($jobRslt['data'], true); - if(!empty($jobRslt['data']['secrets'])) { - foreach ($jobRslt['data']['secrets'] as $key => &$value) { - $value = ($withSecrets) ? Secret::decrypt(base64_decode($value)) : ''; + if(!empty($jobRslt['data']['vars'])) { + foreach ($jobRslt['data']['vars'] as $key => &$value) { + if ($value['issecret']) { + $value['value'] = ($withSecrets) ? Secret::decrypt(base64_decode($value['value'])) : ''; + } } } diff --git a/templates/job/add.html.twig b/templates/job/add.html.twig index bf581cc..5412e65 100644 --- a/templates/job/add.html.twig +++ b/templates/job/add.html.twig @@ -84,8 +84,7 @@
- - + If private key is empty this field is being used as ssh-password This field is being saved as a secret
@@ -107,27 +106,33 @@
- - + This field is being saved as a secret
-

Secrets

-
-