Skip to content

Instantly share code, notes, and snippets.

@sabomichal
Created May 31, 2017 14:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sabomichal/58e9fc12f26761e2636cc6c68b3cdfd2 to your computer and use it in GitHub Desktop.
Save sabomichal/58e9fc12f26761e2636cc6c68b3cdfd2 to your computer and use it in GitHub Desktop.
if (typeof (dsigner) == "undefined") {
dsigner = {};
dsigner.supportedPlatforms = "";
dsigner.signatureId = "signatureId";
dsigner.digestAlgUri = "http://www.w3.org/2001/04/xmlenc#sha256";
dsigner.signaturePolicyIdentifier = "urn:oid:1.3.158.36061701.1.2.1";
dsigner.xmlObjectId = "XML";
dsigner.xmlObjectDescription = "XML";
dsigner.xsdReference = "http://data.gov.sk/doc/eform/151513.ZiadostItms/1.0";
dsigner.xslReference = "http://data.gov.sk/doc/eform/151513.ZiadostItms/1.0";
dsigner.transformType = "HTML";
dsigner.pdfObjectId = "PDF";
dsigner.pdfObjectDescription = "PDF";
dsigner.objectFormatIdentifier = "http://example.com/objectFormatIdentifier";
dsigner.password = "";
dsigner.reqLevel = 0;
dsigner.convert = false;
dsigner.successCallback = function (successCallbackUrl, val) {
var blob = new Blob([val], {type: "text/xml"});
var data = new FormData();
data.append('signedXml', blob);
var headers = {
'Wicket-Ajax': 'true',
'Wicket-Ajax-BaseURL': Wicket.Ajax.baseUrl
};
var opts = {
url: successCallbackUrl,
data: data,
cache: false,
contentType: false,
processData: false,
type: 'POST',
headers: headers,
success: function (xml) {
$(xml).find('component').each(function () {
var idcko = $(this).attr('id');
$('#' + idcko).replaceWith($(this).text());
});
$(xml).find('evaluate').each(function(){
eval($(this).text());
});
}
};
jQuery.ajax(opts);
};
dsigner.getAjaxContent = function (requestUrl, callback) {
var opts = {
url: requestUrl,
cache: false,
contentType: false,
processData: false,
type: 'GET',
success: callback
};
jQuery.ajax(opts);
};
dsigner.getSupportedPlatforms = function (callback, error) {
ditec.dSigXadesJs.detectSupportedPlatforms(dsigner.supportedPlatforms, new dsigner.XmlCallback(function (platforms) {
/**
* 000, 0001, 010, ..., 111
* aaX <=> ak X == 1 -> tak sa pouziva .Net
* aXa <=> ak X == 1 -> tak sa pouziva Java
* Xaa <=> ak X == 1 -> tak sa pouziva dLauncher
*/
var result = 0;
if (platforms.length == 0) {
return result;
} else {
for (var i = 0; i < platforms.length; i++) {
switch (platforms[i]) {
/* 110 */
case "dLauncherJava":
result = result | 6;
break;
/* 101 */
case "dLauncherDotNet":
result = result | 5;
break;
/* 010 */
case "java":
result = result | 2;
break;
/* 001 */
case "dotNet":
result = result | 1;
break;
}
}
}
callback(error, result);
}));
};
dsigner.PdfCallback = function (onSuccess, onError) {
this.onSuccess = onSuccess;
if (this.onSuccess == null) {
this.onSuccess = function (value) {
dsigner.successCallback(pdfSuccessCallbackUrl, value);
};
}
this.onError = onError;
};
dsigner.XmlCallback = function (onSuccess, onError) {
this.onSuccess = onSuccess;
if (this.onSuccess == null) {
this.onSuccess = function (value) {
dsigner.successCallback(xmlSuccessCallbackUrl, value);
};
}
this.onError = onError;
};
dsigner.onXmlDeployError = function (error) {
dsigner.getSupportedPlatforms(xmlDeployErrorCallback, error);
};
dsigner.onXmlGeneralError = function (error) {
xmlGeneralErrorCallback(error);
};
dsigner.onPdfDeployError = function (error) {
dsigner.getSupportedPlatforms(pdfDeployErrorCallback, error);
};
dsigner.onPdfGeneralError = function (error) {
pdfGeneralErrorCallback(error);
};
dsigner.signXml = function (namespaceUri) {
dsigner.getAjaxContent(xmlContentCallbackUrl, function (sourceXml) {
dsigner.getAjaxContent(xsdContentCallbackUrl, function (sourceXsd) {
dsigner.getAjaxContent(xsltContentCallbackUrl, function (sourceXslt) {
dsigner.doSignXml(sourceXml, sourceXsd, sourceXslt, namespaceUri);
});
});
});
};
dsigner.doSignXml = function (sourceXml, sourceXsd, sourceXslt, namespaceUri) {
if ("ActiveXObject" in window) {
try {
var xmlPlugin = new ActiveXObject("DSig.XmlPluginAtl");
var obj = xmlPlugin.CreateObject2(dsigner.xmlObjectId,
dsigner.xmlObjectDescription,
sourceXml,
sourceXsd,
namespaceUri,
dsigner.xsdReference,
sourceXslt,
dsigner.xslReference,
dsigner.transformType
);
dsigner.signActiveX(obj, xmlSuccessCallbackUrl, xmlGeneralErrorCallback);
} catch(e) {
dsigner.doSignXmlNonActiveX(sourceXml, sourceXsd, sourceXslt, namespaceUri);
}
} else {
dsigner.doSignXmlNonActiveX(sourceXml, sourceXsd, sourceXslt, namespaceUri);
}
};
dsigner.signActiveX = function(object, successCallback, errorCallback) {
var dSigner = new ActiveXObject("DSig.XadesSigAtl");
if (object == null) {
errorCallback(error);
}
var addObj = dSigner.AddObject(object);
if (addObj != 0) {
errorCallback(error);
}
dSigner.SetSigningTimeProcessing(0, 0);
var res = dSigner.Sign(dsigner.signatureId, dsigner.digestAlgUri, dsigner.signaturePolicyIdentifier);
if (res == 0) {
dsigner.successCallback(successCallback, dSigner.SignedXMLWithEnvelope);
}
else {
errorCallback(dSigner.ErrorMessage);
}
}
dsigner.doSignXmlNonActiveX = function (sourceXml, sourceXsd, sourceXslt, namespaceUri) {
ditec.dSigXadesJs.detectSupportedPlatforms(dsigner.supportedPlatforms, new dsigner.XmlCallback(function (platforms) {
ditec.dSigXadesJs.deploy({"platforms": platforms}, new dsigner.XmlCallback(function () {
ditec.dSigXadesJs.initialize(new dsigner.XmlCallback(function () {
ditec.dSigXadesJs.addXmlObject2(dsigner.xmlObjectId, dsigner.xmlObjectDescription, sourceXml, sourceXsd, namespaceUri, dsigner.xsdReference, sourceXslt, dsigner.xslReference, dsigner.transformType, new dsigner.XmlCallback(function () {
ditec.dSigXadesJs.sign(dsigner.signatureId, dsigner.digestAlgUri, dsigner.signaturePolicyIdentifier, new dsigner.XmlCallback(function () {
ditec.dSigXadesJs.getSignedXmlWithEnvelope(new dsigner.XmlCallback(null, dsigner.onXmlGeneralError));
}, dsigner.onXmlGeneralError));
}, dsigner.onXmlGeneralError));
}, dsigner.onXmlDeployError));
}, dsigner.onXmlDeployError));
}, dsigner.onXmlDeployError));
};
dsigner.signPdf = function () {
dsigner.getAjaxContent(pdfContentCallbackUrl, function (sourcePdfBase64) {
dsigner.doSignPdf(sourcePdfBase64);
});
};
dsigner.doSignPdf = function (sourcePdfBase64) {
if ("ActiveXObject" in window) {
try {
var pdfPlugin = new ActiveXObject("DSig.PdfPluginAtl");
var isPDFACompliance = pdfPlugin.CheckPDFACompliance(sourcePdfBase64, '', dsigner.reqLevel);
var convertedSourcePdfBase64;
if (isPDFACompliance != 0) {
var convertPDFAResult = pdfPlugin.ConvertToPDFA(sourcePdfBase64, '', dsigner.reqLevel);
if (convertPDFAResult != 0) {
pdfGeneralErrorCallback('Váš dokument nebol transformovaný do formátu PDF/A-1.');
}
convertedSourcePdfBase64 = pdfPlugin.ConvertedPDFA;
}
var obj = pdfPlugin.CreateObject(dsigner.pdfObjectId, dsigner.pdfObjectDescription, convertedSourcePdfBase64, '', dsigner.objectFormatIdentifier, dsigner.reqLevel, false);
dsigner.signActiveX(obj, pdfSuccessCallbackUrl, pdfGeneralErrorCallback);
} catch(e) {
dsigner.doSignPdfNonActiveX(sourcePdfBase64);
}
} else {
dsigner.doSignPdfNonActiveX(sourcePdfBase64);
}
}
dsigner.doSignPdfNonActiveX = function (sourcePdfBase64) {
ditec.dSigXadesJs.detectSupportedPlatforms(dsigner.supportedPlatforms, new dsigner.PdfCallback(function (platforms) {
ditec.dSigXadesJs.deploy({"platforms": platforms}, new dsigner.PdfCallback(function () {
ditec.dSigXadesJs.initialize(new dsigner.PdfCallback(function () {
ditec.dSigXadesJs.convertToPDFA(sourcePdfBase64, dsigner.password, dsigner.reqLevel, new dsigner.PdfCallback(function () {
ditec.dSigXadesJs.getConvertedPDFA(new dsigner.PdfCallback(function (convertedSourcePdfBase64) {
ditec.dSigXadesJs.addPdfObject(dsigner.pdfObjectId, dsigner.pdfObjectDescription, convertedSourcePdfBase64, dsigner.password, dsigner.objectFormatIdentifier, dsigner.reqLevel, dsigner.convert, new dsigner.PdfCallback(function () {
ditec.dSigXadesJs.sign(dsigner.signatureId, dsigner.digestAlgUri, dsigner.signaturePolicyIdentifier, new dsigner.PdfCallback(function () {
ditec.dSigXadesJs.getSignedXmlWithEnvelope(new dsigner.PdfCallback(null, dsigner.onPdfGeneralError));
}, dsigner.onPdfGeneralError));
}, dsigner.onPdfGeneralError));
}, dsigner.onPdfGeneralError));
}, dsigner.onPdfGeneralError));
}, dsigner.onPdfDeployError));
}, dsigner.onPdfDeployError));
}, dsigner.onPdfDeployError));
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment