Elektronische Signatur » History » Version 4
Carsten Rose, 12.04.2021 17:46
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 | # {{action:SE}} = 'approved' |
||
70 | # |
||
71 | |||
72 | 10 { |
||
73 | sql = SELECT app.id AS _appId |
||
74 | FROM Application AS app |
||
75 | WHERE '{{auth:CE:alnumx}}'=app.auth |
||
76 | AND NOW()<app.deadline |
||
77 | |||
78 | altsql = SELECT IF('{{auth:R}}'='', 'Invalid URL', 'Unknown or expired token') |
||
79 | 20 { |
||
80 | sql = SELECT 'Applicant: ', app.name, ', ', app.firstName, '<br>' |
||
81 | , 'Applicaton: ', app.title |
||
82 | , 'p:{{pageAlias:T}}&action=approve&appId={{appId:R}}|t:Approve|s|b' AS _link, ' ' |
||
83 | , 'p:{{pageAlias:T}}&action=deny&appId={{appId:R}}|t:Deny|s|b' AS _link |
||
84 | } |
||
85 | } |
||
86 | 1 | Carsten Rose | </pre> |
87 | 3 | Carsten Rose | |
88 | 1 | Carsten Rose | |
89 | 3 | Carsten Rose | |
90 | form={{SELECT 'approve' FROM Application AS app WHERE app.auth='{{auth:CE:alnumx}}' AND NOW()<app.deadline}} |
||
91 | 4 | Carsten Rose | r={{SELECT app.id FROM Application AS app WHERE app.auth='{{auth:CE:alnumx}}' AND NOW()<app.deadline}} |