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  }