Skip to content

Commit 4fa3193

Browse files
Restoring simple one-click signature action
When including signature positions as blank in properties, no form is provided for users to sign
1 parent 079625e commit 4fa3193

File tree

8 files changed

+117
-87
lines changed

8 files changed

+117
-87
lines changed

README.md

+28-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ This module uses a software digital certificate or a cryptographic hardware supp
5252
The plugin is licensed under the [LGPL v3.0](http://www.gnu.org/licenses/lgpl-3.0.html).
5353

5454
**State**
55-
Current addon release 1.5.0 is ***PROD***
55+
Current addon release 1.5.1 is ***PROD***
5656

5757
**Compatibility**
5858
The current version has been developed using Alfresco 5.0.d and Alfresco SDK 2.1.1, although it runs in Alfresco 5.1.x
@@ -69,8 +69,8 @@ Downloading the ready-to-deploy-plugin
6969
--------------------------------------
7070
The binary distribution is made of two amp files:
7171

72-
* [repo AMP](https://github.com/keensoft/alfresco-esign-cert/releases/download/1.5.0/esign-cert-repo.amp)
73-
* [share AMP](https://github.com/keensoft/alfresco-esign-cert/releases/download/1.5.0/esign-cert-share.amp)
72+
* [repo AMP](https://github.com/keensoft/alfresco-esign-cert/releases/download/1.5.1/esign-cert-repo.amp)
73+
* [share AMP](https://github.com/keensoft/alfresco-esign-cert/releases/download/1.5.1/esign-cert-share.amp)
7474

7575
You can install them by using standard [Alfresco deployment tools](http://docs.alfresco.com/community/tasks/dev-extensions-tutorials-simple-module-install-amp.html)
7676

@@ -117,6 +117,8 @@ Configuration
117117
----------------------
118118
Before installation, following properties must be included in **alfresco-global.properties**
119119

120+
**Sample configuration 1**
121+
120122
```
121123
# Native @firma parameters separated by tab (\t)
122124
esign.cert.params.pades=signaturePage=1\tsignaturePositionOnPageLowerLeftX=120\tsignaturePositionOnPageLowerLeftY=50\tsignaturePositionOnPageUpperRightX=220\tsignaturePositionOnPageUpperRightY=150\t
@@ -137,6 +139,29 @@ esign.cert.signOtherDocs=false
137139
esign.cert.params.signPurpose.enabled=false
138140
```
139141

142+
If no signature position selection form is required, `signaturePosition` properties must be declared blank. PDF signature will be performed by using `esign.cert.params.pades` in this scenario.
143+
144+
**Sample configuration 2**
145+
146+
```
147+
# Native @firma parameters separated by tab (\t)
148+
esign.cert.params.pades=signaturePage=1\tsignaturePositionOnPageLowerLeftX=120\tsignaturePositionOnPageLowerLeftY=50\tsignaturePositionOnPageUpperRightX=220\tsignaturePositionOnPageUpperRightY=150\t
149+
esign.cert.params.cades=mode=explicit
150+
# Signature algorithm: SHA1withRSA, SHA256withRSA, SHA384withRSA, SHA512withRSA
151+
esign.cert.signature.alg=SHA512withRSA
152+
esign.cert.params.firstSignaturePosition=
153+
esign.cert.params.secondSignaturePosition=
154+
esign.cert.params.thirdSignaturePosition=
155+
esign.cert.params.fourthSignaturePosition=
156+
esign.cert.params.fifthSignaturePosition=
157+
esign.cert.params.sixthSignaturePosition=
158+
159+
# Property for disable sign other docs
160+
esign.cert.signOtherDocs=false
161+
162+
# Sign Purpose (Default enabled=false)
163+
esign.cert.params.signPurpose.enabled=false
164+
```
140165

141166
Usage
142167
----------------------

esign-cert-repo/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>es.keensoft.alfresco</groupId>
66
<artifactId>esign-cert-repo</artifactId>
7-
<version>1.5.0</version>
7+
<version>1.5.1</version>
88
<name>esign-cert-repo Repository AMP project</name>
99
<packaging>amp</packaging>
1010
<description>Manages the lifecycle of the esign-cert-repo Repository AMP (Alfresco Module Package)</description>

esign-cert-repo/src/main/amp/config/alfresco/module/esign-cert-repo/alfresco-global.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ esign.cert.params.fifthSignaturePosition=signaturePage={page}\tsignaturePosition
1313
esign.cert.params.sixthSignaturePosition=signaturePage={page}\tsignaturePositionOnPageLowerLeftX=310\tsignaturePositionOnPageLowerLeftY=1\tsignaturePositionOnPageUpperRightX=565\tsignaturePositionOnPageUpperRightY=25\t
1414

1515
## Property for disable sign other docs
16-
esign.cert.signOtherDocs=false
16+
esign.cert.signOtherDocs=true
1717

1818
# Sign Purpose (Default enabled=false)
1919
esign.cert.params.signPurpose.enabled=false

esign-cert-repo/src/test/properties/local/alfresco-global.properties

+6-6
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ esign.cert.params.cades=mode=explicit
7373
# Signature algorithm: SHA1withRSA, SHA256withRSA, SHA384withRSA, SHA512withRSA
7474
esign.cert.signature.alg=SHA512withRSA
7575
#Additional properties for page and location position
76-
esign.cert.params.firstSignaturePosition=signaturePage={page}\tsignaturePositionOnPageLowerLeftX=50\tsignaturePositionOnPageLowerLeftY=45\tsignaturePositionOnPageUpperRightX=305\tsignaturePositionOnPageUpperRightY=69\t
77-
esign.cert.params.secondSignaturePosition=signaturePage={page}\tsignaturePositionOnPageLowerLeftX=310\tsignaturePositionOnPageLowerLeftY=45\tsignaturePositionOnPageUpperRightX=565\tsignaturePositionOnPageUpperRightY=69\t
78-
esign.cert.params.thirdSignaturePosition=signaturePage={page}\tsignaturePositionOnPageLowerLeftX=50\tsignaturePositionOnPageLowerLeftY=23\tsignaturePositionOnPageUpperRightX=305\tsignaturePositionOnPageUpperRightY=47\t
79-
esign.cert.params.fourthSignaturePosition=signaturePage={page}\tsignaturePositionOnPageLowerLeftX=310\tsignaturePositionOnPageLowerLeftY=23\tsignaturePositionOnPageUpperRightX=565\tsignaturePositionOnPageUpperRightY=47\t
80-
esign.cert.params.fifthSignaturePosition=signaturePage={page}\tsignaturePositionOnPageLowerLeftX=50\tsignaturePositionOnPageLowerLeftY=1\tsignaturePositionOnPageUpperRightX=305\tsignaturePositionOnPageUpperRightY=25\t
81-
esign.cert.params.sixthSignaturePosition=signaturePage={page}\tsignaturePositionOnPageLowerLeftX=310\tsignaturePositionOnPageLowerLeftY=1\tsignaturePositionOnPageUpperRightX=565\tsignaturePositionOnPageUpperRightY=25\t
76+
esign.cert.params.firstSignaturePosition=
77+
esign.cert.params.secondSignaturePosition=
78+
esign.cert.params.thirdSignaturePosition=
79+
esign.cert.params.fourthSignaturePosition=
80+
esign.cert.params.fifthSignaturePosition=
81+
esign.cert.params.sixthSignaturePosition=

esign-cert-share/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>es.keensoft.alfresco</groupId>
66
<artifactId>esign-cert-share</artifactId>
7-
<version>1.5.0</version>
7+
<version>1.5.1</version>
88
<name>esign-cert-share AMP project</name>
99
<packaging>amp</packaging>
1010
<description>Manages the lifecycle of the esign-cert-share AMP (Alfresco Module Package)</description>

esign-cert-share/src/main/amp/config/alfresco/web-extension/site-webscripts/es/keensoft/sign/sign-dialog.get.html.ftl

+60-54
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,55 @@
22
<div class="hd">${msg("window.title")}</div>
33
<div class="bd">
44
<#if !jsonError>
5+
6+
<div id="loading-text" style="display:none;">${msg("document.ready")}</div>
7+
<div id="loading" style="text-align:center; display: none;">
8+
<img src="/share/sign/icon.gif" >
9+
</div>
10+
511
<div id="info" class="yui-gd" style="padding:30px;text-align:justify;">
6-
<div id="loading-text" style="display:none;">${msg("document.ready")}</div>
7-
<div id="loading" style="text-align:center; display: none;">
8-
<img src="/share/sign/icon.gif" >
9-
</div>
10-
<#if mimeType == "pdf">
11-
<div style="width: 50%; float:left; display: inline-block">
12-
<div id="position-text">${msg("document.position")}</div>
13-
<select id="signaturePlace" style="width: 95%;">
14-
<#if showOptionFirstSignature>
15-
<option value="sig1">${msg("select.sig1")}</option>
16-
</#if>
17-
<#if showOptionSecondSignature>
18-
<option value="sig2">${msg("select.sig2")}</option>
19-
</#if>
20-
<#if showOptionThirdSignature>
21-
<option value="sig3">${msg("select.sig3")}</option>
22-
</#if>
23-
<#if showOptionFourthSignature>
24-
<option value="sig4">${msg("select.sig4")}</option>
25-
</#if>
26-
<#if showOptionFifthSignature>
27-
<option value="sig5">${msg("select.sig5")}</option>
28-
</#if>
29-
<#if showOptionSixthSignature>
30-
<option value="sig6">${msg("select.sig6")}</option>
31-
</#if>
32-
</select>
33-
</div>
34-
<div style="width: 50%; display: inline-block">
35-
<div id="pageTitle">${msg("page")}</div>
36-
<select id="signaturePage" style="width: 95%;">
37-
<option value="last">${msg("page.last")}</option>
38-
<option value="first">${msg("page.first")}</option>
39-
</select>
40-
</div>
41-
<#if signaturePurposeEnabled>
42-
<div style="width: 90%; display: inline-block; padding-top: 10px">
43-
<div id="purposeTitle">${msg("purpose")}</div>
44-
<textarea id="signaturePurposeText" name="signaturePurposeText" tabindex="0" rows="1" cols="50" style="width: 107%; height: 20px"></textarea>
45-
</div>
12+
<#if mimeType == "pdf" && signaturePosition>
13+
<div style="width: 50%; float:left; display: inline-block">
14+
<div id="position-text">${msg("document.position")}</div>
15+
<select id="signaturePlace" style="width: 95%;">
16+
<#if showOptionFirstSignature>
17+
<option value="sig1">${msg("select.sig1")}</option>
18+
</#if>
19+
<#if showOptionSecondSignature>
20+
<option value="sig2">${msg("select.sig2")}</option>
21+
</#if>
22+
<#if showOptionThirdSignature>
23+
<option value="sig3">${msg("select.sig3")}</option>
24+
</#if>
25+
<#if showOptionFourthSignature>
26+
<option value="sig4">${msg("select.sig4")}</option>
27+
</#if>
28+
<#if showOptionFifthSignature>
29+
<option value="sig5">${msg("select.sig5")}</option>
30+
</#if>
31+
<#if showOptionSixthSignature>
32+
<option value="sig6">${msg("select.sig6")}</option>
33+
</#if>
34+
</select>
35+
</div>
36+
<div style="width: 50%; display: inline-block">
37+
<div id="pageTitle">${msg("page")}</div>
38+
<select id="signaturePage" style="width: 95%;">
39+
<option value="last">${msg("page.last")}</option>
40+
<option value="first">${msg("page.first")}</option>
41+
</select>
42+
</div>
43+
<#if signaturePurposeEnabled>
44+
<div style="width: 90%; display: inline-block; padding-top: 10px">
45+
<div id="purposeTitle">${msg("purpose")}</div>
46+
<textarea id="signaturePurposeText" name="signaturePurposeText" tabindex="0" rows="1" cols="50" style="width: 107%; height: 20px"></textarea>
47+
</div>
48+
</#if>
4649
</#if>
47-
</#if>
48-
<div id="sign-component" style="width:100%;"></div>
4950
</div>
51+
52+
<div id="sign-component" style="width:100%;"></div>
53+
5054
<form id="signDialog-form" action="" method="POST">
5155
<input type="hidden" id="dataToSign" name="dataToSign" value="${base64NodeContent}" />
5256
<input type="hidden" id="signedData" name="signedData" value="" />
@@ -56,24 +60,25 @@
5660
<input type="hidden" id="nodeRef" name="nodeRef" value="${nodeRef}" />
5761
<input type="hidden" id="signerPostition" name="signerPostition" value="" />
5862
<#if signaturePurposeEnabled>
59-
<input type="hidden" id="signaturePurpose" name="signaturePurpose" value="" />
63+
<input type="hidden" id="signaturePurpose" name="signaturePurpose" value="" />
6064
</#if>
6165
<div class="bdft" style="display:none;">
6266
<input type="button" id="signDialog-ok" value="${msg("button.ok")}" />
6367
<input type="button" id="signDialog-cancel" value="${msg("button.cancel")}" />
6468
</div>
6569
</form>
66-
<#if mimeType == "pdf">
67-
<div id="button-div" class="bdft">
68-
<button type="button"
69-
id="signPosition-TMPok"
70-
class="yui-skin-lightTheme yui-button yui-skin-lightTheme"
71-
value="${msg("button.sign")}"
72-
style="height: 30px;min-width: 70px;margin: 2px;border: 1px solid #ccc;"
73-
onclick="chosePosition()">${msg("button.sign")}</button>
74-
</div>
70+
<#if mimeType == "pdf" && signaturePosition>
71+
<div id="button-div" class="bdft">
72+
<button type="button"
73+
id="signPosition-TMPok"
74+
class="yui-skin-lightTheme yui-button yui-skin-lightTheme"
75+
value="${msg("button.sign")}"
76+
style="height: 30px;min-width: 70px;margin: 2px;border: 1px solid #ccc;"
77+
onclick="chosePosition()">${msg("button.sign")}</button>
78+
</div>
7579
</#if>
7680
<script type="text/javascript">//<![CDATA[
81+
7782
var finalSignaturePosition = "${paramsPades}".replace(" ", "\t");
7883
var options = {
7984
"default": "${paramsPades}".replace(" ", "\t"),
@@ -86,12 +91,13 @@
8691
};
8792
var page = "last_page";
8893
var documentMimetype = "${mimeType}";
94+
var signatureSelectionEnabled = ${signaturePosition?c} || ${signaturePurposeEnabled?c};
8995
9096
var running = false;
9197
var loadingSignComponentInterval = null;
9298
var loadingFrameInterval = null;
9399
var signaturePurposeValue = null;
94-
100+
95101
function chosePosition() {
96102
var position = YAHOO.util.Dom.get("signaturePlace").value;
97103
var pageSelect = YAHOO.util.Dom.get("signaturePage").value;
@@ -168,7 +174,7 @@
168174
submitButton.click();
169175
}
170176
171-
if(documentMimetype != "pdf") {
177+
if(documentMimetype != "pdf" || !signatureSelectionEnabled) {
172178
var waitToLoadDOM = setInterval(function() {
173179
if(YAHOO.util.Dom.get("loading-text") != undefined) {
174180
clearInterval(waitToLoadDOM);

esign-cert-share/src/main/amp/config/alfresco/web-extension/site-webscripts/es/keensoft/sign/sign-dialog.get.js

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
function main() {
22

3-
//Get Base64 content
3+
// Get Base64 content
44
var base64NodeContentResponse = jsonConnection("/keensoft/sign/base64-node-content?nodeRef=" + args.nodeRef);
55
if(base64NodeContentResponse == null) {
66
model.jsonError = true;
77
return;
88
}
99

10-
//Get signature parameters
10+
// Get signature parameters
1111
var signatureParams = jsonConnection("/keensoft/sign/signature-params");
1212
model.paramsPades = signatureParams.paramsPades;
1313
model.paramsCades = signatureParams.paramsCades;
@@ -20,7 +20,15 @@ function main() {
2020
model.sixthSignaturePosition = signatureParams.sixthSignaturePosition;
2121
model.signaturePurposeEnabled = signatureParams.signaturePurposeEnabled;
2222

23-
//Set available signature places
23+
// Detect if no position selection is configured
24+
model.signaturePosition = model.firstSignaturePosition != "" ||
25+
model.secondSignaturePosition != "" ||
26+
model.thirdSignaturePosition != "" ||
27+
model.fourthSignaturePosition != "" ||
28+
model.fifthSignaturePosition != "" ||
29+
model.sixthSignaturePosition != "";
30+
31+
// Set available signature places
2432
var aspects = jsonConnection("/slingshot/doclib/aspects/node/" + args.nodeRef.replace(":/", ""));
2533
model.showOptionFirstSignature = (aspects.current.indexOf("sign:firstSignature") == -1);
2634
model.showOptionSecondSignature = (aspects.current.indexOf("sign:secondSignature") == -1);
@@ -29,7 +37,7 @@ function main() {
2937
model.showOptionFifthSignature = (aspects.current.indexOf("sign:fifthSignature") == -1);
3038
model.showOptionSixthSignature = (aspects.current.indexOf("sign:sixthSignature") == -1);
3139

32-
//Fill up the model with data
40+
// Fill up the model with data
3341
model.base64NodeContent = base64NodeContentResponse.base64NodeContent;
3442
model.mimeType = args.mimeType;
3543
model.nodeRef = args.nodeRef;

esign-cert-share/src/main/resources/META-INF/share-config-custom.xml

+8-17
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,7 @@
8888
<param name="failureMessage">message.sign-action.failure</param>
8989
<param name="mimeType">pdf</param>
9090
<evaluator>evaluator.doclib.action.pdfMimetype</evaluator>
91-
<evaluator negate="true">evaluator.doclib.action.allSigners
92-
</evaluator>
93-
<!-- This lines are commented in order for the action to be displayed
94-
for multiple signing -->
95-
96-
<!-- <evaluator negate="true">evaluator.doclib.action.signed</evaluator>
97-
<evaluator negate="true">evaluator.doclib.action.signature</evaluator> -->
91+
<evaluator negate="true">evaluator.doclib.action.allSigners</evaluator>
9892
</action>
9993

10094
<action id="sign-action-other" icon="sign-action-icon" type="javascript"
@@ -107,22 +101,19 @@
107101
<param name="failureMessage">message.sign-action.failure</param>
108102
<param name="mimeType">other</param>
109103
<evaluator>evaluator.doclib.action.signOtherDocs</evaluator>
110-
<evaluator negate="true">evaluator.doclib.action.pdfMimetype
111-
</evaluator>
112-
<evaluator negate="true">evaluator.doclib.action.signed
113-
</evaluator>
114-
<evaluator negate="true">evaluator.doclib.action.signature
115-
</evaluator>
104+
<evaluator negate="true">evaluator.doclib.action.pdfMimetype</evaluator>
105+
<evaluator negate="true">evaluator.doclib.action.signed</evaluator>
106+
<evaluator negate="true">evaluator.doclib.action.signature</evaluator>
116107
</action>
117108
</actions>
118109
<actionGroups>
119110
<actionGroup id="document-browse">
120-
<action index="400" id="sign-action-pdf" />
121-
<action index="401" id="sign-action-other" />
111+
<action index="600" id="sign-action-pdf" />
112+
<action index="600" id="sign-action-other" />
122113
</actionGroup>
123114
<actionGroup id="document-details">
124-
<action index="400" id="sign-action-pdf" />
125-
<action index="400" id="sign-action-other" />
115+
<action index="600" id="sign-action-pdf" />
116+
<action index="600" id="sign-action-other" />
126117
</actionGroup>
127118
</actionGroups>
128119
</config>

0 commit comments

Comments
 (0)