Project

General

Profile

Elektronische Signatur » History » Version 5

Carsten Rose, 12.04.2021 18:42

1 1 Carsten Rose
h1. Elektronische Signatur
2
3
* Person A loest im Tool eine Email aus, die an Person B gesendet wird.
4
* Die Email enthaelt eine URL mit einem zeitlich beschraenktes Einmal-Token.
5
* Person B empfaengt die Email und klickt auf dem Link.
6
* Bei Aufruf der URL wird entweder ein Form geoeffnet (um weitere Information abzufragen) oder der Link loest direkt eine Action aus das etwas bestaetigt wird.
7
8
9 2 Carsten Rose
h1. Approval Mail ausloesen - Page: application
10 1 Carsten Rose
11 2 Carsten Rose
* QFQ Record: a) Logik um die Approval Mail auszuloesen, b) Den Link anzubieten um das versenden zu starten.
12 1 Carsten Rose
<pre>
13
#
14
# {{action:SE::w}}'='sendApprovalMail'
15
# {{appId:RE}}
16
#
17 2 Carsten Rose
18
# Logic to send email with AUTH token
19 1 Carsten Rose
10 {
20
  # Take care that the SIP variable is cleared after first use.
21
  sql = SELECT '' FROM (SELECT '') AS fake WHERE '{{action:SE::w}}'='sendApprovalMail'
22
23
  # Be sure an auth token is defined
24
  20.sql = UPDATE Application SET auth='{{random:V}}' WHERE auth='' AND id={{appId:S}}
25
26
  30 {
27
    sql = SELECT n.text AS _body
28
                  n.title AS _subject
29
                  app.auth AS _auth
30
                  QDATE_FORMAT(app.deadline) AS _deadline
31
            FROM Note AS n, Application AS app
32
            WHERE n.reference='Email Template: Approve Mail'
33
              AND app.id={{appId:R}}
34
35
    40.sql = SELECT 'to:<email>|from:<email>|subject:{{subject:R}}|body:{{body}}|grid:<grid>|xid:<xId>' AS _sendmail
36
  }
37
38
}
39
40 2 Carsten Rose
# Logic to show application status
41
100 {
42 1 Carsten Rose
43 2 Carsten Rose
  sql = SELECT ...
44 1 Carsten Rose
45 2 Carsten Rose
  # Link to initiate email
46
  110.sql = SELECT 'p:{{pageAlias:T}}&action=sendApprovalMail&appId={{appId:R}}|q:An approval mail will be sent|s|b:Send mail' AS _link
47
            FROM Application AS app 
48
            WHERE app.id={{appId:R}}
49
}
50
</pre>
51 1 Carsten Rose
52 3 Carsten Rose
* Email Template (z.B. Note Record) mit Variablen. Achtung: evtl darf der Text nicht HTML SpecialChar kodiert werden.
53 1 Carsten Rose
<pre>
54
Dear {{name:R}}
55
...
56
Please click {{baseUrl:Y}}/index.php?id=confirmation&auth={{auth:R}}.
57
...
58
The applicants deadline is {{deadline:R}}.
59
...
60
</pre>
61
62 2 Carsten Rose
h1. Approval - Page: approval
63 1 Carsten Rose
64 3 Carsten Rose
 * Seite wird nicht im Menu angezeigt.
65
 * Seite ist ohne Zugriffsbeschraenkung (fe group) aufrufbar.
66 1 Carsten Rose
<pre>
67 3 Carsten Rose
#
68
# {{auth:CE:alnumx}}
69 5 Carsten Rose
# {{action:SE}} = 'approve'
70 3 Carsten Rose
#
71 1 Carsten Rose
72 5 Carsten Rose
10.sql = SELECT '{{auth:CE:alnumx}}' AS _auth
73
                '{{appId:S0}}' AS _appId
74
                '{{action:SE::w}}' AS _action
75 1 Carsten Rose
76 5 Carsten Rose
# User calls this page with AUTH token: offer button 'approve' and 'deny'
77
20 {
78
  sql = SELECT '' FROM (SELECT '') AS fake WHERE '{{auth:R}}'!=''
79
80
  30 {
81
    # Gather facts 
82
    sql = SELECT app.id AS _appId
83
                 , QDATE_FORMAT(app.deadline) AS _deadline
84
                 , app.deadline<NOW() AS _deadlineExpired
85
                 , ISNULL(app.reviewTs) AS _reviewOpen
86
             FROM Application AS app 
87
             WHERE '{{auth:R}}'=app.auth
88
89
    altsql = SELECT Sorry, token unknown. Maybe the URL is broken.
90
91
    40 {
92
      sql = SELECT 'Applicant: ', app.name, ', ', app.firstName, '<br>'
93 1 Carsten Rose
                 , 'Applicaton: ', app.title
94
                 , 'p:{{pageAlias:T}}&action=approve&appId={{appId:R}}|t:Approve|s|b' AS _link, ' '
95
                 , 'p:{{pageAlias:T}}&action=deny&appId={{appId:R}}|t:Deny|s|b' AS _link
96 5 Carsten Rose
              FROM Application AS app
97
              WHERE app.id={{appId:R}}
98
                AND !{{deadlineExpired:R}} 
99
                AND {{reviewOpen:R}}
100
101
       # Detailed message whats wrong.
102
       altsql = SELECT IF({{deadlineExpired:R}},'Deadline expired: {{deadline:R}}','') 
103
                       IF({{reviewOpen:R}},'','The approval/deny has already been done.') 
104
    }
105 1 Carsten Rose
  }
106
}
107
108 5 Carsten Rose
# User clicked on 'approve' or 'deny'
109
50 {
110
  sql = SELECT ISNULL(app.reviewTs) AS _reviewOpen
111
          FROM Application AS app 
112
          WHERE app.id={{appId:R}}
113
            AND '{{action:R}}'!=''
114
 
115
  60 {
116
    sql = SELECT ''
117
            FROM Application 
118
            WHERE app.id={{appId:R}} AND ISNULL(reviewTs)
119
    althead = The approval/deny has already been done.
120
    tail = Thanks for the decission.
121 1 Carsten Rose
122 5 Carsten Rose
    70 {
123
      sql = UPDATE Application SET reviewDecission={{action:R}}, reviewTs=NOW()
124
            WHERE app.id={{appId:R}} AND ISNULL(reviewTs)
125
    }
126 3 Carsten Rose
127 5 Carsten Rose
    # Send notification mail to applicant
128
    80 {
129
      sql = SELECT '....' AS _sendmail
130
    }
131
  } 
132
}
133
</pre>