github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/src/com/sap/piper/TemporaryCredentialsUtils.groovy (about) 1 package com.sap.piper 2 3 class TemporaryCredentialsUtils implements Serializable { 4 5 private Script script 6 7 TemporaryCredentialsUtils(Script script) { 8 this.script = script 9 } 10 11 void handleTemporaryCredentials(List credentialItems, List credentialsDirectories, Closure body) { 12 final String credentialsFileName = 'credentials.json' 13 14 if (!credentialsDirectories) { 15 script.error("This should not happen: Directories for credentials files not specified.") 16 } 17 18 final boolean useCredentials = credentialItems 19 try { 20 if (useCredentials) { 21 writeCredentials(credentialItems, credentialsDirectories, credentialsFileName) 22 } 23 body() 24 } 25 finally { 26 if (useCredentials) { 27 deleteCredentials(credentialsDirectories, credentialsFileName) 28 } 29 } 30 } 31 32 private void writeCredentials(List credentialItems, List credentialsDirectories, String credentialsFileName) { 33 if (!credentialItems) { 34 script.echo "Not writing any credentials." 35 return 36 } 37 38 Boolean systemsFileFound = false 39 for (int i = 0; i < credentialsDirectories.size(); i++) { 40 if (!credentialsDirectories[i]) { 41 continue 42 } 43 if (!credentialsDirectories[i].endsWith("/")) { 44 credentialsDirectories[i] += '/' 45 } 46 if (script.fileExists("${credentialsDirectories[i]}systems.yml") || script.fileExists("${credentialsDirectories[i]}systems.yaml") || script.fileExists("${credentialsDirectories[i]}systems.json")) { 47 String credentialJson = returnCredentialsAsJSON(credentialItems) 48 49 script.echo "Writing credentials file with ${credentialItems.size()} items to ${credentialsDirectories[i]}." 50 script.writeFile file: credentialsDirectories[i] + credentialsFileName, text: credentialJson 51 52 systemsFileFound = true 53 } 54 } 55 if (!systemsFileFound) { 56 script.error("None of the directories ${credentialsDirectories} contains any of the files systems.yml, systems.yaml or systems.json. " + 57 "One of those files is required in order to activate the integration test credentials configured in the pipeline configuration file of this project. " + 58 "Please add the file as explained in project 'Piper' documentation.") 59 } 60 } 61 62 private void deleteCredentials(List credentialsDirectories, String credentialsFileName) { 63 for (int i = 0; i < credentialsDirectories.size(); i++) { 64 if (!credentialsDirectories[i]) { 65 continue 66 } 67 if(!credentialsDirectories[i].endsWith('/')) 68 credentialsDirectories[i] += '/' 69 70 if (script.fileExists(credentialsDirectories[i] + credentialsFileName)) { 71 script.echo "Deleting credentials file in ${credentialsDirectories[i]}." 72 script.sh "rm -f ${credentialsDirectories[i] + credentialsFileName}" 73 } 74 } 75 } 76 77 private String returnCredentialsAsJSON(List credentialItems) { 78 Map credentialCollection = [:] 79 credentialCollection['credentials'] = [] 80 81 for (int i = 0; i < credentialItems.size(); i++) { 82 String alias = credentialItems[i]['alias'] 83 String jenkinsCredentialId = credentialItems[i]['credentialId'] 84 85 script.withCredentials([ 86 script.usernamePassword(credentialsId: jenkinsCredentialId, passwordVariable: 'password', usernameVariable: 'user') 87 ]) { 88 credentialCollection['credentials'] += [alias: alias, username: script.user, password: script.password] 89 } 90 } 91 return new JsonUtils().groovyObjectToJsonString(credentialCollection) 92 } 93 }