import groovy.json.JsonOutput import groovy.json.JsonSlurper import org.apache.http.client.methods.HttpPost import org.apache.http.client.methods.HttpGet import org.apache.http.util.EntityUtils import org.apache.http.entity.StringEntity import org.apache.http.impl.client.CloseableHttpClient import org.apache.http.impl.client.HttpClients import org.apache.http.client.utils.URIBuilder import de.uplanet.scripting.groovy.util.Safely import java.io.File import java.io.FileOutputStream def httpclient = HttpClients.createDefault() def conn = g_dbConnections.systemConnection def stmt = null def rs = null // =================== //Data for API credential store // =================== def API_USERNAME = g_credentials.getSecret('apiNameSkribble') def API_KEY = g_credentials.getSecret('apiKeySkribble') // =================== // Data for API connection from sysDataGroup // =================== def API_HOST = g_sysDg['GUID'] // =================== // Gespeicherte RequestID // =================== def strRequestID = g_record["GUID"].value def STRID = g_record["['GUID'] "].value if (!strRequestID) { throw new RuntimeException("Keine gespeicherte Request-ID vorhanden") return false } // =================== // AUTHENTIFIZIERUNG // =================== def authUri = new URIBuilder() .setScheme("https") .setHost(API_HOST) .setPath("/v2/access/login") .build() def authPost = new HttpPost(authUri) authPost.setHeader("Content-Type", "application/json") def authPayload = [ username: API_USERNAME, "api-key": API_KEY ] authPost.setEntity(new StringEntity(JsonOutput.toJson(authPayload), "UTF-8")) def authResponse = httpclient.execute(authPost) def authStatus = authResponse.getStatusLine().getStatusCode() def authBody = EntityUtils.toString(authResponse.getEntity()) if (authStatus != 200) { throw new RuntimeException("Login fehlgeschlagen: ${authStatus} - ${authBody}") } def accessToken = authBody?.trim() if (!accessToken) { throw new RuntimeException("Kein Access Token erhalten") } // =============== // STATUS ABFRAGE // ============== def statusUri = new URIBuilder() .setScheme("https") .setHost(API_HOST) .setPath("/v2/signature-requests/${strRequestID}") .build() def statusGet = new HttpGet(statusUri) statusGet.setHeader("Authorization", "Bearer ${accessToken}") def statusResponse = httpclient.execute(statusGet) def statusBody = EntityUtils.toString(statusResponse.getEntity()) def json = new JsonSlurper().parseText(statusBody) def strOverallStatus = json.status_overall stmt = g_dbQuery.prepare(conn, """ UPDATE DATAGROUP('GUID') SET STR_DOCSTATUS=? WHERE STRID=? """) stmt.setString(1, strOverallStatus) stmt.setString(2, STRID) stmt.executeUpdate() stmt = Safely.close(stmt) if (json.status_overall == "SIGNED") { def documentId = json.document_id def pdfUri = new URIBuilder() .setScheme("https") .setHost(API_HOST) .setPath("/v2/documents/${documentId}/content") .build() def pdfGet = new HttpGet(pdfUri) pdfGet.setHeader("Authorization", "Bearer ${accessToken}") def pdfResponse = httpclient.execute(pdfGet) if (pdfResponse.getStatusLine().getStatusCode() != 200) { throw new RuntimeException("PDF Download fehlgeschlagen") } File dirTemp = createTemporaryDirectory() try { File tmpFile = new File(dirTemp, "Signed_${documentId}.pdf") FileOutputStream out = new FileOutputStream(tmpFile) BufferedOutputStream bos = new BufferedOutputStream(out) pdfResponse.getEntity().writeTo(bos) bos.close() out.close() // =============== //Guid of the final document // =============== g_dgFile.copy( guid: "GUID", id: STRID, file: tmpFile, mode: "appendFirst" ) } finally { dirTemp.deleteDir() pdfResponse.close() } }