djgentelella 0.4.6__py3-none-any.whl → 0.4.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- djgentelella/__init__.py +1 -1
- djgentelella/firmador_digital/consumers/sign.py +9 -2
- djgentelella/serializers/firmador_digital.py +4 -1
- djgentelella/static/gentelella/js/base/digital_signature.js +110 -34
- djgentelella/static/gentelella/js/base.js +110 -34
- djgentelella/static/gentelella/js/widgets.js +5 -0
- djgentelella/templates/gentelella/widgets/digital_signature.html +1 -1
- djgentelella/widgets/digital_signature.py +5 -21
- {djgentelella-0.4.6.dist-info → djgentelella-0.4.8.dist-info}/METADATA +1 -1
- {djgentelella-0.4.6.dist-info → djgentelella-0.4.8.dist-info}/RECORD +14 -14
- {djgentelella-0.4.6.dist-info → djgentelella-0.4.8.dist-info}/AUTHORS +0 -0
- {djgentelella-0.4.6.dist-info → djgentelella-0.4.8.dist-info}/LICENSE.txt +0 -0
- {djgentelella-0.4.6.dist-info → djgentelella-0.4.8.dist-info}/WHEEL +0 -0
- {djgentelella-0.4.6.dist-info → djgentelella-0.4.8.dist-info}/top_level.txt +0 -0
djgentelella/__init__.py
CHANGED
|
@@ -38,16 +38,18 @@ class SignConsumer(JsonWebsocketConsumer):
|
|
|
38
38
|
|
|
39
39
|
def disconnect(self, close_code):
|
|
40
40
|
super().disconnect(close_code)
|
|
41
|
+
logger.info(f"Disconnect {close_code}")
|
|
41
42
|
|
|
42
43
|
def receive_json(self, content, **kwargs):
|
|
43
44
|
"""
|
|
44
45
|
Called with decoded JSON content.
|
|
45
46
|
"""
|
|
47
|
+
socket_id = ""
|
|
46
48
|
try:
|
|
47
49
|
serializer = self.get_serializer(content)
|
|
48
50
|
|
|
49
51
|
if serializer.is_valid():
|
|
50
|
-
|
|
52
|
+
socket_id = serializer.validated_data['socket_id']
|
|
51
53
|
match serializer.validated_data["action"]:
|
|
52
54
|
case "initial_signature":
|
|
53
55
|
self.do_initial_signature(serializer)
|
|
@@ -63,6 +65,7 @@ class SignConsumer(JsonWebsocketConsumer):
|
|
|
63
65
|
"details": serializer.errors,
|
|
64
66
|
"status": 400,
|
|
65
67
|
"code": 11,
|
|
68
|
+
'socket_id': serializer.data.get('socket_id')
|
|
66
69
|
})
|
|
67
70
|
logger.error("Invalid request.")
|
|
68
71
|
|
|
@@ -74,6 +77,7 @@ class SignConsumer(JsonWebsocketConsumer):
|
|
|
74
77
|
"details": str(e),
|
|
75
78
|
"status": 500,
|
|
76
79
|
"code": 999,
|
|
80
|
+
"socket_id": socket_id
|
|
77
81
|
})
|
|
78
82
|
logger.error("An unexpected error occurred.", exc_info=e)
|
|
79
83
|
|
|
@@ -87,6 +91,8 @@ class SignConsumer(JsonWebsocketConsumer):
|
|
|
87
91
|
docsettings=serializer.validated_data["docsettings"],
|
|
88
92
|
)
|
|
89
93
|
|
|
94
|
+
response['socket_id'] = serializer.validated_data['socket_id']
|
|
95
|
+
|
|
90
96
|
# remove signer image
|
|
91
97
|
if "imageIcon" in response:
|
|
92
98
|
del response["imageIcon"]
|
|
@@ -103,7 +109,8 @@ class SignConsumer(JsonWebsocketConsumer):
|
|
|
103
109
|
signer = RemoteSignerClient(self.scope["user"])
|
|
104
110
|
data = dict(serializer.validated_data)
|
|
105
111
|
response = signer.complete_signature(data)
|
|
106
|
-
self.send_json({"result": response
|
|
112
|
+
self.send_json({"result": response,
|
|
113
|
+
'socket_id': serializer.validated_data['socket_id']})
|
|
107
114
|
except Exception as e:
|
|
108
115
|
logger.error("Complete the signature fail", exc_info=e)
|
|
109
116
|
|
|
@@ -69,7 +69,8 @@ class RequestInitialDoc(serializers.Serializer):
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
class WSRequest(serializers.Serializer):
|
|
72
|
-
action = serializers.CharField()
|
|
72
|
+
action = serializers.CharField(required=True)
|
|
73
|
+
socket_id = serializers.CharField(required=True)
|
|
73
74
|
|
|
74
75
|
|
|
75
76
|
class CardSerializer(serializers.Serializer):
|
|
@@ -88,6 +89,7 @@ class SignatureSerializer(serializers.Serializer):
|
|
|
88
89
|
|
|
89
90
|
class InitialSignatureSerializer(serializers.Serializer):
|
|
90
91
|
action = serializers.CharField()
|
|
92
|
+
socket_id = serializers.CharField(required=True)
|
|
91
93
|
docsettings = DocumentSettingsSerializer()
|
|
92
94
|
card = CardSerializer()
|
|
93
95
|
logo_url = serializers.CharField(required=False, allow_null=True, allow_blank=True)
|
|
@@ -96,6 +98,7 @@ class InitialSignatureSerializer(serializers.Serializer):
|
|
|
96
98
|
|
|
97
99
|
class CompleteSignatureSerializer(serializers.Serializer):
|
|
98
100
|
action = serializers.CharField()
|
|
101
|
+
socket_id = serializers.CharField(required=True)
|
|
99
102
|
documentid = serializers.CharField()
|
|
100
103
|
certificate = serializers.CharField()
|
|
101
104
|
signature = SignatureSerializer()
|
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
///////////////////////////////////////////////
|
|
2
2
|
// Init widgets digital signature
|
|
3
3
|
///////////////////////////////////////////////
|
|
4
|
+
var socket_connections = {};
|
|
5
|
+
var socket_manager_instances = {};
|
|
6
|
+
const max_close_inicialice = 5;
|
|
7
|
+
var count_close_inicialice=0;
|
|
8
|
+
|
|
9
|
+
// Configuración del MutationObserver
|
|
10
|
+
const observer = new MutationObserver((mutations) => {
|
|
11
|
+
mutations.forEach((mutation) => {
|
|
12
|
+
if (mutation.type === 'attributes' && mutation.attributeName === 'data-port') {
|
|
13
|
+
let port = mutation.target.getAttribute('data-port');
|
|
14
|
+
mutation.target.setAttribute("href",
|
|
15
|
+
"firmador:" + window.location.protocol + "//" + window.location.host + "#" + port);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
build_cors_headers = function(instance){
|
|
21
|
+
let port = instance.getAttribute('data-port');
|
|
22
|
+
instance.setAttribute("href", "firmador:" + window.location.protocol + "//" + window.location.host + "#" + port);
|
|
23
|
+
observer.observe(instance, { attributes: true });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
build_ws_url = function(base){
|
|
27
|
+
return base;
|
|
28
|
+
}
|
|
29
|
+
|
|
4
30
|
build_digital_signature = function (instance) {
|
|
5
31
|
|
|
6
32
|
const widgetId = instance.getAttribute("id");
|
|
7
|
-
const url_ws = instance.getAttribute("data-ws-url");
|
|
33
|
+
const url_ws = build_ws_url(instance.getAttribute("data-ws-url"));
|
|
8
34
|
const container = instance.closest(".widget-digital-signature");
|
|
9
35
|
const container_tag = `container-${widgetId}`;
|
|
10
36
|
const doc_instance = {
|
|
@@ -475,25 +501,77 @@ function responseManageTypeData(instance, err_json_fn, error_text_fn) {
|
|
|
475
501
|
}
|
|
476
502
|
}
|
|
477
503
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
}
|
|
504
|
+
class SocketManager {
|
|
505
|
+
constructor(url, signatureManager, instance) {
|
|
506
|
+
this.url=url;
|
|
507
|
+
this.signatureManager=signatureManager;
|
|
508
|
+
this.instance = instance;
|
|
509
|
+
|
|
510
|
+
this.connect();
|
|
511
|
+
}
|
|
512
|
+
connect(){
|
|
513
|
+
socket_manager_instances[this.instance.socket_id] = this.instance;
|
|
514
|
+
if(!socket_connections.hasOwnProperty(this.url)){
|
|
515
|
+
let ws = new WebSocket(this.url);
|
|
516
|
+
ws.onerror=this.fn_error(this);
|
|
517
|
+
ws.onclose=this.fn_close(this);
|
|
518
|
+
ws.onopen=this.fn_open(this);
|
|
519
|
+
ws.onmessage=this.fn_messages(this);
|
|
520
|
+
socket_connections[this.url]=ws;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
fn_error(element){
|
|
524
|
+
return (event) => {
|
|
525
|
+
// console.error("WebSocket error");
|
|
526
|
+
element.signatureManager.hideLoading();
|
|
527
|
+
alertSimple(errorInterpreter(3), gettext("Error"), "error");
|
|
528
|
+
element.signatureManager.socketError = true;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
fn_close(element){
|
|
532
|
+
return (event) => {
|
|
533
|
+
console.warn("WebSocket cerrado "+event.type);
|
|
534
|
+
Reflect.deleteProperty(socket_connections, event.currentTarget.url);
|
|
535
|
+
if(count_close_inicialice < max_close_inicialice){
|
|
536
|
+
count_close_inicialice += 1;
|
|
537
|
+
element.instance.inicialize();
|
|
538
|
+
}
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
fn_open(element){
|
|
542
|
+
return (event) => {
|
|
543
|
+
// console.log("WebSocket conectado");
|
|
544
|
+
element.signatureManager.socket_error = false;
|
|
545
|
+
count_close_inicialice=0;
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
fn_messages(element){
|
|
549
|
+
return (event)=>{
|
|
550
|
+
try {
|
|
551
|
+
const data = JSON.parse(event.data);
|
|
552
|
+
if (data.hasOwnProperty("socket_id") && socket_manager_instances.hasOwnProperty(data["socket_id"])){
|
|
553
|
+
socket_manager_instances[data["socket_id"]].receive_json(data);
|
|
554
|
+
}else{
|
|
555
|
+
console.error("Socket id not found");
|
|
556
|
+
}
|
|
557
|
+
} catch (err) {
|
|
558
|
+
console.error("Error al parsear mensaje WS:", err);
|
|
559
|
+
}
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
send(str){
|
|
563
|
+
if(!socket_connections.hasOwnProperty(this.url)){
|
|
564
|
+
this.connect();
|
|
565
|
+
}else{
|
|
566
|
+
if(socket_connections[this.url].readyState != WebSocket.OPEN){
|
|
567
|
+
Reflect.deleteProperty(socket_connections, this.url);
|
|
568
|
+
this.connect();
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
if(socket_connections.hasOwnProperty(this.url)){
|
|
572
|
+
socket_connections[this.url].send(str);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
497
575
|
}
|
|
498
576
|
|
|
499
577
|
function callFetch(instance) {
|
|
@@ -545,6 +623,9 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
|
|
|
545
623
|
callFetch(instance);
|
|
546
624
|
},
|
|
547
625
|
"sign": function (data) {
|
|
626
|
+
if(data.hasOwnProperty("socket_id")){
|
|
627
|
+
Reflect.deleteProperty(data, "socket_id");
|
|
628
|
+
}
|
|
548
629
|
let json = JSON.stringify(data);
|
|
549
630
|
let manager = docmanager;
|
|
550
631
|
|
|
@@ -585,21 +666,16 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
|
|
|
585
666
|
}
|
|
586
667
|
}
|
|
587
668
|
|
|
669
|
+
const generateRandomString = () => {
|
|
670
|
+
return Math.floor(Math.random() * Date.now()).toString(36);
|
|
671
|
+
};
|
|
672
|
+
|
|
588
673
|
function FirmadorLibreWS(docmanager, url, signatureManager) {
|
|
589
674
|
var firmador = {
|
|
590
675
|
"url": url,
|
|
591
676
|
"websocket": null,
|
|
592
677
|
"firmador_url": "http://localhost:3516",
|
|
593
|
-
"
|
|
594
|
-
return function (event) {
|
|
595
|
-
try {
|
|
596
|
-
const data = JSON.parse(event.data);
|
|
597
|
-
instance.receive_json(data);
|
|
598
|
-
} catch (err) {
|
|
599
|
-
console.error("Error al parsear mensaje WS:", err);
|
|
600
|
-
}
|
|
601
|
-
};
|
|
602
|
-
},
|
|
678
|
+
"socket_id": generateRandomString(),
|
|
603
679
|
"receive_json": function (data) {
|
|
604
680
|
// validate socket errors
|
|
605
681
|
if (data.result === false && data.error) {
|
|
@@ -663,15 +739,15 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
|
|
|
663
739
|
},
|
|
664
740
|
|
|
665
741
|
"inicialize": function () {
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
this.websocket.onmessage = this.trans_received(this);
|
|
742
|
+
this.websocket = new SocketManager(url, signatureManager, this);
|
|
743
|
+
|
|
669
744
|
},
|
|
670
745
|
"local_done": function (data) {
|
|
671
746
|
// console.log("local_done", data);
|
|
672
747
|
},
|
|
673
748
|
"sign": function (data) {
|
|
674
749
|
data["action"] = "initial_signature";
|
|
750
|
+
data["socket_id"] = this.socket_id;
|
|
675
751
|
if (data.card !== undefined) {
|
|
676
752
|
this.websocket.send(JSON.stringify(data));
|
|
677
753
|
signatureManager.showLoading();
|
|
@@ -682,7 +758,7 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
|
|
|
682
758
|
},
|
|
683
759
|
"complete_sign": function (data) {
|
|
684
760
|
data["action"] = "complete_signature";
|
|
685
|
-
|
|
761
|
+
data["socket_id"] = this.socket_id;
|
|
686
762
|
try {
|
|
687
763
|
this.websocket.send(JSON.stringify(data));
|
|
688
764
|
} catch (e) {
|
|
@@ -2251,10 +2251,36 @@ function getMediaRecord(element, mediatype){
|
|
|
2251
2251
|
///////////////////////////////////////////////
|
|
2252
2252
|
// Init widgets digital signature
|
|
2253
2253
|
///////////////////////////////////////////////
|
|
2254
|
+
var socket_connections = {};
|
|
2255
|
+
var socket_manager_instances = {};
|
|
2256
|
+
const max_close_inicialice = 5;
|
|
2257
|
+
var count_close_inicialice=0;
|
|
2258
|
+
|
|
2259
|
+
// Configuración del MutationObserver
|
|
2260
|
+
const observer = new MutationObserver((mutations) => {
|
|
2261
|
+
mutations.forEach((mutation) => {
|
|
2262
|
+
if (mutation.type === 'attributes' && mutation.attributeName === 'data-port') {
|
|
2263
|
+
let port = mutation.target.getAttribute('data-port');
|
|
2264
|
+
mutation.target.setAttribute("href",
|
|
2265
|
+
"firmador:" + window.location.protocol + "//" + window.location.host + "#" + port);
|
|
2266
|
+
}
|
|
2267
|
+
});
|
|
2268
|
+
});
|
|
2269
|
+
|
|
2270
|
+
build_cors_headers = function(instance){
|
|
2271
|
+
let port = instance.getAttribute('data-port');
|
|
2272
|
+
instance.setAttribute("href", "firmador:" + window.location.protocol + "//" + window.location.host + "#" + port);
|
|
2273
|
+
observer.observe(instance, { attributes: true });
|
|
2274
|
+
}
|
|
2275
|
+
|
|
2276
|
+
build_ws_url = function(base){
|
|
2277
|
+
return base;
|
|
2278
|
+
}
|
|
2279
|
+
|
|
2254
2280
|
build_digital_signature = function (instance) {
|
|
2255
2281
|
|
|
2256
2282
|
const widgetId = instance.getAttribute("id");
|
|
2257
|
-
const url_ws = instance.getAttribute("data-ws-url");
|
|
2283
|
+
const url_ws = build_ws_url(instance.getAttribute("data-ws-url"));
|
|
2258
2284
|
const container = instance.closest(".widget-digital-signature");
|
|
2259
2285
|
const container_tag = `container-${widgetId}`;
|
|
2260
2286
|
const doc_instance = {
|
|
@@ -2725,25 +2751,77 @@ function responseManageTypeData(instance, err_json_fn, error_text_fn) {
|
|
|
2725
2751
|
}
|
|
2726
2752
|
}
|
|
2727
2753
|
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
}
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
}
|
|
2754
|
+
class SocketManager {
|
|
2755
|
+
constructor(url, signatureManager, instance) {
|
|
2756
|
+
this.url=url;
|
|
2757
|
+
this.signatureManager=signatureManager;
|
|
2758
|
+
this.instance = instance;
|
|
2759
|
+
|
|
2760
|
+
this.connect();
|
|
2761
|
+
}
|
|
2762
|
+
connect(){
|
|
2763
|
+
socket_manager_instances[this.instance.socket_id] = this.instance;
|
|
2764
|
+
if(!socket_connections.hasOwnProperty(this.url)){
|
|
2765
|
+
let ws = new WebSocket(this.url);
|
|
2766
|
+
ws.onerror=this.fn_error(this);
|
|
2767
|
+
ws.onclose=this.fn_close(this);
|
|
2768
|
+
ws.onopen=this.fn_open(this);
|
|
2769
|
+
ws.onmessage=this.fn_messages(this);
|
|
2770
|
+
socket_connections[this.url]=ws;
|
|
2771
|
+
}
|
|
2772
|
+
}
|
|
2773
|
+
fn_error(element){
|
|
2774
|
+
return (event) => {
|
|
2775
|
+
// console.error("WebSocket error");
|
|
2776
|
+
element.signatureManager.hideLoading();
|
|
2777
|
+
alertSimple(errorInterpreter(3), gettext("Error"), "error");
|
|
2778
|
+
element.signatureManager.socketError = true;
|
|
2779
|
+
}
|
|
2780
|
+
}
|
|
2781
|
+
fn_close(element){
|
|
2782
|
+
return (event) => {
|
|
2783
|
+
console.warn("WebSocket cerrado "+event.type);
|
|
2784
|
+
Reflect.deleteProperty(socket_connections, event.currentTarget.url);
|
|
2785
|
+
if(count_close_inicialice < max_close_inicialice){
|
|
2786
|
+
count_close_inicialice += 1;
|
|
2787
|
+
element.instance.inicialize();
|
|
2788
|
+
}
|
|
2789
|
+
};
|
|
2790
|
+
}
|
|
2791
|
+
fn_open(element){
|
|
2792
|
+
return (event) => {
|
|
2793
|
+
// console.log("WebSocket conectado");
|
|
2794
|
+
element.signatureManager.socket_error = false;
|
|
2795
|
+
count_close_inicialice=0;
|
|
2796
|
+
};
|
|
2797
|
+
}
|
|
2798
|
+
fn_messages(element){
|
|
2799
|
+
return (event)=>{
|
|
2800
|
+
try {
|
|
2801
|
+
const data = JSON.parse(event.data);
|
|
2802
|
+
if (data.hasOwnProperty("socket_id") && socket_manager_instances.hasOwnProperty(data["socket_id"])){
|
|
2803
|
+
socket_manager_instances[data["socket_id"]].receive_json(data);
|
|
2804
|
+
}else{
|
|
2805
|
+
console.error("Socket id not found");
|
|
2806
|
+
}
|
|
2807
|
+
} catch (err) {
|
|
2808
|
+
console.error("Error al parsear mensaje WS:", err);
|
|
2809
|
+
}
|
|
2810
|
+
};
|
|
2811
|
+
}
|
|
2812
|
+
send(str){
|
|
2813
|
+
if(!socket_connections.hasOwnProperty(this.url)){
|
|
2814
|
+
this.connect();
|
|
2815
|
+
}else{
|
|
2816
|
+
if(socket_connections[this.url].readyState != WebSocket.OPEN){
|
|
2817
|
+
Reflect.deleteProperty(socket_connections, this.url);
|
|
2818
|
+
this.connect();
|
|
2819
|
+
}
|
|
2820
|
+
}
|
|
2821
|
+
if(socket_connections.hasOwnProperty(this.url)){
|
|
2822
|
+
socket_connections[this.url].send(str);
|
|
2823
|
+
}
|
|
2824
|
+
}
|
|
2747
2825
|
}
|
|
2748
2826
|
|
|
2749
2827
|
function callFetch(instance) {
|
|
@@ -2795,6 +2873,9 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
|
|
|
2795
2873
|
callFetch(instance);
|
|
2796
2874
|
},
|
|
2797
2875
|
"sign": function (data) {
|
|
2876
|
+
if(data.hasOwnProperty("socket_id")){
|
|
2877
|
+
Reflect.deleteProperty(data, "socket_id");
|
|
2878
|
+
}
|
|
2798
2879
|
let json = JSON.stringify(data);
|
|
2799
2880
|
let manager = docmanager;
|
|
2800
2881
|
|
|
@@ -2835,21 +2916,16 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
|
|
|
2835
2916
|
}
|
|
2836
2917
|
}
|
|
2837
2918
|
|
|
2919
|
+
const generateRandomString = () => {
|
|
2920
|
+
return Math.floor(Math.random() * Date.now()).toString(36);
|
|
2921
|
+
};
|
|
2922
|
+
|
|
2838
2923
|
function FirmadorLibreWS(docmanager, url, signatureManager) {
|
|
2839
2924
|
var firmador = {
|
|
2840
2925
|
"url": url,
|
|
2841
2926
|
"websocket": null,
|
|
2842
2927
|
"firmador_url": "http://localhost:3516",
|
|
2843
|
-
"
|
|
2844
|
-
return function (event) {
|
|
2845
|
-
try {
|
|
2846
|
-
const data = JSON.parse(event.data);
|
|
2847
|
-
instance.receive_json(data);
|
|
2848
|
-
} catch (err) {
|
|
2849
|
-
console.error("Error al parsear mensaje WS:", err);
|
|
2850
|
-
}
|
|
2851
|
-
};
|
|
2852
|
-
},
|
|
2928
|
+
"socket_id": generateRandomString(),
|
|
2853
2929
|
"receive_json": function (data) {
|
|
2854
2930
|
// validate socket errors
|
|
2855
2931
|
if (data.result === false && data.error) {
|
|
@@ -2913,15 +2989,15 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
|
|
|
2913
2989
|
},
|
|
2914
2990
|
|
|
2915
2991
|
"inicialize": function () {
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
this.websocket.onmessage = this.trans_received(this);
|
|
2992
|
+
this.websocket = new SocketManager(url, signatureManager, this);
|
|
2993
|
+
|
|
2919
2994
|
},
|
|
2920
2995
|
"local_done": function (data) {
|
|
2921
2996
|
// console.log("local_done", data);
|
|
2922
2997
|
},
|
|
2923
2998
|
"sign": function (data) {
|
|
2924
2999
|
data["action"] = "initial_signature";
|
|
3000
|
+
data["socket_id"] = this.socket_id;
|
|
2925
3001
|
if (data.card !== undefined) {
|
|
2926
3002
|
this.websocket.send(JSON.stringify(data));
|
|
2927
3003
|
signatureManager.showLoading();
|
|
@@ -2932,7 +3008,7 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
|
|
|
2932
3008
|
},
|
|
2933
3009
|
"complete_sign": function (data) {
|
|
2934
3010
|
data["action"] = "complete_signature";
|
|
2935
|
-
|
|
3011
|
+
data["socket_id"] = this.socket_id;
|
|
2936
3012
|
try {
|
|
2937
3013
|
this.websocket.send(JSON.stringify(data));
|
|
2938
3014
|
} catch (e) {
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
<li>
|
|
126
126
|
<a class="small"
|
|
127
127
|
title="{% trans 'Run Firmador Libre' %}"
|
|
128
|
-
href="firmador:
|
|
128
|
+
href="firmador:localhost" data-widget="FirmadorCORS" data-port="3516">
|
|
129
129
|
{% trans 'Run app' %}
|
|
130
130
|
<i class="fa fa-cog" aria-hidden="true"></i>
|
|
131
131
|
</a>
|
|
@@ -22,15 +22,13 @@ class DigitalSignatureInput(HiddenInput, ValueDSParser):
|
|
|
22
22
|
def is_hidden(self):
|
|
23
23
|
return True
|
|
24
24
|
|
|
25
|
-
def __init__(self, attrs=None, extraskwargs=True,
|
|
25
|
+
def __init__(self, attrs=None, extraskwargs=True,
|
|
26
26
|
title=None, render_basename=None, icon_url=None,
|
|
27
27
|
extra_render_args=None,
|
|
28
28
|
default_page="first"):
|
|
29
29
|
attrs = attrs or {}
|
|
30
|
-
attrs['data-ws-url'] = ws_url
|
|
31
|
-
attrs['cors'] = cors
|
|
32
30
|
attrs['title'] = title
|
|
33
|
-
|
|
31
|
+
attrs['data-ws-url'] = settings.FIRMADOR_WS_URL
|
|
34
32
|
self.render_basename = render_basename
|
|
35
33
|
self.icon_url = icon_url
|
|
36
34
|
self.extra_render_args = extra_render_args or []
|
|
@@ -40,31 +38,17 @@ class DigitalSignatureInput(HiddenInput, ValueDSParser):
|
|
|
40
38
|
if self.render_basename is None:
|
|
41
39
|
logger.warning(
|
|
42
40
|
"No base name for DigitalSignatureInput, this will generate a 500 error in the future")
|
|
43
|
-
self.validate_attrs(attrs,
|
|
41
|
+
self.validate_attrs(attrs, default_page)
|
|
44
42
|
|
|
45
43
|
if extraskwargs:
|
|
46
44
|
attrs = update_kwargs(
|
|
47
45
|
attrs, self.__class__.__name__, )
|
|
48
46
|
super().__init__(attrs)
|
|
49
47
|
|
|
50
|
-
def validate_attrs(self, attrs,
|
|
51
|
-
if not ws_url:
|
|
52
|
-
if not ws_url and settings.FIRMADOR_WS_URL:
|
|
53
|
-
attrs['data-ws-url'] = settings.FIRMADOR_WS_URL
|
|
54
|
-
else:
|
|
55
|
-
raise ValueError(
|
|
56
|
-
"Must provide a ws_url in attrs of DigitalSignatureInput.")
|
|
57
|
-
|
|
58
|
-
if not cors:
|
|
59
|
-
if not cors and settings.FIRMADOR_CORS:
|
|
60
|
-
attrs['cors'] = settings.FIRMADOR_CORS
|
|
61
|
-
else:
|
|
62
|
-
raise ValueError(
|
|
63
|
-
"Must provide a cors in attrs of DigitalSignatureInput.")
|
|
48
|
+
def validate_attrs(self, attrs, default_page):
|
|
64
49
|
|
|
65
50
|
if isinstance(default_page, int) and default_page > 0:
|
|
66
|
-
attrs['data-default-page'] = str(
|
|
67
|
-
default_page)
|
|
51
|
+
attrs['data-default-page'] = str(default_page)
|
|
68
52
|
elif default_page in ["first", "last"]:
|
|
69
53
|
attrs['data-default-page'] = default_page
|
|
70
54
|
else:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: djgentelella
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.8
|
|
4
4
|
Summary: Help building extra widgets for forms and speciall methods to render forms in templates
|
|
5
5
|
Author-email: Solvosoft <info@solvosoft.com>
|
|
6
6
|
Maintainer-email: Luis Zarate Montero <luis.zarate@solvosoft.com>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
djgentelella/__init__.py,sha256=
|
|
1
|
+
djgentelella/__init__.py,sha256=gRAtlaBwC06sP2YcrcTfseRomODWB-ixPo8nyIxm0d4,73
|
|
2
2
|
djgentelella/admin.py,sha256=hFPWtRyTZWYtuKEv-SZ3r6lHw3aissX0ObqxYmxblY0,1531
|
|
3
3
|
djgentelella/apps.py,sha256=5VEbpUv4b1Jh7gCRAQCe5TvpakRyndKwafjVj0z-Xfo,153
|
|
4
4
|
djgentelella/chartjs.py,sha256=iNYoFnaIQoXsYInJFbSE2quWpjmDz5CuMKpVsvt4pRM,8572
|
|
@@ -67,7 +67,7 @@ djgentelella/firmador_digital/config/asgi_worker.py,sha256=r8CLU1L04hIZ2xCUb-l0j
|
|
|
67
67
|
djgentelella/firmador_digital/config/websocket_urls.py,sha256=tKXVD7N1qyrP_-DBBx0q1Jj5zqpYkC5XduJzwnawMRM,178
|
|
68
68
|
djgentelella/firmador_digital/consumers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
69
|
djgentelella/firmador_digital/consumers/pdf_render.py,sha256=CSfnOK0FJXKyIQ2loyjq4yQFjgwJy-CV3SMt25yyUEY,236
|
|
70
|
-
djgentelella/firmador_digital/consumers/sign.py,sha256=
|
|
70
|
+
djgentelella/firmador_digital/consumers/sign.py,sha256=wGK-b5H2ulOjdgaDPb1aR_ikjR0F54dJlxwRlZIkkoo,5484
|
|
71
71
|
djgentelella/firmador_digital/gunicorn/config_asgi.py,sha256=PZMb4ELq3Og_9jEET7DeXUYMeTAq8kSEMaKPkAknlH4,469
|
|
72
72
|
djgentelella/firmador_digital/gunicorn/config_wsgi.py,sha256=GOTN3n90aWTvjNLU_n7DOqlOZ7UH9H4vJ_4cdUM0PHE,539
|
|
73
73
|
djgentelella/forms/__init__.py,sha256=tsFtaTeLH5pOQrgAVd4xjU6w3rPskn15b9kiW9GZuH8,84
|
|
@@ -112,7 +112,7 @@ djgentelella/permission_management/objinterface.py,sha256=b4a_Fa2NsQUNVtQs_2Vbe_
|
|
|
112
112
|
djgentelella/permission_management/views.py,sha256=XWaBD3i5kN7ADcbSYz4_Bzq2n0gSaJ7eQ_i9nKLXE_c,2104
|
|
113
113
|
djgentelella/serializers/__init__.py,sha256=r-pQ1bBd-Y2V5am9Fd9FgPJCacICJvg-xuHqS8shOzQ,1307
|
|
114
114
|
djgentelella/serializers/calendar.py,sha256=57A9QOcBF6twCLJ4yC2uxhuFtolhDENpZ9Dv0sVWYQs,3461
|
|
115
|
-
djgentelella/serializers/firmador_digital.py,sha256=
|
|
115
|
+
djgentelella/serializers/firmador_digital.py,sha256=5DVNH5HFShAlc4VUkN5OBEqPMEkTRSPpRS96cfqYODM,3685
|
|
116
116
|
djgentelella/serializers/helper.py,sha256=xfBZDhI4sE0jRrtcfRFnnNtqtmMpagL2Q2uMkpFvyPQ,248
|
|
117
117
|
djgentelella/serializers/paginators.py,sha256=1KOC9uHBguc6mT9g-QVRZolE6hIxRm9T4hUhOSa0E8Q,501
|
|
118
118
|
djgentelella/serializers/selects.py,sha256=91zuRmtCy-ogSuFA_hni1E2U56wnlru8RuHch074llo,1360
|
|
@@ -142,12 +142,12 @@ djgentelella/static/gentelella/images/forward_disabled.png,sha256=7enxADzvJa3VzC
|
|
|
142
142
|
djgentelella/static/gentelella/images/forward_enabled.png,sha256=vLOxO1qvkBV2ev931iHx-VV63NjrgoTQbwtR4kdVVrA,1380
|
|
143
143
|
djgentelella/static/gentelella/images/forward_enabled_hover.png,sha256=T6LWiaYzcT2fuJAGEaZGxd8Lok3rlZerlVxiy6d647Q,1379
|
|
144
144
|
djgentelella/static/gentelella/images/loading.gif,sha256=dyCz9kckQBZKy7DpKpR3hL4xgQgnShbMue3Ao9h_lK0,30269
|
|
145
|
-
djgentelella/static/gentelella/js/base.js,sha256=
|
|
145
|
+
djgentelella/static/gentelella/js/base.js,sha256=JUaFMKl7ycsb-4NNSTddI3srvN4M_Ppt9b2NlexWvpQ,128476
|
|
146
146
|
djgentelella/static/gentelella/js/custom.js,sha256=O9GWx1FbkMYzbUSzlYw3SrfZrf9xPdMokPh91xMtdUY,14922
|
|
147
147
|
djgentelella/static/gentelella/js/datatables.js,sha256=ZmEBPhoj8jDgl_1g14J9tKtiMknyzBekp1_NqAlxjuU,13743
|
|
148
148
|
djgentelella/static/gentelella/js/obj_api_management.js,sha256=wAVqz9hp5NdJC2dxA_l3mxIeUA2N3fSXuTRADJDCyR4,32127
|
|
149
149
|
djgentelella/static/gentelella/js/permissionmanagement.js,sha256=Y6n0jRtVr6LVadA3frJ6Ec7FXeuEUS6EsZ2ZgSIj7Y0,8211
|
|
150
|
-
djgentelella/static/gentelella/js/widgets.js,sha256=
|
|
150
|
+
djgentelella/static/gentelella/js/widgets.js,sha256=aHg5mHWW3ogJOo1v5g5zthFHFQBNkrmBJcw--0UUuXY,12926
|
|
151
151
|
djgentelella/static/gentelella/js/base/api_list.js,sha256=jhhsWJ9VsZiZiHzusxMqDq9IDPbt14b3u9tTHIgLqvU,3942
|
|
152
152
|
djgentelella/static/gentelella/js/base/autocompleteSelect2.js,sha256=lAxbjsssMrkUqNRQEM0tKmLzZO1fi50k-kHCXsromGY,1216
|
|
153
153
|
djgentelella/static/gentelella/js/base/booleanFields.js,sha256=LGBu86uauuX5F1Jq_Z_T6M2R4BRNdRtgiqx20VgYJB0,1573
|
|
@@ -155,7 +155,7 @@ djgentelella/static/gentelella/js/base/calendar.js,sha256=gU_AGEWiXX0MSTb9KC6S39
|
|
|
155
155
|
djgentelella/static/gentelella/js/base/chart.js,sha256=zXJSd-hrWI-vzc-k_CRFv8Kwa2w0anBIu4Fu8gVuHdA,1567
|
|
156
156
|
djgentelella/static/gentelella/js/base/custom.widgets.js,sha256=bMcE6gNNn9AABlZNqDDV_rn7Vm3cDp-wtgQ1kmilsJI,5533
|
|
157
157
|
djgentelella/static/gentelella/js/base/dateranges_gridslider.js,sha256=TGR9Ko9MZVZGhPhe3ubvzMZcEWrlBLH2SA3E239LRyI,5571
|
|
158
|
-
djgentelella/static/gentelella/js/base/digital_signature.js,sha256=
|
|
158
|
+
djgentelella/static/gentelella/js/base/digital_signature.js,sha256=G6mgUQr4ojozSw-KxfHCq5wx9mMC0EPIK4uaaUASGpw,39274
|
|
159
159
|
djgentelella/static/gentelella/js/base/editorTinymce.js,sha256=2fT36ECHyQKLP0X74zYsSHZZ0Rqg-UywDMbG5LjJVac,1118
|
|
160
160
|
djgentelella/static/gentelella/js/base/fileupload.widget.js,sha256=MIniB9KLE8ozKuDqy5EovrZBbscqEYPMsS70ecgNB1w,10653
|
|
161
161
|
djgentelella/static/gentelella/js/base/form.common.js,sha256=Jppy687iqyTQrf_MTgCCksdESjuV-TmrcQKGLhGT1kg,9170
|
|
@@ -946,7 +946,7 @@ djgentelella/templates/gentelella/widgets/daterange.html,sha256=zD2zqX6PJ7QQ13Ux
|
|
|
946
946
|
djgentelella/templates/gentelella/widgets/daterangetime.html,sha256=Ag9z_eHHARgpmoSIJ2MXFyThtQ9bv5bpdTS0yIGu6p4,97
|
|
947
947
|
djgentelella/templates/gentelella/widgets/datetime.html,sha256=bQ5cQwTzI2bDEV6X3Y8kYuD7Q_eDaX0ypFPEE1-36iU,201
|
|
948
948
|
djgentelella/templates/gentelella/widgets/datetime_input_mask.html,sha256=iEBUOXNxJHWojdMOUrh41rrC4RZCVLu3MZXB3zaW4nc,94
|
|
949
|
-
djgentelella/templates/gentelella/widgets/digital_signature.html,sha256=
|
|
949
|
+
djgentelella/templates/gentelella/widgets/digital_signature.html,sha256=LsKTct6sYDAEZXFAENuz4VF3STDY9FFe5JNmXAnVWpo,7113
|
|
950
950
|
djgentelella/templates/gentelella/widgets/email.html,sha256=I9LYprz3wsdv__o32aJSYipzw8joukowweIVD7fBXrs,46
|
|
951
951
|
djgentelella/templates/gentelella/widgets/email_input_mask.html,sha256=iEBUOXNxJHWojdMOUrh41rrC4RZCVLu3MZXB3zaW4nc,94
|
|
952
952
|
djgentelella/templates/gentelella/widgets/file.html,sha256=RyZ49aJJ-RIIoN5Gk7qadW5qjOEhEZEK6hdTsX-P0iI,1549
|
|
@@ -1018,7 +1018,7 @@ djgentelella/views/upload.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
|
|
|
1018
1018
|
djgentelella/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1019
1019
|
djgentelella/widgets/calendar.py,sha256=hvQj1EfVuGkZKsLYL2SWHbcihUV0M1hOyxGEf76MGpc,1459
|
|
1020
1020
|
djgentelella/widgets/core.py,sha256=aUGi0f-iUzXcZDXnvsSv-n7QZTpwiQnJ6NVjwecPNds,22129
|
|
1021
|
-
djgentelella/widgets/digital_signature.py,sha256=
|
|
1021
|
+
djgentelella/widgets/digital_signature.py,sha256=aHxD-H8uVUVsIWgisDv83_Qc5hR2GhQwZx1PhWqdC00,3703
|
|
1022
1022
|
djgentelella/widgets/files.py,sha256=KBmC1QBbTmhZyTOGiziMuEd865qkMd-HFi-rtsGssc4,2347
|
|
1023
1023
|
djgentelella/widgets/helper.py,sha256=Q9EFc_ulLCu1VVdsub2m4UkunJW17KNiBncR-SDFj7U,826
|
|
1024
1024
|
djgentelella/widgets/numberknobinput.py,sha256=bTKJ8fHendEhVhAeZw0jq2PGH_Th6D3EJ9M7IrvG2m4,407
|
|
@@ -1032,9 +1032,9 @@ djgentelella/widgets/trees.py,sha256=bV6s-w1cgYahS0aNU6xBrx-aISdlzDZ23BFt3_3hAu4
|
|
|
1032
1032
|
djgentelella/widgets/wysiwyg.py,sha256=wHeMyYNVE8-lKJ06A-0DLDAcRNv3TOAOG_Wl9DYZqS0,609
|
|
1033
1033
|
djgentelella/wysiwyg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1034
1034
|
djgentelella/wysiwyg/views.py,sha256=tI7LjLhCnohdvIEOEEhB2Cu1zxRmdcOhYJJX4LBIZaA,1159
|
|
1035
|
-
djgentelella-0.4.
|
|
1036
|
-
djgentelella-0.4.
|
|
1037
|
-
djgentelella-0.4.
|
|
1038
|
-
djgentelella-0.4.
|
|
1039
|
-
djgentelella-0.4.
|
|
1040
|
-
djgentelella-0.4.
|
|
1035
|
+
djgentelella-0.4.8.dist-info/AUTHORS,sha256=HyQoO-q7oXtavpNm7jaBVv8Vxx3c7yo33xkFkt4blkY,118
|
|
1036
|
+
djgentelella-0.4.8.dist-info/LICENSE.txt,sha256=wDzqAntLQORAL6vQhVdzZyfsPVvFStZKtkct5DIZjK0,18047
|
|
1037
|
+
djgentelella-0.4.8.dist-info/METADATA,sha256=CL83r3sDU856JK462UmNRASIb4nzsqLIswEIiW7_j_k,27544
|
|
1038
|
+
djgentelella-0.4.8.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
1039
|
+
djgentelella-0.4.8.dist-info/top_level.txt,sha256=88JbODVPV-P5q7ic25yMHt_FuuizaLzMyIaegpFa7Qk,13
|
|
1040
|
+
djgentelella-0.4.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|