in signature/src/main/java/com/chemistry/enotebook/signature/SignatureUtil.java [43:97]
public String doSign(String id, String username, String comment, byte[] keyStorage, String password) throws Exception {
Document document = database.getDocument(id);
if(document == null) {
throw new MissingDocumentException("Error. Can't find document " + id + " in database.");
}
document.setContent(database.getDocumentContent(id));
if(document.getContent() == null || document.getContent().length == 0) {
throw new MissingDocumentException("Error. Content of document " + id + " is empty.");
}
User user = database.getUserByUsername(username);
try {
SignatureApplier signatureApplier = new SignatureFactory().getSignatureApplier(signatureProperties.getSigningMethod());
DocumentSignatureBlock signatureBlock = document.getDocumentSignatureBlockForUser(user);
if(signatureBlock != null) {
signatureBlock.setComment(comment);
byte[] signedDocument = signatureApplier.signDocument(document.getContent(), signatureBlock, keyStorage, password);
if(signedDocument != null && signedDocument.length > 0) {
signatureBlock.setStatus(Status.SIGNED);
signatureBlock.setActionDate(System.currentTimeMillis());
for(DocumentSignatureBlock anySignatureBlock : document.getDocumentSignatureBlocks()) {
if(anySignatureBlock.getIndex() == signatureBlock.getIndex() + 1) {
anySignatureBlock.setStatus(Status.SIGNING);
}
}
document.setContent(signedDocument);
document.updateStatusAccordingToSignatureBlocks();
document.setLastUpdateDate(System.currentTimeMillis());
if(document.getStatus().equals(Status.SIGNED) && Status.ARCHIVED.toString().equalsIgnoreCase(signatureProperties.getFinalStatus())) {
archiver.updateDocumentStatusAndArchive(document);
}
database.updateDocument(document, true);
emailSender.sendEmailToNextSignerInSeparateThread(document, signatureProperties.getIndigoElnAddress());
}
} else {
throw new SignatureException("User " + user.getUsername() + " is not able to sign document " + id + ".");
}
} catch (DocumentIntegrityException e) {
removeDocument(document);
return Util.generateErrorJsonString(Util.getMessageAboutDocumentRemove(document.getDocumentName()));
} catch (Exception e) {
throw new SignatureException("Failed to sign document " + document.getDocumentName() + ". " + e.getMessage());
}
document.updateActionRequiredFlagAndAddToDeliveryFlagAndInspectedFlagForCurrentUser(user.getUsername());
return document.asJson().toString();
}