| Hash | Commit message | Author | Date | Files | + | - |
1 | commit 14a1279efef75c94351d39dc3c7c92440743fcc9 |
2 | Author: Connor Etherington <[email protected]> |
3 | Date: Fri Apr 14 06:30:10 2023 +0200 |
4 | |
5 | Auto-Commit Update 14.04.2023 - 06:30:10 |
6 | --- |
7 | {config => .bkp/config}/clients.json | 2 + |
8 | .env | 1 + |
9 | clients/clients.json | 30 ++ |
10 | clients/concise/inputs/main.json | 1 + |
11 | clients/concise/templates/main.html | 99 +++++ |
12 | clients/freepaid/inputs/affiliate-register.json | 1 + |
13 | clients/freepaid/inputs/passwordReset.json | 1 + |
14 | clients/freepaid/inputs/user-register.json | 1 + |
15 | .../{passwordReset.js => passwordReset.html} | 4 +- |
16 | .../{user-register.js => postPayment.html} | 21 +- |
17 | clients/freepaid/templates/user-register.html | 255 +++++++++++++ |
18 | clients/freepaid/templates/welcomeMail.js | 23 ++ |
19 | methods/.sendMail.js | 136 +++++++ |
20 | methods/main.js | 97 +++++ |
21 | methods/mkMail.js | 89 +++++ |
22 | methods/mkTemplates.js | 67 ---- |
23 | methods/updateDB.js | 108 ++++++ |
24 | models/client.js | 1 + |
25 | models/template.js | 3 +- |
26 | package.json | 2 + |
27 | routes/api.js | 45 +++ |
28 | server.js | 138 +++---- |
29 | yarn.lock | 402 +++++++++++++++++++++ |
30 | 23 files changed, 1352 insertions(+), 175 deletions(-) |
31 | |
32 | diff --git a/config/clients.json b/.bkp/config/clients.json |
33 | similarity index 89% |
34 | rename from config/clients.json |
35 | rename to .bkp/config/clients.json |
36 | index 2a6ed24..a8a130e 100644 |
37 | --- a/config/clients.json |
38 | +++ b/.bkp/config/clients.json |
39 | @@ -2,6 +2,7 @@ |
40 | { |
41 | "name": "FREEPAID", |
42 | "token": "SPk2xehvDx8SV9GR6hCjsDCCC2ZjIexxNg3ZlSuKRyd1yH82kymg9mVS1yfnUIYkDDEsBPZgh64vqvWE", |
43 | + "sender": "[email protected]", |
44 | "config": { |
45 | "host": "mail.supersim.co.za", |
46 | "port": 465, |
47 | @@ -15,6 +16,7 @@ |
48 | { |
49 | "name": "CONCISE", |
50 | "token": "ss0n08iyc9ohbjSCkGlt0ZJduRg6E1M6lM2QfTY0GtqoXlX0MnQAMvKhFpjr0bvemQhq8g852L0AjDLJ", |
51 | + "sender": "[email protected]", |
52 | "config": { |
53 | "host": "smtp-relay.sendinblue.com", |
54 | "port": 587, |
55 | diff --git a/.env b/.env |
56 | index 809d8c0..9b30338 100644 |
57 | --- a/.env |
58 | +++ b/.env |
59 | @@ -1,3 +1,4 @@ |
60 | |
61 | URI="mongodb+srv://a4to:c1b120d56bb97eb37fbc45f009e33f03f2840@mycondb.bt5st8l.mongodb.net/mailer?retryWrites=true" |
62 | +token='oiouoiok' |
63 | |
64 | diff --git a/clients/clients.json b/clients/clients.json |
65 | new file mode 100644 |
66 | index 0000000..a8a130e |
67 | --- /dev/null |
68 | +++ b/clients/clients.json |
69 | @@ -0,0 +1,30 @@ |
70 | +[ |
71 | + { |
72 | + "name": "FREEPAID", |
73 | + "token": "SPk2xehvDx8SV9GR6hCjsDCCC2ZjIexxNg3ZlSuKRyd1yH82kymg9mVS1yfnUIYkDDEsBPZgh64vqvWE", |
74 | + "sender": "[email protected]", |
75 | + "config": { |
76 | + "host": "mail.supersim.co.za", |
77 | + "port": 465, |
78 | + "secure": true, |
79 | + "auth": { |
80 | + "user": "[email protected]", |
81 | + "pass": "springbokke6" |
82 | + } |
83 | + } |
84 | + }, |
85 | + { |
86 | + "name": "CONCISE", |
87 | + "token": "ss0n08iyc9ohbjSCkGlt0ZJduRg6E1M6lM2QfTY0GtqoXlX0MnQAMvKhFpjr0bvemQhq8g852L0AjDLJ", |
88 | + "sender": "[email protected]", |
89 | + "config": { |
90 | + "host": "smtp-relay.sendinblue.com", |
91 | + "port": 587, |
92 | + "secure": false, |
93 | + "auth": { |
94 | + "user": "[email protected]", |
95 | + "pass": "qbEw1zXxDg6hC9MQ" |
96 | + } |
97 | + } |
98 | + } |
99 | +] |
100 | diff --git a/clients/concise/inputs/main.json b/clients/concise/inputs/main.json |
101 | new file mode 100644 |
102 | index 0000000..fe51488 |
103 | --- /dev/null |
104 | +++ b/clients/concise/inputs/main.json |
105 | @@ -0,0 +1 @@ |
106 | +[] |
107 | diff --git a/clients/concise/templates/main.html b/clients/concise/templates/main.html |
108 | new file mode 100644 |
109 | index 0000000..376f038 |
110 | --- /dev/null |
111 | +++ b/clients/concise/templates/main.html |
112 | @@ -0,0 +1,99 @@ |
113 | +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
114 | +<html> |
115 | +<head> |
116 | +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" > |
117 | +<title>SuperSIM</title> |
118 | +<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700" rel="stylesheet"> |
119 | +<style type="text/css"> |
120 | +html { -webkit-text-size-adjust: none; -ms-text-size-adjust: none;} |
121 | + |
122 | + @media only screen and (min-device-width: 750px) { |
123 | + .table750 {width: 750px !important;} |
124 | + } |
125 | + @media only screen and (max-device-width: 750px), only screen and (max-width: 750px){ |
126 | + table[class="table750"] {width: 100% !important;} |
127 | + .mob_b {width: 93% !important; max-width: 93% !important; min-width: 93% !important;} |
128 | + .mob_b1 {width: 100% !important; max-width: 100% !important; min-width: 100% !important;} |
129 | + .mob_left {text-align: left !important;} |
130 | + .mob_soc {width: 50% !important; max-width: 50% !important; min-width: 50% !important;} |
131 | + .mob_menu {width: 50% !important; max-width: 50% !important; min-width: 50% !important; box-shadow: inset -1px -1px 0 0 rgba(255, 255, 255, 0.2); } |
132 | +[41m } |
133 | + @media only screen and (max-device-width: 550px), only screen and (max-width: 550px){ |
134 | + .mod_div {display: block !important;} |
135 | + } |
136 | + .table750 {width: 750px;} |
137 | +</style> |
138 | +</head> |
139 | +<body style="margin: 0; padding: 0;"> |
140 | + |
141 | +<table cellpadding="0" cellspacing="0" border="0" width="100%" style="background: #f3f3f3; min-width: 350px; font-size: 1px; line-height: normal;"> |
142 | +[41m <tr> |
143 | +[41m <td align="center" valign="top"> |
144 | +[41m <!--[if (gte mso 9)|(IE)]> |
145 | + <table border="0" cellspacing="0" cellpadding="0"> |
146 | + <tr><td align="center" valign="top" width="750"><![endif]--> |
147 | +[41m <table cellpadding="0" cellspacing="0" border="0" width="750" class="table750" style="width: 100%; max-width: 750px; min-width: 350px; background: #f3f3f3;"> |
148 | +[41m <tr> |
149 | + <td width="3%" style="width: 3%; max-width: 3%; min-width: 10px;"> </td> |
150 | +[41m <td align="center" valign="top" style="background: #ffffff;"> |
151 | + |
152 | + <table cellpadding="0" cellspacing="0" border="0" width="100%" style="width: 100% !important; min-width: 100%; max-width: 100%; background: #f3f3f3;"> |
153 | + <tr> |
154 | + <td align="right" valign="top"> |
155 | + <div style="height: 22px; line-height: 22px; font-size: 20px;"> </div> |
156 | + </td> |
157 | + </tr> |
158 | + </table> |
159 | + |
160 | + <table cellpadding="0" cellspacing="0" border="0" width="88%" style="width: 88% !important; min-width: 88%; max-width: 88%;"> |
161 | + <tr> |
162 | + <td align="left" valign="top"> |
163 | + <div style="height: 9px; line-height: 39px; font-size: 37px;"> </div> |
164 | + <a href="#" target="_blank" style="display: block; max-width: 128px;"> |
165 | + </a> |
166 | + <div style="height: 10px; line-height: 80px; font-size: 78px;"> </div> |
167 | + </td> |
168 | + </tr> |
169 | + </table> |
170 | + |
171 | + |
172 | + <table cellpadding="0" cellspacing="0" border="0" width="88%" style="width: 88% !important; min-width: 88%; max-width: 88%;"> |
173 | + <tr> |
174 | + <td align="left" valign="top"> |
175 | + <div style="height: 35px; line-height: 35px; font-size: 33px;"> </div> |
176 | + <font face="'Source Sans Pro', sans-serif" color="#333333" style="font-size: 20px; line-height: 32px;"> |
177 | + <span style="font-family: 'Source Sans Pro', Arial, Tahoma, Geneva, sans-serif; color: #333333; font-size: 20px; line-height: 30px;"> |
178 | + |
179 | + |
180 | + ${message} |
181 | + |
182 | + |
183 | + </span> |
184 | + </font> |
185 | + <div style="height: 32px; line-height: 32px; font-size: 30px;"> </div> |
186 | + <table class="mob_btn" cellpadding="0" cellspacing="0" border="0" style="background: #27cbcc; border-radius: 4px;"> |
187 | + <tr> |
188 | + <img width="200" border="0" style="display: block; width: 200px;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3kAAADrCAYAAADUtl8AAAAAxnpUWHRSYXcgcHJvZmlsZSB0eXBl IGV4aWYAAHjabVBRDsMgCP3nFDsCClU8Dq4u2Q12/KHQpN36EuAJ+ERgfN4veEzkxMBbldJKQQM3 blmNCDp0+YS8/EJtSJG95GH0uJQtNVu8DaV4TEc+LhwxqbHtJCTPKPRroXHoy49QPERzomxkD6EW QpS9kEJA/VtYmtTzF/rAK8QNpuuhuibC/zNX296+2TuU86BEaJ6IfQCaRkC6iJrV2bg4W5ualZjE FnK3pwPwBeB8WkHm8VQrAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV9TRZGKgx1EHTJU QbCLinSsVShChVArtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APE1cVJ0UVK/F9SaBHjwXE/ 3t173L0DhEaFaVZXHNB020wnE2I2tyr2vELACMKYQExmljEnSSn4jq97BPh6F+VZ/uf+HP1q3mJA QCSOM8O0iTeIZzdtg/M+cZiVZJX4nHjSpAsSP3Jd8fiNc9FlgWeGzUx6njhMLBY7WOlgVjI14hni iKrplC9kPVY5b3HWKjXWuid/YSivryxzneYokljEEiSIUFBDGRXYiNKqk2IhTfsJH/+w65fIpZCr DEaOBVShQXb94H/wu1urMD3lJYUSQPeL43yMAT27QLPuON/HjtM8AYLPwJXe9lcbQOyT9HpbixwB A9vAxXVbU/aAyx1g6MmQTdmVgjSFQgF4P6NvygGDt0Dfmtdbax+nD0CGukrdAAeHwHiRstd93t3b 2du/Z1r9/QAH0XLiQxBBrwAADXhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBi ZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1s bnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxy ZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4 LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJo dHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9u cy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOkdJTVA9 Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcv ZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlm Zi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4 bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NTc2NDc5MjktMTcwNC00YjQzLThmZmIt MmVkNGY5NzVkNWU5IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg3YTMzNmU0LTc3ZGEt NGJjMi1hZDI4LTY0NjI1MzA5N2NlNiIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAu ZGlkOjM4NTFmNGFiLTZmNzktNDJjZS04Mjk3LTIyZDc5ZjE4MjhlNCIKICAgR0lNUDpBUEk9IjIu MCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNjc3NTMwNjIx MTc5ODA4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5n IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIK ICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzowMjoyN1QyMjo0MzozNiswMjowMCIKICAgeG1wOk1v ZGlmeURhdGU9IjIwMjM6MDI6MjdUMjI6NDM6MzYrMDI6MDAiPgogICA8eG1wTU06SGlzdG9yeT4K ICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAg ICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDMx YTQyMC04ZWY3LTRhMzItYTU1MC1mYTFlNDU5OGZiNDciCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdl bnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTAyLTI3VDIyOjQz OjQxKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpE ZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PqyawXMA AAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfnAhsUKykVoGzN AAAgAElEQVR42uzdd3gU1f4/8Pek95AGJAFCAkivAnopQmgWVECKiqigcgGVKwkYBUSaoF8EEsSC YgHBjgXFK1WaSichQAg1CUlI79lks+38/vCSn2iym8n2zfvlk+fehzkzOzvz2XPOZ8o5ABERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER ERERERERERERERERERERERERERERERE5HMkRv5ROpxOFhYXIyclBUVERiouLa/8qKytRXV0NhUKB 6upqVFVVQaPRQKvV1v5pNBqr7LezszOcnJzg7OwMZ2dnuLu71/55enrCx8cHvr6+8PX1hb+/P4KD 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 KCsrq41bhUKB6upqKJVKqFQqqFSq2vjV6XQQQpgsfv8aj05OTnB1dYWHh0dtXHp6esLb27s2Jn19 fREYGHhLXHKEaCIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi IrIFCSJBNPvffwkiQfCIEBERERER2aH9Yr9oK9oK/O2/tqKt2C/2M9kjIiIiIiKyB2kiTYwVY/+R 3P39v7FirEgTaUz2iIiIiIiIbFGJKBFLxBKDyd3f/1silogSUcJkj4iICIDEQ0BERLZgk9gklmAJ 0pFe5/In8SQAYDM217m8LdpiCZZgqjS1ybRtOp1OZGdnIys7Gzk5OaisVKC6ugpCAH5+fvD384O/ vz86dGiPFi1aWO24VFZWivT0dGRmZaG4uBjV1UqoVSp4eXvDx8cbfn5+iIqMQkREG7i4uFhkP3Nz c8Wx48eRn5+PoKAg3DV4MIKDg60eO5cvXxYnT52GQqFARJs2GDx4EDw8PBwyptPS0sTRY8dRWlqK oKBADBw4EOFhYWb/rhdSU8XJkyehUFShZYsWGDLkLgQEBDjUMVYoFOLgwUPIzMqEh7sHevfpjR7d u8v+jlVVVWLvvn3IyclBUGAQoqOHIigoyCLH6uzZc+L06dOoUdUgMjISQ4YMgZurq0U+W6vViuzs G7iRcwM5OTmoqKhETY0SGo0WPj7e8PXxha+fL1qFhyMyKspi+yWHC7sVRERkTYkiUcQgBlMxtc7l QzAECUhAb6m3dLP8HMzBQRy8pVw60jEVUzFUDBXxiK8t72gyMzPFrt17cPTYUdw5YCAqKioatN7g u4aILl274s47+uPuu+9GWGio2Y6PTqcTSUlnsHPXTpw4cRL97/wXhDB8o9XNzQ0TH35YRA8dipEj RqBDhw5m2cdvv/tO3Hf/A6iurq79N1cXF2zf/qMYM+ZBq8XNG/+3Sjw4dtwt/9amdWtkZmaK1q1b N3i/Ll++LN5a/zZOnDyJsrIyo/bJy9MTfv7+8PPzQ8sWLdCzZw/06tkTPXv1greXV6OP1bq33hL3 3f/ALf/m7OyMzz//Qkye/Khkrrh8dfFiPDR+wq3f0csLhw4fFncNHvyPzy0rKxPr1q/HwQMHkZOb 26A4NmvH3cUF4eHhGP/QOEx98km41pFcJJ89K0bdcy+Ki4tv+ffYefPEqjfeaPCFlLy8PPHg2HHI zs7+/8fq/7zwxx9/iAEDBpj1d7Jk6TIx6ZFHbvm39u3aoby8XPj5+Znlsy9fviz27t2H4ydO4I5/ DYBCoWjQeq4uLhgz7iHRuXMnDBwwAIMHDUKzZs2s3v7wTh4REVlFiSgRMYjBJmyqc3kEIrAESzBN mlZnW/WJ+EQswRJkIKPO9adiKuIRjwDJ/q/QazQasWfvXny6ZSuSkpJMss3evXthwvjxePCBB0x2 96yqqkp89/332LT501s6ho3VqWNHzJjxb4wcMQLOzs4m2ce8vDwxYtTd0Gg0/1jm5OSEr774HN26 dbN4zGz79jux6NVX61w2YvhwrH9rXYP2KeP6dTF+wsQGd1Abnfx5eWHc2LGY8thktG3bVtbxOnnq lHj8iSfr7phKEv778w60jYgw+Tn4739/EXNffLHOZf7+/ti/by88PT1v+dzZ/3lB7N23zybrhf/M no1ZM2fcsr9arVbcO3o0MjOz6lznlYUL8NjkyQ06ti+9PF/8+NNP//h3Dw8PbN70SaPuDDbEH0eO iKefmV7nsqemTcWL8+aZ7HOrqqrEjz/9hM8++xxXrl41yTZdXVwwNHoopkx+DP3797Na+8M7eURE ZHEJIkFEIhKlKK1z+WIsxhzM0ZugTZOmSSWiRCQgAUux9B/LN2ETfsAPSBAJYo40x24TvUOHD4sH x45DWlqaSbebmJiExMQkfPjRx9i1e7e4e9Qoo47Rjz/9JO6+9z4UFhaabB9TL15ETOxcREVF4sSJ E6JfP+M7TEePHaszwQMAnU6HJcuWQ6fTCScnJ4vFTFlZmbj7nnv17nNDbf70U7MneP/rHOOzzz/H Z59/jjf+b5WIjZkDNze3Bh2zAwcP1rtMCIFDhw6bZZ/3Hzig7xwg6cyZW/6tsrJS9LvjTputG374 4Yd//mZSU+tN8ABg9549Dd7+wXrOk1KpxOz/vICioiJhjkc3f//993qXHTly1CSfodFoxDfbvsXI u+/5xx1PY6k1GuzZsxd79uzFY1MeFy+9FGe2hFgfJ3Y1iIjIUm5OiTAHc+pM8MZgDNKQhqXSUqkh d+ACpABpqbRUSkMaxmDMP5aXohRzMAf2OOVCZWWlmPdinJgxc5bJE7y/SktLw5yYWMTOmyeUSqXs Y1RSUiJmzJwlXnp5vkkTvL+6di0NT0ydhtffeKNR+3hLTJTqf3zx/Pnz2Llzl0XP9caPPkJZebm+ WEBlZWWDvvf5c+ctHqubP/0Ujzw6GVlZWQ3aR0Nxkl+Qb5b9NPi5+fmyyltbQR37l5Obq3ed3Jzc Btc/+mIyPz8f816Mg0ajMXm9euNGjp5lN0xQn1wTkx55FMuWLzd5gvd3pxMT8fAjj+KN/1sltFqt Rdsg3skjIiKzSxNpIgYxiEZ0ncsjEIFN2IRoKVraju2ytx8pRUo3k8ipmPqPRzjTkY5oRGOsGCvi EV9b3lZlXL8uJkychIzr1y32mb/8shPhYeGy1rly9aoYP2GiwY6lqXy6ZSvOnTuPsrIy4e/v37hz 2IB3qhLeWgeVWi0sMZhCTk6OuHf0/QbLabXaBm2v6i/vGVrShdRUPPPvGSgpKRGGBjHRavR/F0PL G0tj4Bj+/RiHhYXBxcWl3ju/1hbRpg1Onzxx63c0sK8N/S4qlcpgmaPHjuGt9W+b/HtpdVo9y3RG bXvnrl1i/MRJUCqVFr8QEhgYYNHP5J08IiIym5tTIkQiEj/gn48W+cMf8YhHhpQhRUvRRneoo6Vo KUPKkOIRD3/4/2P5D/gBkYiELU+5cPnKFTHl8ScsmuDd9OVXX6GhV5svpKaKx5940mIJ3k2nExPx +JNTUVBQYLbzl5mZha+++soi32f92++gpqbGdBu04sAgGRkZeG72bKjVaoeYzsTNzU164vEpNrt/ 06c/Y/V92Pjhh/h1v308JfH5F1+K2LnzLJ7g3bTt228t+nm8k0dERGaxSWwSvdFb75QICUgwy8Ao MVKMVCJKxBzMqXPKhSVYgk3YhE1ik7ClKRfy8/PFw49ObvRjYsFBQfD28YGHhzsUiipUlJfrfQzw 7yorKxs0WmdOTo6Y9MijKC0tbfC2JUlC27Zt0b59O/j7+8PL0xNKZQ0KCgpwLS0NGRkZDU+EL1/G 87P/g5qaGuHu7m6W8/fehvdRWVkpfHx8zBYfly5dEmMfGm/RGBs1ciS6du1isJxOJ1CpqERpaSku XbyE1IsXoVarDa6XmJiE7+t4V8xexcbEIDy8Ffbu3YsbOTnQ6Rp+l1Gt1iDXwEWQ1q1bydofV1dX tG7dGo8+/DCGDBliE3XXy/MX4Pr1TNGmTWubfULipx07RNxLLzdq3dCWLdEytCW8vbzh5uYGhUKB SoUCRUVFBs/vX1VUVDLJIyIi+yVnSoT65rwzhZvJo71MuaBWq8WUx5+Q1Wno2PE2jBo5EgMGDECH 9u3h7e39j+9QXFwsUlNTceLkSfyyc5feZCowMBB+fn56P1OlVotHJz/W4ES0c+fOePThhzFy1Eg0 0/OIZUFBgdi1eze2fvZ5gxK+5LNnsXjpUrOdj5KSEnz0ySdmPedr4hMsPiT/kCF34aFx42THenl5 ufhpxw68+94Gg+8xvfPue1AqlcIR5vczZlTXlAsXxPgJE/WW2b1zZ6O2v+Hdd23mGFVUVGBOTIzN nvOkM2fEE/WM5loXfz8/jB49GsOio9GrV88669WbysrKxMWLl/Db779j165duJ6ZWe92e3TvjiO/ /8Ykj4iI7MvNKRF6o3edy/86JUJ9ZczhZvJW35QLB3AAvdEbU8VUYc0pFza8/wGSz55tUNmuXbsi 5oUXMHDgAOmH777TWzYwMPCW73Pq9GkRH5+AU6dP/6PstCefhKFRJd977z2kpKQY3Ec/Pz+8+sor uPfee9CQkSpDQkIk4M9R7z7/4kvEJyQYfKxq+/YfsWfPXjFy5AiznLPNmz9FQUGBuLlvpnT8+Anx 5LRpdvP7vjk3WUlJiXhu9mwkJtY/lUd+fj5sddoBMo8LqalY/toKm9svRVWVeOih8VA34F1EL09P PPvss3jkkYfh7eUlLWpIQvi3C1enTp8W7773Hv7448jfLxZg1qyZeH/De0zyiIjIfnwvvjd6SgRz a+iUC/vFfmGK9wPlSM/IEA88OKZBZWfOnIFnZ86scxLkhri9Tx8J+HNqhvf/l1j6+vpiymOT8dRT 0/DMM0/Xu25aWpp4YMxYg5/RLioK77+/AeFhYbL38eacfefPnxczZz2LwqIiveVXvvEGFFVVwpiJ uetTXV2Nt98xzx2TNWvX2uVvPSAgQCovLxfjHhqPGzn1j4L4m55h8Mkxfff999i27VsxYcJ4m7mb 98477+q9u3ZT927dsGb1m2jdurX09FONv/hys35NOnNGbNm6FWfOJKNlixaY/fzz6NWzp0WPC5M8 IiIyWgxi6p0SIQEJiJQipboSK4t3UP+XZKaJNDEHc/D3kTxLUYppsPzdlYSEdQ0a9W7pksWYNHGi 9MLs2UZ/5l2DB0vAn5MnOzs7S3/8dhjPzpqlfz/XvWVwlMdWrVrh448+RPPmzY3q0HTt2lW6ePGi eOzxJ/TO+5abm4tNmzaZ7dx8+913uHbtmoiKijJZB23nrl0iJnau3f7e/fz8pO9/+EEsWPhKvWX+ fieDmoblK1YgJSVFdOnSxeqJXlZWlrjv/gcMluvfvx/effttvY9lyvX3hG7rlk8t/v05uiYRERmt vsFVJNjuKzn17Vt938Vsxy49XezavdtguRn/no5JEyea/IA29J2jtLQ0YWgiZRcXF6xZ/abRCd5N HTt2lF6cZzgZ+uLLr1BTU2OWl9u0Wi3i160z2fbUarVISFhn97/5USNHwsWl/nsFBQUFUCgUDjHK JjWcSqXCf+bEoKyszOrn/qOPPzY4WFDr1q2wft06kyZ4toJJHhERmY2tTVlgaEoHa/jiyy8Nluna tSuef+45m9/PJx6fgh7du5u0szRxwgT0799Pb5mioiL8/N//mu277927D0lJSSaJ32++2WaV6TFM zdvbW2rfrp3+31tJCSvBJig7OxsvzZ8PnU5ntTq/vLxcbP/xJ4Pl3ly1qvZ9UyZ5REREMi3BEvRG b2wSm6zW6N+c0mEJltjMcdFqteKnHT8bLBc3b17tu2rW2s8dP+tPory8vPDM00+bvqPi5CTFvPCC wXI//bTDrMdg9Rrj36FTKBTi3Q0bHOZ3HRgUqHd5MZM8h+Xu7q53+cGDh/DBxg+ttn+79+xFdXW1 3jKj77sPPXv0kBz1HDHJIyIikxuCIf/4t79OWZAoEi2W7CWKRDFUDBVTMbXORzHr2leL7VtSksG7 Hd26dUX//v2s2hFpyH7ed9+9CAgwz8A6vXr1MnjX6NSpU2Z9PPDU6dNGT/r88SebUGRgIBl7Igzc qLHlx7XJOI8+8gjuHz1ab5n1b7+NP44cscqFvb379hos89RT0xz6HDHJIyIikzsoHZQ+wSeIQMQ/ lv11ygJzPsJZIkrEVDFV9EZvHMCBfyyPQAQ+wSc4KB20Wk+0IYNTjBs7zurnsyH7+eD995t1H8aP f0jvcrVGgyNHjxrXKXJywrDo6HqXr10bD41G06iYLSwsFPoGiHniicft7ndeZGC+vMDAAFaGDmzp ksXQd/FFp9Nh3otxyM3NtWiip1arxbFjx/WW6djxNnTp3Nmhr0IwySMiIrOYJk2TkpCExVhc5/JN 2IRIRCJBJJi8A5AgEkQkIrEJdXeqF2MxkpCEadI0qzbyZxswL95dgwdZ/Vwa2k9PT0/06tXLrPvQ v39/g2XOnTtn9OfMmxsLZ2fnOpddvXYNP2z/sVHbffe991BVz+NjD9x/P7p07mxXv+/y8nJx9epV vWUCApjkOTIvLy9pXUI8vLy86i1TUlKCObFzoVKrLZboXb582eAcm0PuGuLw54dJHhERmU2AFCAt lZZKaUjDGPxzHrhSlGIO5qCtaCv2i/1GdwL2i/2irWgr5mBOvVM6pCENS6WlkjXn7LvpQmqq3uUt W7ZEq1atbH4/e3Tv3uh5+xqqQ/v2cHNz01vm6rVrRn9OZGSkNGnSxHqXr3/7bVRXV8uK1fT0dPH1 N9vqXObq6ooX/jPb7n7bv+zcqXc6jdCWLeFlhrkLybZERUVJry1fprfMmTNnsGrVmxbbp/PnUwyW 6de3L5M8IiIiozvOUqS0Xdou7cf+Oh/hTEc6ohGNsWKsSBNpspO9NJEmxoqxIhrRdb53F4EI7Md+ bJe2S5FSpE10PKuqqoSh97M6tG9vF/vZzsD7cqbg6uoqde7USW+ZayZI8gDg+Wefhbe3d53L8vPz sWXrVlnbi09YV29C9PiUxxAeHm5XyVBJSYl459339JYZMOBfrPiaiHvvuUd6w8yPgwAAF2pJREFU 4vEpest89vnn+Pnn/1rkbl5mVpbBMrfd1oFJHhERkalES9FShpQhxSMe/vD/x3K5Uy4YmhLBH/6I RzwypAwpWoq2qY50bm6uwTKtW7e2i/1s1SrcIvvSsmVLA/uaZ5LPCQwMlGb8e3q9yzd++BFKS0sb 1GE9k5xc7/yC/n5++Pf06Xb1Gy4oLBT/njkTBQUFessNHDiQFV4TMnfuXPTurf+R7VcXL8aVq1fN nujl5OToXe7u7o7g4GCHPycuDEsiIrK0GClGKhElYg7mYDM2/2P5EizBJmzCJrFJTJWm1pmc3ZwS ob7Jy5/Ek0hAAmzhscy6lJaWGSwTHBRkF/sZGBhokX3x9fPVu7yqqgo6nU44OTkZfc4fnzIFX375 FW7U0WGsrKzEhvc/aNB29E29MGvmTPj7+9vFXbzS0lKx/cef8MCDY1BWpj8mwsLCMHzYMFZ0TYib q6uUl5cnHpowEcX1DMhTVV2NF+bMgUKhEOacfLykVP9IwCEhIWhMHVFTUyPefW8Ddvz8M3Jzc6HT 6Rq0XkBAAPr17YuXX4pDaGioxX7vTPKIiMgqbiZfiSJRzMEcHMTBW5b/dcqFeMSjt9S7tnwMYjAV U+vc7hAMQQIS0FvqLdWVQNoKZY3SYBlPL0+72E8vTy/LJHk+vgbLGJobq6E8PDykH3/6Sbz08vw6 l3/+xRfIzs4W+h613L//gHj2+efrXNaqVSs8+ugjePLJJyx6PvcfOID33ttg8G6KgIBCoUBpaRlS L17E4CFDodFoGvQZs597Dm5ubnwfr4lp0aKFdOToUfHM9H/XmwBdu5aGRa8uNm+dVa009Ntu1Hbf fW8DPti4UX7SWVKC3Xv2ICs7G1qtVjg7O1vkt8Ekj4iIrOpm8vaJ+EQswRJkIOOW5X+dcgEAeqN3 nduJQASWYAmmSdOk+srYErVabbCMm6ubXeynq6urRfZF3yh+tR08pdJkn3f/6NH4dMtWnD9/vs7j su6t9fWuq9VqxdiHxte7POaFF6ySCO3duw979+4z2/bvvOMOPPDA/aCm6V933im9/8EHImHdW/WW +WXnTmz+dIt48onHzRL/KpVK73JDE7nru0BijJSUFBgakdaU+E4eERHZhIZMuWDrUyLI4elh+C5d jarGLvazqqrKIvtSU2P4eDS2A1dnJ8nJSXrpxXn1Lt/x88+4kJpa512xH7Zvx5UrV+pcr3u3brjn nrsd7jfcLioK6xLiYak7FWSbpj/zDIYMuUtvmdVr1uD06USzvJ9nqA6orm5cfSWE8bubnX2DSR4R ETU9hqZc+DtbmxJBDq8GPIpp6LEjS/D2Nnz3rLyi3CL70pC7dI19FKs+/fr1k+qbIF0IgTVr19a1 n2L92+/Uu80X582FKd4btCXdu3XDxg/eh5+fHxO8Js7JyUn6v9dfR3h4/QMyaTQaxMydi8LCQpMn el71jIxbW1+VNa6+MpS4NoRGq7HceWAoEhGRrTE05YItTokgl4+Pj8Ey+QX5NpDkeRssU1lRaZF9 MTSio6+vL1xcXEweD/omSP/99z9w5OjRWzqqW7ZuRV5e3SN9DouORr9+/RwmEZIkCU8/NQ1bt26x 6KASZNv8/f2ltxLi9c5tmZ+fj3kvxkGj0Zg00TN0Yaq8oqJR231u1iw8PGkSPD097eIc8J08IiKy WbXTHgjc0gnIkDKkaETb9Xdr0aKFwTINme/J3Fq2bAlJkvQ+qpSVnW2RfTF0PEJDQ81z0SEyUlr2 2mviiy++rHP56jVra0f1LC0tFaPuubfOcs7OzoiNicE7b6+3+9+ml5cXxj80DlMem4I2bVpL8+bO bfC6Tk767zHohM4s+6zTM3k7ADhJvPdhSl26dJG++WabeHXJknrLHDt+HG+tf9u0dWtz/XWrSqVC SUmJCAiQ9/SHp6dnbfni4mJR39yXG97/AJ9/8YXVjz+jmYiIyAo8PT2lsLAwvWUuXrxk9f308PCQ 9D12BQBnz50z+35oNBqRnpamt0zrVq3M9vnPP/tsvXdfU1JS8MsvO2s7eBX13CmYMH482rWLkuws TtGiRQt06NABgwcNwuznn8NHH27E4YMHsGD+fKlNm9ayv4+rq/57DOa6M1xRqX+7tjCaraOZOHGC NG7sWL1lNn74IX7dv99kd/OiIiMNljlzJtmozwgMDJRCQkLq/LOVOOKdPCIiIitpFxWFGzfqfxG/ sLAQ6RkZom1EhFUTg6ioKGTpuYt26dIl1NTUCHd3d7Pt54ULqagyMD1C1y5dzHYMAgMDpY0ffijW xifUuTzhrbeQnp4uHhw7rs7lXp6eeO65Z7Fk8atWjbkVry3HQ+PGWTWePAwM5lNRWWGWz60w8Jie vTyGZ28WvbIQKRdS9F60enn+Aly/nikac9HgH/VVuyiDZZLOJDn8ceedPCIiIivp0aOHwTIHDx6y +n72MrCfGo0Gx0+cMOs+/Pb77wbLdO/e3az78PiUKQir55HQrKws3Dv6/nqnnHj66acQEhzMd9YA BAYG6F2el5tn8s9UqdWiqKhIbxk/X1+eHDPw9PSU1iUk6H0PuaKiAi/MmQOlUmn0Hb1OHTvCxUX/ faxjx084/HFnkkdERGQlgwcPMljmhx9+sPp+3nXXYINltm371qz78NOOHXqXe3h44Pbb+5h1Hzw8 PKQXXviP7PWCg4Mx9cknGfD/Y+h91AupqVCp1SYdjOPSxYsG53xsZcbHfZu6iDZtpNdXrtBbJvXi RSx/bYXRn+Xt7S316aN/rtSkpKR6pz9hkkdERERG6da1KwICAgx2fH7//Q+rdkY6d+6M4KAgvWV+ 3b/fLMOhA8Dvv/8h0gy8jzfgX/+6ZWAEc7l/9Gh069ZV1jr/ef55eHl58S7e/xh6Z0qtViMlJcWk n3kmWf87WD4+PgjmnVazGjF8uPT0U9P0lvnu+++xZ89eoz9r8CDDF6a2bv3MoY83kzwiIiIrcXZ2 lu4ffZ/BcmvWrjX5MOOyOgtOTtKYMQ/qLaPRaJCwbp3JP1un04l1b71lsNyYBx+02LGImzevweXb t2uHcePGMtj/4raOHSFJ+vOp7du3m/QzfzCwvU4dO/LEWMCcF15A3759zf459957j8FRXH/asQOp qRcd9m4ekzwiIiIrmvLYFIMd3gupqVj3lnWH3Z88eXK9c8Xd9O133+OPP0x713HLlq0GR+9s3rw5 oqOHWuxY6Jsg/e/mzY01y9x99szby0vq1lX/3dAff/wJZWVlJomlpDNnxLlz5/WWGfCvf/HEWICL i4u0dvWbCA4ONuvnhIeFScOHD9NbRq1WI3bePFRVVTlkosckj4iIyIratGktDR82zGC5Dz/6CF99 /bVZOiMNuUsYFhoqjRo10uC2FryyCLm5uSbZzxMnT4q1CQkGyz3z9FNwdXW1aCKlb4L0m+7o3x9D hgxhgleHoUOH6F1eVV2NZa+9ZvTn1NTUiMVLlhosN2DgAJ4UCwkJCZHWrllt8PdjrKlPGH4PNi0t DfMXLIRKpXK4RI9JHhERkZXNjY2Bq6urwXJLli7DW+vfFmoTDEqRfPasmBMTK3rf3lf07X8HXnp5 vigvL9e73bkxMfDw8NC73by8PEx7+hlkZmYatY/Hjh0XM2c9C5VKpbdceHg4Hp40yeLnLDIyUpo0 aaLeMi/Om8vgrscD999vsMx///sLNm3e3Og40mg0Yumy5bh0Sf98k+3btUPPHj2YjFtQv759pZg5 c8z6GX369JZGjTR8YWr3nj2Y+tRTKCoqcqhEj0keERGRlbVt21Z6+umnGlT2/7V391FRlXkcwL8P CuMAMUNKKgID5B4E2gIhX9ZWwEpF9wQZBqallqH5lu2Wr6lYWkkWkC/Y7iaYklq7J7XMtnRB2NpO b7R2UmEVBitNEQZB0HGR3/7RqVMxMBdhZnD3+5m/4N65z3Pvc+/M85v73OeXu3kzJk2ectWTsRz+ 8kuZPWeupKZNwt/eew+XLl2C1WrF3rfewrInl9sLqNSsmel2yzCbzZiYmoZ9+97pcB0vXbokubmb 5cEZM9DU1GQ/8F2xAh4eHi7poM+dPRsGHx+by5KS7kJkZCQDhzYEBgaqkSNH2l1vbebzWPPMs9LR qfXr6upkzrz5eFPD7LSTJk1ig7jAQw9OV3fccbtDy1i6ZDE8PT3trlda+gUmpEzEjp27xGq1dirY a7xwgUEeERERfW9Wejpu1pjn7auvvsKM9HQk3T1BNm7aJKWlpdLQ0GCzY1J97pwUl5RIdk6OjE0c J6lpk1BYVGRzuwcOHsSZM2fa7eBMnz4dsTExdut4/vx5PL5wIVLuTZU3d++2e5fw1OnT8sqWPBk3 /nd4acMGtLS02O+cp6XitttGuCyQuv7669WaNatb5eQKCQnBkkWLeFLb8ej8eZrW215QgNFjE7H1 1W1ibyiwuapKXlq/Qe4YPQbFxfZzTAYEBGACJ8ZxmWdWr4YpKMhh2+/bt69asfxJTeuePXsWTz39 NEaPTcT6DRvlk08/FS3DOC9fviz/OnxY/vzKFkmfOUt27nq9Wxzbnjy9iIioqwVLsOQhDwkqoVvf ySiUQpmO6TDD7PK66HQ6VV1dLRNT03DmjLZk0OXl5SgvL8eGjZsAACN+O1K8vbzgodOh8cIF1Dc0 YGRcfIfqcebs2XaXe7i7q5qaGrk3NQ2nTp/WFJAuXfYk3NzckDxhgoQEh8DX1wh3d3c0NjWhtqYW ZeXluP2OOztUz9jYWCxevBgrli93abvdPmqUOnLkiOzZuxe1tRaEhoZiUloqDAYD7+LZEREertY8 86xsL7A/lX11dTWeW7sWz61di7HjxsuNoaEwGo3w8vJEfUMD6urqUF5WjsRx4ztUh6WLF6NXr15s Kxe57rrr1LFjZZJ2332wWq0OKSPprrtUdk6OvPzHP2kO9jbl5mJTbi50Oh3uTU0TX19fGAwGGAwG XLnSjMbGJtTV1cFsNiM6JlbTj1IM8oiI6JpjgglVqPrxbzPMSEACkiVZspCFEBXSrTpRlVIpj+Ex JCDB7r44k5+fnyorK5MZ6TNx7ty5Dr+/trYWtbW1V98p6NkTwSaT3fV69+6t/n38uDw042FUV1dr 2nZLSwvKyspRVlbe6eMUHh6O9TnZ8HDyZCttBisRET+rxyOzZvJDQaPfP7YAn332GY4eO6b5PVVV Vaiq6vw1OmXyZCQkxDPAc7FBg8LU7t17ZMmyZQ4rY/68ebBY6vD6G2906H1Wq9Xu7L4dYe+Z5q7E 4ZpERNRp2ciGAYZW/9+N3QhBCDIkQyxicflD7RaxSIZkSAhCsButn9UxwIB85Lu0jmFhYWpHwXYE Bwc7vexJaanw8fHR1On91cCBakfBdpg0BIVdKWbwYORveQVGo5Gd8/8Ber1evbw5F0GBgU4tNy5u JBYtfIIN0E0kJyepiSkpjgt43NzUqoyVasGj8126nwP8/RnkERHRteNudbcyw4ypsD1ldQYyEI1o 5Eu+ywK9fMmXaEQjAxk2l0/F1O/vQHaDIaYBAQFqx2sFmmYg7CoTU1Kw8ImOdXoHDBigdr5WgMSx Y51SxwceuB9btryiORC1RbWTINle8mSHdsjslK11uvlfPh/4S1pmcXU2Pz8/9VrBdtxyyy1OKS8l 5R6sz8lxeP5Cdztt4YgUAvba395yrXXTup2OWLZ0CSIiIjp1ndgzMz1dbd60Ef369XP6eR4ZGYnQ 0FCnfb8wyCMioi7hq3zVVrVVlaIUcWidA8sMM6ZhGuIlXkql1GnBXqmUSrzEyzRMs/nsXRziUIpS bFVbla/y7TZ3h4wGg8pc+5zatGEDAgICHFZO+KBB2PbqVjy1KkNdTafXaDSqF19Yp15Y9zz69u3r kDoOHDgQr27Nx5JFi1Rnh2j2b6dz54qOn5ayvb294e3trWm/+/fv3+5yfyfeSeiI3r17q21b8zFn 9myHBaK+vr54Zs1qPL1qlXJGXsUbbrihU211NfztbFNrmQaDQXl7ezv1PNLpdCon60X4tDFjLYAu +YyJi4tTb+/dg/unTHbajx4RERHIemGdU68pBnlERNSlolW0OqQOqTzkwYTWQ/mKUIRoRGOaTHPo EE6LWGSaTJNoRKMIRa2Wm2BCHvJwSB1S0Sq62w79S0iIV/v3vY11mZkIDw/vkm0qpTB82DBkrn0O b7y+C7ExMZ3e/3GJieq9d/dj5YrlGDBgQNcEoOHhWJeZiTf/+hfcGhvbJW0UFXUL9Hq9zWXDhg11 WTuHDxoEo9HY6XqNG5fYbgCgdQZXV3B3d1dz58xW+9/Zh5SUe7rs+SVfX188PGMG3tn3Nu5OTnba tW4wGNRtI0a0uXzMmNFdXmZYWBhCQkLaKXOM5m2N+I3tBPE9evTA0CG3OuSYBQQEqJzsrDaDryG3 dk25Xl5eaumSJerggfcxa2Z6m9deZwPu+6dMxqv5eXhj104EBgY69XuG49mJiMhhLGKRbGRjFVbZ XG6EERnIwAK1oP3vI4H84tur3fWzJVsykIE61NlcvhIrsQAL0J3u3GlVWVkpB/9eiOKSEhw9ehQX NOZk6tOnD266KRKxMbEYPy4R/fr1c9i+t7S0yOHDh/H+gQMo+ccHqKiowJUrV+x38nv2RERkJIYP G4qxY8YgLCzMIXXcuWuXPPX0aojITzuXeK1gO/z69HHZObH/3Xdl4aLFaG5u/lm7FWzbhqAg7R3E jFVPya7Xfz6Nu8HHBxs3bkDM4MHXzDlfX18v7x84gOLiEnz2+eeoqanR3sH298fw4cNw24gRGJWQ 4LJcit9++6089HB6q4liYmNisHlzLrw8Pbu8XkeOHpWZM2fh3C+O19gxY7Du+Uz06NFDU5nfnjol DzwwtdUsuvPnzsUjj8xy6PEsLimRPzz+xM8+3/z798eunTvQxwHXaHNzs5R+8QWKi0vwz48+wvHj xzs026eHhwdMJhNu/vVNiIqKxuDoKKcOzWSQR0RErglMpFIWYAH2YI/N5cEIRrspFzQGefZSIiQh CdnI7nazfXbG6dOn5cSJCtTU1KCxsRGNTY24cqUFPj4+MPj4wGg04sYbQx0a1NljtVrlxIkTqDp5 Eg0NDWhouACr9RI8PHTw1Ovhd4MfAgMCERISDJ1O55R6VlRUyAcffojGxiYEBQYiISEeer3e5efF N998I8XFJThfXw9///64fdQozUM1f+rosWPy8cef4OLFi/D374+4kSOv+bQOZ8+eFbO5Ct+d+Q4W Sx2s1ktobm6GTtcLer0eBh8fBAQGINhk6lb7evnyZSkuKUFFRQXc3HogIiIcw4YOhZubm8Pq2NjU JIeKDuHk119Dp/NAdFQUoqKiOlzexYsXpbCoCCdPfg29Xo+hQ4Zg0KAwpxzb+vp6KSwswndnvoOf nx9G33nnVV0LV/tD1alTp1BRWQlLrQWNTU1oamzE5f9cRq9eveDp6QkvLy/4+fkhKCgI/fr2dWh7 EhERdWuFUigmMQnaeCVLslRKpdgM8n76shFEJktym9s1iUkKpVDYAkRERERERA6QJVliEEObQVmr lAttBHk/pERoazsGMUiWZDG4IyIiIiIicjSLWGSqTG0zQAuWYPkx5YKNIC9f8iVYgtt8/1SZ2i1y 8xEREREREf1fKZVSiZO4NoO1eInX9L8fXnES59QUDURERERERGRDnuS1+7yevZdJTJIneQzuiIiI iIiIuguLWGSlrOxwgLdSVnJoJhERERERUXdVKZWSJEl2g7skSbI9GycRERERERF1P22lXGBKBCIi IiIiomvYDykXmBKBiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIg64b+QNWNYKPCl5gAAAABJRU5ErkJggg==" /> |
189 | + </tr> |
190 | + </table> |
191 | + <div style="height: 45px; line-height: 45px; font-size: 43px;"> </div> |
192 | + </td> |
193 | + </tr> |
194 | + </table> |
195 | + |
196 | + <table cellpadding="0" cellspacing="0" border="0" width="100%" style="width: 100% !important; min-width: 100%; min-height: 30px;max-width: 100%; background: #f3f3f3;"> |
197 | + </table> |
198 | + </table> |
199 | + |
200 | + </td> |
201 | + <td width="3%" style="width: 3%; max-width: 3%; min-width: 10px;"> </td> |
202 | + </tr> |
203 | + </table> |
204 | + <!--[if (gte mso 9)|(IE)]> |
205 | + </td></tr> |
206 | + </table><![endif]--> |
207 | + </td> |
208 | + </tr> |
209 | +</table> |
210 | +</body> |
211 | +</html> |
212 | diff --git a/clients/freepaid/inputs/affiliate-register.json b/clients/freepaid/inputs/affiliate-register.json |
213 | new file mode 100644 |
214 | index 0000000..53a9f1f |
215 | --- /dev/null |
216 | +++ b/clients/freepaid/inputs/affiliate-register.json |
217 | @@ -0,0 +1 @@ |
218 | +[ "agency", "agent", "link" ] |
219 | diff --git a/clients/freepaid/inputs/passwordReset.json b/clients/freepaid/inputs/passwordReset.json |
220 | new file mode 100644 |
221 | index 0000000..53627d7 |
222 | --- /dev/null |
223 | +++ b/clients/freepaid/inputs/passwordReset.json |
224 | @@ -0,0 +1 @@ |
225 | +[ "from", "bName", "to", "email", "subject", "html" ] |
226 | diff --git a/clients/freepaid/inputs/user-register.json b/clients/freepaid/inputs/user-register.json |
227 | new file mode 100644 |
228 | index 0000000..53627d7 |
229 | --- /dev/null |
230 | +++ b/clients/freepaid/inputs/user-register.json |
231 | @@ -0,0 +1 @@ |
232 | +[ "from", "bName", "to", "email", "subject", "html" ] |
233 | diff --git a/clients/freepaid/templates/passwordReset.js b/clients/freepaid/templates/passwordReset.html |
234 | similarity index 99% |
235 | rename from clients/freepaid/templates/passwordReset.js |
236 | rename to clients/freepaid/templates/passwordReset.html |
237 | index f80ac5b..d55b908 100644 |
238 | --- a/clients/freepaid/templates/passwordReset.js |
239 | +++ b/clients/freepaid/templates/passwordReset.html |
240 | @@ -1,4 +1,4 @@ |
241 | -module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
242 | +<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
243 | <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"> |
244 | |
245 | <head> |
246 | @@ -243,4 +243,4 @@ module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN |
247 | </body> |
248 | |
249 | </html> |
250 | -` |
251 | [41m+ |
252 | diff --git a/clients/freepaid/templates/user-register.js b/clients/freepaid/templates/postPayment.html |
253 | similarity index 89% |
254 | rename from clients/freepaid/templates/user-register.js |
255 | rename to clients/freepaid/templates/postPayment.html |
256 | index a3527d6..45d2a1c 100644 |
257 | --- a/clients/freepaid/templates/user-register.js |
258 | +++ b/clients/freepaid/templates/postPayment.html |
259 | @@ -1,5 +1,5 @@ |
260 | -module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
261 | -<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"> |
262 | +<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
263 | +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" style=" background-color: #c9c9c9"> |
264 | |
265 | <head> |
266 | <!--[if gte mso 9]> <xml> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:PixelsPerInch>96</o:PixelsPerInch> </o:OfficeDocumentSettings> </xml> <![endif]--> |
267 | @@ -78,7 +78,7 @@ module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN |
268 | <table width="100%" cellpadding="0" cellspacing="0" border="0"> |
269 | <tr> |
270 | <td style="padding-right: 0px;padding-left: 0px;" align="center"> |
271 | - <a href="\${baseUrl}" target="_blank"> <img align="center" border="0" src="\${logo}" alt="\${baseName}" title="30GBServices" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: inline-block !important;border: none;height: auto;float: none;width: 34%;max-width: 197.2px;" width="197.2" class="v-src-width v-src-max-width" /> </a> |
272 | + <a href="${baseUrl}" target="_blank"> <img align="center" border="0" src="${logo}" alt="${baseName}" title="30GBServices" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: inline-block !important;border: none;height: auto;float: none;width: 34%;max-width: 197.2px;" width="197.2" class="v-src-width v-src-max-width" /> </a> |
273 | </td> |
274 | </tr> |
275 | </table> |
276 | @@ -111,7 +111,13 @@ module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN |
277 | <tr> |
278 | <td style="overflow-wrap:break-word;padding:40px 40px 30px;font-family:'Lato',sans-serif;word-break: break-all; word-wrap: break-word;" align="left"> |
279 | <div class="v-line-height" style="line-height: 180%; text-align: left; word-wrap: break-word;margin-right:10%"> |
280 | - \${message} |
281 | + <p style="font-size: 14px; line-height: 180%;">Hi <b>${name} ${surname}</b>,</p> |
282 | + <p style="font-size: 12px; line-height: 180%;">Congratulations, and thank you for your registration.</p> |
283 | + <p style="font-size: 12px; line-height: 180%;word-break: break-all; word-wrap: break-word;"><br />Please confirm your E-mail address by going to the following URL:<br /><a href="${baseUrl}verification/${_id}/${uniqueId}">${baseUrl}verification/${_id}/${uniqueId}</a></p> |
284 | + <p style="font-size: 12px; line-height: 180%;"><br />* In future, you will be asked for your E-mail and password before logging into the website</p> |
285 | + <p style="font-size: 12px; line-height: 180%;">* Keep your password safe.</p> |
286 | + <p style="font-size: 12px; line-height: 180%;"> </p> |
287 | + <p style="font-size: 12px; line-height: 180%;">You can login to the website anytime at the login page.</p> |
288 | </div> |
289 | </td> |
290 | </tr> |
291 | @@ -123,7 +129,7 @@ module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN |
292 | <td style="overflow-wrap:break-word;word-break:break-word;padding:0px 40px;font-family:'Lato',sans-serif;" align="left"> |
293 | <div align="left"> |
294 | <!--[if mso]><div class="mso-container"><![endif]--> |
295 | - <a href="\${link}" target="_blank" style="box-sizing: border-box;display: inline-block;font-family:'Lato',sans-serif;text-decoration: none;-webkit-text-size-adjust: none;text-align: center;color: #FFFFFF; background-color: #199013; border-radius: 5px;-webkit-border-radius: 5px; -moz-border-radius: 5px; width:auto; max-width:100%; overflow-wrap: break-word; word-break: break-word; word-wrap:break-word; mso-border-alt: none; box-shadow: 0 0 2px 1px rgba(0,0,0,0.6);"> |
296 | + <a href="${baseUrl}verification/${_id}/${uniqueId}" target="_blank" style="box-sizing: border-box;display: inline-block;font-family:'Lato',sans-serif;text-decoration: none;-webkit-text-size-adjust: none;text-align: center;color: #FFFFFF; background-color: #199013; border-radius: 5px;-webkit-border-radius: 5px; -moz-border-radius: 5px; width:auto; max-width:100%; overflow-wrap: break-word; word-break: break-word; word-wrap:break-word; mso-border-alt: none; box-shadow: 0 0 2px 1px rgba(0,0,0,0.6);"> |
297 | <span class="v-line-height" style="display:block;padding:10px 20px;line-height:120%;"> |
298 | <span style="font-size: 18px; line-height: 21.6px;">Verify E-Mail</span> |
299 | </span> |
300 | @@ -158,7 +164,7 @@ module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN |
301 | </tbody> |
302 | </table> |
303 | <div class="u-row-container" style="padding: 0px;background-color: transparent"> |
304 | - <div class="u-row" style="box-shadow: 0px 0px 10px 0px rgb(0 0 0 / 10%);Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background-color: #eeeeee; padding-bottom:10px;border-top: 2px solid rgba(0, 0, 0, 0.125);"> |
305 | + <div class="u-row" style="box-shadow: 0px 0px 10px 0px rgb(0 0 0 / 10%);Margin: 0 auto;min-width: 100%;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background-color: #eeeeee; padding-bottom:10px;border-top: 2px solid rgba(0, 0, 0, 0.125);"> |
306 | <div style="border-collapse: collapse;display: table;width: 100%;height: 100%;background-color: transparent;"> |
307 | <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #eeeeee;"><![endif]--> |
308 | <!--[if (mso)|(IE)]><td align="center" width="300" style="width: 300px;padding: 20px 20px 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]--> |
309 | @@ -172,7 +178,7 @@ module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN |
310 | <tr> |
311 | <td style="overflow-wrap:break-word;word-break:break-word;padding:10px;font-family:'Lato',sans-serif;" align="left"> |
312 | <div class="v-line-height" style="line-height: 140%; text-align: left; word-wrap: break-word;"> |
313 | - <p style="font-size: 14px; line-height: 140%;"><span style="font-size: 12px; line-height: 16.8px; color: #000000;">\${from}</span></p> |
314 | + <p style="font-size: 14px; line-height: 140%;"><span style="font-size: 12px; line-height: 16.8px; color: #000000;">${bName}</span></p> |
315 | <p style="font-size: 14px; line-height: 140%;"><span style="font-size: 12px; line-height: 16.8px; color: #000000;">© All Rights Reserved</span></p> |
316 | </div> |
317 | </td> |
318 | @@ -243,4 +249,3 @@ module.exports = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN |
319 | </body> |
320 | |
321 | </html> |
322 | -` |
323 | diff --git a/clients/freepaid/templates/user-register.html b/clients/freepaid/templates/user-register.html |
324 | new file mode 100644 |
325 | index 0000000..ba4b495 |
326 | --- /dev/null |
327 | +++ b/clients/freepaid/templates/user-register.html |
328 | @@ -0,0 +1,255 @@ |
329 | +<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
330 | +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" style=" background-color: #c9c9c9"> |
331 | + |
332 | +<head> |
333 | + <!--[if gte mso 9]> <xml> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:PixelsPerInch>96</o:PixelsPerInch> </o:OfficeDocumentSettings> </xml> <![endif]--> |
334 | + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
335 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
336 | + <meta name="x-apple-disable-message-reformatting"> |
337 | + <!--[if !mso]><!--> |
338 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
339 | + <!--<![endif]--> |
340 | + <title></title> |
341 | + <style type="text/css"> |
342 | + @media only screen and (min-width: 620px) { .u-row { width: 600px !important; } .u-row .u-col { vertical-align: top; } .u-row .u-col-50 { width: 300px !important; } .u-row .u-col-100 { width: 600px !important; } } @media (max-width: 620px) { .u-row-container { max-width: 100% !important; padding-left: 0px !important; padding-right: 0px !important; } .u-row .u-col { min-width: 320px !important; max-width: 100% !important; display: block !important; } .u-row { width: calc(100% - 40px) !important; } .u-col { width: 100% !important; } .u-col > div { margin: 0 auto; } } body { margin: 0; padding: 0; } table, tr, td { vertical-align: top; border-collapse: collapse; } p { margin: 0; } .ie-container table, .mso-container table { table-layout: fixed; } * { line-height: inherit; } a[x-apple-data-detectors='true'] { color: inherit !important; text-decoration: none !important; } table, td { color: #000000; } #u_body a { color: #03ff; text-decoration: underline; } @media (max-width: 480px) { #u_content_image_1 .v-src-width { width: auto !important; } #u_content_image_1 .v-src-max-width { max-width: 47% !important; } #u_content_text_4 .v-line-height { line-height: 130% !important; } } |
343 | + </style> |
344 | + <!--[if !mso]><!--> |
345 | + <link href="https://fonts.googleapis.com/css?family=Lato:400,700&display=swap" rel="stylesheet" type="text/css"> |
346 | + <!--<![endif]--> |
347 | +</head> |
348 | + |
349 | +<body class="clean-body u_body" style="margin: 0;padding: 0;-webkit-text-size-adjust: 100%;background-color: #c9c9c9;color: #000000"> |
350 | + <!--[if IE]><div class="ie-container"><![endif]--> |
351 | + <!--[if mso]><div class="mso-container"><![endif]--> |
352 | + <table id="u_body" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;min-width: 320px;Margin: 0 auto;background-color: #c9c9c9;width:100%" cellpadding="0" cellspacing="0"> |
353 | + <tbody> |
354 | + <tr style="vertical-align: top"> |
355 | + <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top"> |
356 | + <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color: #c9c9c9;"><![endif]--> |
357 | + <div class="u-row-container" style="padding: 0px;background-color: #c9c9c9"> |
358 | + <div class="u-row" style="margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background-color: #c9c9c9;"> |
359 | + <div style="border-collapse: collapse;display: table;width: 100%;height: 100%;background-color: transparent;"> |
360 | + <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: #c9c9c9;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #c9c9c9;"><![endif]--> |
361 | + <!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]--> |
362 | + <div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;"> |
363 | + <div style="height: 100%;width: 100% !important;"> |
364 | + <!--[if (!mso)&(!IE)]><!--> |
365 | + <div style="height: 100%; padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"> |
366 | + <!--<![endif]--> |
367 | + <table style="font-family:'Lato',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> |
368 | + <tbody> |
369 | + <tr> |
370 | + <td style="overflow-wrap:break-word;word-break:break-word;padding:15px;font-family:'Lato',sans-serif;" align="left"> |
371 | + <table height="0px" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;border-top: 1px solid #c9c9c9;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%"> |
372 | + <tbody> |
373 | + <tr style="vertical-align: top"> |
374 | + <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top;font-size: 0px;line-height: 0px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%"> <span> </span> </td> |
375 | + </tr> |
376 | + </tbody> |
377 | + </table> |
378 | + </td> |
379 | + </tr> |
380 | + </tbody> |
381 | + </table> |
382 | + <!--[if (!mso)&(!IE)]><!--> |
383 | + </div> |
384 | + <!--<![endif]--> |
385 | + </div> |
386 | + </div> |
387 | + <!--[if (mso)|(IE)]></td><![endif]--> |
388 | + <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]--> |
389 | + </div> |
390 | + </div> |
391 | + </div> |
392 | + <div class="u-row-container" style="padding: 0px;background-color: transparent"> |
393 | + <div class="u-row" style="box-shadow: 0px 0px 10px 0px rgb(0 0 0 / 10%);Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background-color: #eeeeee;box-shadow: 0px 0px 10px 0px rgb(0 0 0 / 10%); border-bottom: 2px solid rgba(0, 0, 0, 0.125);"> |
394 | + <div style="border-collapse: collapse;display: table;width: 100%;height: 100%;background-color: transparent;"> |
395 | + <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #ffffff;"><![endif]--> |
396 | + <!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]--> |
397 | + <div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;"> |
398 | + <div style="height: 100%;width: 100% !important;"> |
399 | + <!--[if (!mso)&(!IE)]><!--> |
400 | + <div style="height: 100%; padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"> |
401 | + <!--<![endif]--> |
402 | + <table id="u_content_image_1" style="font-family:'Lato',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> |
403 | + <tbody> |
404 | + <tr> |
405 | + <td style="overflow-wrap:break-word;word-break:break-word;padding:25px 10px;font-family:'Lato',sans-serif;" align="left"> |
406 | + <table width="100%" cellpadding="0" cellspacing="0" border="0"> |
407 | + <tr> |
408 | + <td style="padding-right: 0px;padding-left: 0px;" align="center"> |
409 | + <a href="${baseUrl}" target="_blank"> <img align="center" border="0" src="${logo}" alt="${baseName}" title="30GBServices" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: inline-block !important;border: none;height: auto;float: none;width: 34%;max-width: 197.2px;" width="197.2" class="v-src-width v-src-max-width" /> </a> |
410 | + </td> |
411 | + </tr> |
412 | + </table> |
413 | + </td> |
414 | + </tr> |
415 | + </tbody> |
416 | + </table> |
417 | + <!--[if (!mso)&(!IE)]><!--> |
418 | + </div> |
419 | + <!--<![endif]--> |
420 | + </div> |
421 | + </div> |
422 | + <!--[if (mso)|(IE)]></td><![endif]--> |
423 | + <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]--> |
424 | + </div> |
425 | + </div> |
426 | + </div> |
427 | + <div class="u-row-container" style="padding: 0px;background-color: transparent"> |
428 | + <div class="u-row" style="box-shadow: 0px 0px 10px 0px rgb(0 0 0 / 10%);Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background-color: #ffffff;"> |
429 | + <div style="border-collapse: collapse;display: table;width: 100%;height: 100%;background-color: transparent;"> |
430 | + <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #ffffff;"><![endif]--> |
431 | + <!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px dashed transparent;border-left: 0px dashed transparent;border-right: 0px dashed transparent;border-bottom: 0px dashed transparent;" valign="top"><![endif]--> |
432 | + <div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;"> |
433 | + <div style="height: 100%;width: 100% !important;"> |
434 | + <!--[if (!mso)&(!IE)]><!--> |
435 | + <div style="height: 100%; padding: 0px;border-top: 0px dashed transparent;border-left: 0px dashed transparent;border-right: 0px dashed transparent;border-bottom: 0px dashed transparent;"> |
436 | + <!--<![endif]--> |
437 | + <table id="u_content_text_4" style="font-family:'Lato',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> |
438 | + <tbody> |
439 | + <tr> |
440 | + <td style="overflow-wrap:break-word;padding:40px 40px 30px;font-family:'Lato',sans-serif;word-break: break-all; word-wrap: break-word;" align="left"> |
441 | + <div class="v-line-height" style="line-height: 180%; text-align: left; word-wrap: break-word;margin-right:10%"> |
442 | + <p style="font-size: 14px; line-height: 180%;">Hi <b>${name} ${surname}</b>,</p> |
443 | + <p style="font-size: 12px; line-height: 180%;">Congratulations, and thank you for your registration.</p> |
444 | + <p style="font-size: 12px; line-height: 180%;word-break: break-all; word-wrap: break-word;"><br />Please confirm your E-mail address by going to the following URL:<br /><a href="${link}">${link}</a></p> |
445 | + <p style="font-size: 12px; line-height: 180%;"><br />* In future, you will be asked for your E-mail and password before logging into the website</p> |
446 | + <p style="font-size: 12px; line-height: 180%;">* Keep your password safe.</p> |
447 | + <p style="font-size: 12px; line-height: 180%;"> </p> |
448 | + <p style="font-size: 12px; line-height: 180%;">You can login to the website anytime at the login page.</p> |
449 | + </div> |
450 | + </td> |
451 | + </tr> |
452 | + </tbody> |
453 | + </table> |
454 | + <table style="font-family:'Lato',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> |
455 | + <tbody> |
456 | + <tr> |
457 | + <td style="overflow-wrap:break-word;word-break:break-word;padding:0px 40px;font-family:'Lato',sans-serif;" align="left"> |
458 | + <div align="left"> |
459 | + <!--[if mso]><div class="mso-container"><![endif]--> |
460 | + <a href="${link}" target="_blank" style="box-sizing: border-box;display: inline-block;font-family:'Lato',sans-serif;text-decoration: none;-webkit-text-size-adjust: none;text-align: center;color: #FFFFFF; background-color: #199013; border-radius: 5px;-webkit-border-radius: 5px; -moz-border-radius: 5px; width:auto; max-width:100%; overflow-wrap: break-word; word-break: break-word; word-wrap:break-word; mso-border-alt: none; box-shadow: 0 0 2px 1px rgba(0,0,0,0.6);"> |
461 | + <span class="v-line-height" style="display:block;padding:10px 20px;line-height:120%;"> |
462 | + <span style="font-size: 18px; line-height: 21.6px;">Verify E-Mail</span> |
463 | + </span> |
464 | + </a> |
465 | + <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color: #f9f9f9;"><![endif]--> |
466 | + </div> |
467 | + </td> |
468 | + </tr> |
469 | + </tbody> |
470 | + </table> |
471 | + <table style="font-family:'Lato',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> |
472 | + <tbody> |
473 | + <tr> |
474 | + <td style="overflow-wrap:break-word;word-break:break-word;padding:40px 40px 30px;font-family:'Lato',sans-serif;" align="left"> |
475 | + <div class="v-line-height" style="line-height: 140%; text-align: left; word-wrap: break-word;"> |
476 | + <p style="font-size: 14px; line-height: 140%;"> |
477 | + <span style="color: #888888; font-size: 14px; line-height: 19.6px;"> |
478 | + <em> |
479 | + <span style="font-size: 16px; line-height: 22.4px;">Please ignore this email if you did not recently register with us</span> |
480 | + </em> |
481 | + </span> |
482 | + <br /> |
483 | + <span style="color: #888888; font-size: 14px; line-height: 19.6px;"> |
484 | + <em> |
485 | + <span style="font-size: 16px; line-height: 22.4px;"> </span> |
486 | + </em> |
487 | + </span> |
488 | + </p> |
489 | + </div> |
490 | + </td> |
491 | + </tr> |
492 | + </tbody> |
493 | + </table> |
494 | + <div class="u-row-container" style="padding: 0px;background-color: transparent"> |
495 | + <div class="u-row" style="box-shadow: 0px 0px 10px 0px rgb(0 0 0 / 10%);Margin: 0 auto;min-width: 100%;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background-color: #eeeeee; padding-bottom:10px;border-top: 2px solid rgba(0, 0, 0, 0.125);"> |
496 | + <div style="border-collapse: collapse;display: table;width: 100%;height: 100%;background-color: transparent;"> |
497 | + <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #eeeeee;"><![endif]--> |
498 | + <!--[if (mso)|(IE)]><td align="center" width="300" style="width: 300px;padding: 20px 20px 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]--> |
499 | + <div class="u-col u-col-50" style="max-width: 320px;min-width: 300px;display: table-cell;vertical-align: top;"> |
500 | + <div style="height: 100%;width: 100% !important;"> |
501 | + <!--[if (!mso)&(!IE)]><!--> |
502 | + <div style="height: 100%; padding: 7px 20px 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"> |
503 | + <!--<![endif]--> |
504 | + <table style="font-family:'Lato',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> |
505 | + <tbody> |
506 | + <tr> |
507 | + <td style="overflow-wrap:break-word;word-break:break-word;padding:10px;font-family:'Lato',sans-serif;" align="left"> |
508 | + <div class="v-line-height" style="line-height: 140%; text-align: left; word-wrap: break-word;"> |
509 | + <p style="font-size: 14px; line-height: 140%;"> |
510 | + <span style="font-size: 12px; line-height: 16.8px; color: #000000;">${from}</span> |
511 | + </p> |
512 | + <p style="font-size: 14px; line-height: 140%;"> |
513 | + <span style="font-size: 12px; line-height: 16.8px; color: #000000;">© All Rights Reserved</span> |
514 | + </p> |
515 | + </div> |
516 | + </td> |
517 | + </tr> |
518 | + </tbody> |
519 | + </table> |
520 | + <!--[if (!mso)&(!IE)]><!--> |
521 | + </div> |
522 | + <!--<![endif]--> |
523 | + </div> |
524 | + </div> |
525 | + <!--[if (mso)|(IE)]></td><![endif]--> |
526 | + <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]--> |
527 | + </div> |
528 | + </div> |
529 | + </div> |
530 | + <!--[if (mso)|(IE)]></td><![endif]--> |
531 | + <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]--> |
532 | + </div> |
533 | + </div> |
534 | + </div> |
535 | + </td> |
536 | + </tr> |
537 | + </tbody> |
538 | + </table> |
539 | + <table id="u_body" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;min-width: 320px;Margin: 0 auto;background-color: #c9c9c9;width:100%" cellpadding="0" cellspacing="0"> |
540 | + <tbody> |
541 | + <tr style="vertical-align: top"> |
542 | + <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top"> |
543 | + <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color: #c9c9c9;"><![endif]--> |
544 | + <div class="u-row-container" style="padding: 0px;background-color: #c9c9c9"> |
545 | + <div class="u-row" style="margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background-color: #c9c9c9;"> |
546 | + <div style="border-collapse: collapse;display: table;width: 100%;height: 100%;background-color: transparent;"> |
547 | + <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: #c9c9c9;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #c9c9c9;"><![endif]--> |
548 | + <!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]--> |
549 | + <div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;"> |
550 | + <div style="height: 100%;width: 100% !important;"> |
551 | + <!--[if (!mso)&(!IE)]><!--> |
552 | + <div style="height: 100%; padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"> |
553 | + <!--<![endif]--> |
554 | + <table style="font-family:'Lato',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> |
555 | + <tbody> |
556 | + <tr> |
557 | + <td style="overflow-wrap:break-word;word-break:break-word;padding:15px;font-family:'Lato',sans-serif;" align="left"> |
558 | + <table height="0px" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;border-top: 1px solid #c9c9c9;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%"> |
559 | + <tbody> |
560 | + <tr style="vertical-align: top"> |
561 | + <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top;font-size: 0px;line-height: 0px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%"> <span> </span> </td> |
562 | + </tr> |
563 | + </tbody> |
564 | + </table> |
565 | + </td> |
566 | + </tr> |
567 | + </tbody> |
568 | + </table> |
569 | + <!--[if (!mso)&(!IE)]><!--> |
570 | + </div> |
571 | + <!--<![endif]--> |
572 | + </div> |
573 | + </div> |
574 | + <!--[if (mso)|(IE)]></td><![endif]--> |
575 | + <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]--> |
576 | + </div> |
577 | + </div> |
578 | + </div> |
579 | + <!--[if mso]></div><![endif]--> |
580 | + <!--[if IE]></div><![endif]--> |
581 | +</body> |
582 | + |
583 | +</html> |
584 | diff --git a/clients/freepaid/templates/welcomeMail.js b/clients/freepaid/templates/welcomeMail.js |
585 | new file mode 100644 |
586 | index 0000000..a752a4f |
587 | --- /dev/null |
588 | +++ b/clients/freepaid/templates/welcomeMail.js |
589 | @@ -0,0 +1,23 @@ |
590 | + |
591 | + |
592 | +module.exports = async (recipient, link, html) => { |
593 | + |
594 | + let baseName = recipient.agency.replace(/^/, 'https://').replace(/https?:\/\//g, '').replace(/\/$/, ''); |
595 | + let from = baseName.slice(0, 1).toString().toUpperCase() + baseName.slice(1).split('.')[0].replace('data', ' Data').replace('gbservices', 'GB Services'); |
596 | + let subject = `Welcome to the ${from} family!`; |
597 | + let { name, surname } = recipient; |
598 | + |
599 | + const baseUrl = recipient.agency.replace(/^/, 'https://'); |
600 | + let logo; |
601 | + |
602 | + logo = baseName + '.png'; |
603 | + logo = `${baseUrl}/img/logos/${logo}`; |
604 | + |
605 | + |
606 | + |
607 | +const mailOptions = { |
608 | + from: `"${from}" <[email protected]>`, |
609 | + to: recipient.email, |
610 | + subject, |
611 | + html |
612 | +}; |
613 | diff --git a/methods/.sendMail.js b/methods/.sendMail.js |
614 | new file mode 100644 |
615 | index 0000000..75c74bc |
616 | --- /dev/null |
617 | +++ b/methods/.sendMail.js |
618 | @@ -0,0 +1,136 @@ |
619 | + |
620 | +const fs = require('fs'); |
621 | +const Template = require('../models/template'); |
622 | +const Client = require('../models/client'); |
623 | +const path = require('path'); |
624 | +const nodemailer = require('nodemailer'); |
625 | +require('colors'); |
626 | + |
627 | + |
628 | +const freepaid = (recipient, link) => { |
629 | + |
630 | + let baseName = recipient.agency.replace(/^/, 'https://').replace(/https?:\/\//g, '').replace(/\/$/, ''); |
631 | + let from = baseName.slice(0, 1).toString().toUpperCase() + baseName.slice(1).split('.')[0].replace('data', ' Data').replace('gbservices', 'GB Services'); |
632 | + let subject = `Welcome to the ${from} family!`; |
633 | + let { name, surname, agency } = recipient; |
634 | + |
635 | + const baseUrl = agency.replace(/https?:\/\//g, '').replace(/^/, 'https://'); |
636 | + let logo; |
637 | + |
638 | + logo = baseName + '.png'; |
639 | + logo = `${baseUrl}/img/logos/${logo}`; |
640 | + |
641 | + |
642 | + return { from, subject, name, surname, logo, link }; |
643 | + |
644 | +}; |
645 | + |
646 | + |
647 | +module.exports = async (recipient, link, type) => { |
648 | + |
649 | + |
650 | + |
651 | + const { from, to, subject, html } = array; |
652 | + const info = await transporter.sendMail({ |
653 | + from: `${from} <[email protected]>`, to, subject, html |
654 | + }).then((info) => { |
655 | + console.log(`Email sent to ${to}. ID: ${info}`); |
656 | + }).catch((err) => { |
657 | + console.log(err); |
658 | + }); |
659 | +} |
660 | + |
661 | + |
662 | +const mailOptions = { |
663 | + from: `"${from}" <[email protected]>`, |
664 | + to: recipient.email, |
665 | + subject, |
666 | + html |
667 | +}; |
668 | + |
669 | + |
670 | +// await mail({from: bName, to: email, subject:'E-mail Verification - ' + bName, html: ` |
671 | +// |
672 | +// |
673 | +// |
674 | +// |
675 | +// |
676 | +// |
677 | +// |
678 | +// |
679 | +// |
680 | +// |
681 | +// |
682 | +// |
683 | +// |
684 | +// |
685 | +// |
686 | +// |
687 | +// |
688 | +//const sendMail = async (req, res) => { |
689 | +// |
690 | +// |
691 | +// |
692 | +// |
693 | +//const sendMail = async (client, token, type, recipient, html) => { |
694 | +// |
695 | +// client = await getClient(client, token); |
696 | +// |
697 | +// if (!client) { return { error: 'Invalid client' } } |
698 | +// else if (client.token !== token) { return { error: 'Invalid token' } } |
699 | +// else { const transporter = nodemailer.createTransport(client.config) } |
700 | +// |
701 | +// switch (client.name) { |
702 | +// case 'html': |
703 | +// |
704 | +// |
705 | +// |
706 | +// |
707 | +//let subject, html, baseName; |
708 | +// |
709 | +//const transporter = nodemailer.createTransport(config); |
710 | +// |
711 | +//const sendMail = (type, recipient, token) => { |
712 | +// |
713 | +// const |
714 | +// |
715 | +// switch (type) { |
716 | +// case 'user-register': |
717 | +// l |
718 | +// |
719 | +// |
720 | +// |
721 | +// let { agency, user, to, type, link } = array; |
722 | +// |
723 | +// let baseName = agency; |
724 | +// let from = agency.slice(0, 1).toString().toUpperCase() + agency.slice(1).split('.')[0].replace('data', ' Data').replace('gbservices', 'GB Services'); |
725 | +// |
726 | +// let { name, surname } = user; |
727 | +// |
728 | +// const baseUrl = `https://${agency}/`; |
729 | +// let logo; |
730 | +// |
731 | +// logo = baseName + '.png'; |
732 | +// logo = `${baseUrl}img/logos/${logo}`; |
733 | +// |
734 | +// if(type == 'userReg' || type == 'affiliateReg') { |
735 | +// subject = 'Welcome to ' + from; |
736 | +// html = register({ from, name, surname, link, baseUrl, baseName, logo }); |
737 | +// } else if(type == 'userReset' || type == 'affiliateReset') { |
738 | +// subject = 'Password Reset - ' + from; |
739 | +// html = reset({ from, name, surname, link, baseUrl, baseName, logo }); |
740 | +// } else { return; } |
741 | +// |
742 | +// |
743 | +// |
744 | +// const info = await transporter.sendMail({ |
745 | +// from: `${from} <[email protected]>`, to, subject, html |
746 | +// }).then((info) => { |
747 | +// console.log(`Email sent to ${to}. ID: ${info}`); |
748 | +// }).catch((err) => { |
749 | +// console.log(err); |
750 | +// }); |
751 | +// |
752 | +// return info; |
753 | +//} |
754 | +// |
755 | diff --git a/methods/main.js b/methods/main.js |
756 | new file mode 100644 |
757 | index 0000000..ed25cda |
758 | --- /dev/null |
759 | +++ b/methods/main.js |
760 | @@ -0,0 +1,97 @@ |
761 | + |
762 | +const Client = require('../models/client'); |
763 | +const Template = require('../models/template'); |
764 | +const nodemailer = require('nodemailer'); |
765 | +const { mkConfig, mkMail } = require('./mkMail'); |
766 | +const { updateCliets, updateTemplates } = require('./updateDB'); |
767 | +require('colors'); |
768 | + |
769 | +const getClient = (name, token) => { |
770 | + const client = Client.findOne({ name, token }); |
771 | + if(!client) return false; |
772 | + return client; |
773 | +} |
774 | + |
775 | + |
776 | +const getTemplate = async (name, token, type) => { |
777 | + |
778 | + const client = await getClient(name, token); |
779 | + if(!client) return false; |
780 | + |
781 | + const template = await Template.findOne({ client: client._id}); |
782 | + if(!template) return false; |
783 | + |
784 | + const html = template.emails.find(e => e.name === type).html; |
785 | + if(!html) return false; |
786 | + |
787 | + const requires = template.emails.find(e => e.name === type).requires; |
788 | + if(!requires) return false; |
789 | + |
790 | + return { html, requires }; |
791 | + |
792 | +} |
793 | + |
794 | +const mail = async (recipient, link, name, token, type) => { |
795 | + |
796 | + const { html, requires } = await getTemplate(name, token, type); |
797 | + if(!html || !requires) return false; |
798 | + |
799 | + const client = await getClient(name, token); |
800 | + if(!client) return false; |
801 | + |
802 | + const transporter = nodemailer.createTransport(client.config); |
803 | + if(!transporter) return false; |
804 | + |
805 | + const inputs = mkConfig(client, recipient, link); |
806 | + if(!inputs) return false; |
807 | + |
808 | + const mail = mkMail(client, type, inputs); |
809 | + if(!mail) return false; |
810 | + |
811 | + const { from, to, subject, Html } = mail; |
812 | + if(!from || !to || !subject || !Html) return false; |
813 | + |
814 | + const info = await transporter.sendMail({ from, to, subject, html: Html }); |
815 | + if(!info) return false; |
816 | + |
817 | + console.log(`Message sent: ${info.messageId}`.green); |
818 | + |
819 | + for(var obj in info) { |
820 | + Object.keys(info[obj]).forEach(key => { |
821 | + console.log(key.green + ': ' + info[obj][key]); |
822 | + }); |
823 | + } |
824 | + return info; |
825 | +} |
826 | + |
827 | +const test = async (recipient, link, name, token, type) => { |
828 | + |
829 | + const { html, requires } = await getTemplate(name, token, type); |
830 | + if(!html || !requires) return false; |
831 | + |
832 | + const client = await getClient(name, token); |
833 | + if(!client) return false; |
834 | + |
835 | + const transporter = nodemailer.createTransport(client.config); |
836 | + if(!transporter) return false; |
837 | + |
838 | + const inputs = mkConfig(client, recipient, link); |
839 | + if(!inputs) return false; |
840 | + |
841 | + const mail = mkMail(client, type, inputs); |
842 | + if(!mail) return false; |
843 | + |
844 | + const { from, to, subject, Html } = mail; |
845 | + if(!from || !to || !subject || !Html) return false; |
846 | + |
847 | + console.log('From: '.green + from); |
848 | + console.log('To: '.green + to); |
849 | + console.log('Subject: '.green + subject); |
850 | + console.log('Html: '.green + Html); |
851 | + |
852 | + return true; |
853 | + |
854 | +} |
855 | + |
856 | +module.exports = { getClient, getTemplate, mail, test, updateCliets, updateTemplates }; |
857 | + |
858 | diff --git a/methods/mkMail.js b/methods/mkMail.js |
859 | new file mode 100644 |
860 | index 0000000..857af98 |
861 | --- /dev/null |
862 | +++ b/methods/mkMail.js |
863 | @@ -0,0 +1,89 @@ |
864 | + |
865 | +const Template = require('../models/template'); |
866 | + |
867 | +const mkConfig = (client, recipient, link) => { |
868 | + |
869 | + try { |
870 | + if (client.name == 'FREEPAID') { |
871 | + let { name, surname, agency } = recipient, |
872 | + logo, baseName = recipient.agency.replace(/^/, 'https://').replace(/https?:\/\//g, '').replace(/\/$/, ''), |
873 | + from = baseName.slice(0, 1).toString().toUpperCase() + baseName.slice(1).split('.')[0].replace('data', ' Data').replace('gbservices', 'GB Services'), |
874 | + subject = `Welcome to the ${from} family!`, baseUrl = agency.replace(/https?:\/\//g, '').replace(/^/, 'https://'); |
875 | + |
876 | + logo = baseName + '.png'; |
877 | + logo = `${baseUrl}/img/logos/${logo}`; |
878 | + |
879 | + return { from, subject, name, surname, logo, link, baseUrl, agency, baseName }; |
880 | + |
881 | + } else if (client.name == 'CONCISE') { |
882 | + |
883 | + return |
884 | + } |
885 | + |
886 | + } catch (err) { |
887 | + console.log(err); |
888 | + } |
889 | + |
890 | +} |
891 | + |
892 | + |
893 | +const mkMail = (client, type, inputs) => { |
894 | + |
895 | + try { |
896 | + if (client.name == 'FREEPAID') { |
897 | + |
898 | + const templates = await Template.findOne({ client: client._id }); |
899 | + const { from, subject, name, surname, logo, link, baseUrl, agency, baseName } = inputs; |
900 | + |
901 | + if(type == 'user-register') { |
902 | + |
903 | + const template = templates.find(t => t.name == 'user-register'); |
904 | + if (!template) return false; |
905 | + |
906 | + const html = template.html.replace(/\${name}/g, name) |
907 | + .replace(/\${surname}/g, surname) |
908 | + .replace(/\${logo}/g, logo) |
909 | + .replace(/\${link}/g, link) |
910 | + .replace(/\${baseUrl}/g, baseUrl) |
911 | + .replace(/\${agency}/g, agency) |
912 | + .replace(/\${baseName}/g, baseName) |
913 | + .replace(/\${from}/g, from); |
914 | + |
915 | + const to = `${from} <${client.sender}>`; |
916 | + |
917 | + return { from, to, subject, Html: html }; |
918 | + |
919 | + } else if (type == 'affiliate-register') { |
920 | + |
921 | + const template = templates.find(t => t.name == 'affiliate-register'); |
922 | + if (!template) return false; |
923 | + |
924 | + const html = template.html.replace(/\${name}/g, name) |
925 | + .replace(/\${surname}/g, surname) |
926 | + .replace(/\${logo}/g, logo) |
927 | + .replace(/\${link}/g, link) |
928 | + .replace(/\${baseUrl}/g, baseUrl) |
929 | + .replace(/\${agency}/g, agency) |
930 | + .replace(/\${baseName}/g, baseName) |
931 | + .replace(/\${from}/g, from); |
932 | + |
933 | + const to = `${from} <${client.sender}>`; |
934 | + |
935 | + return { from, to, subject, Html: html }; |
936 | + |
937 | + } |
938 | + |
939 | + } else if (client.name == 'CONCISE') { |
940 | + |
941 | + return |
942 | + |
943 | + } |
944 | + |
945 | + } catch (err) { |
946 | + console.log(err); |
947 | + } |
948 | + |
949 | +} |
950 | + |
951 | +module.exports = { mkConfig, mkMail }; |
952 | + |
953 | diff --git a/methods/mkTemplates.js b/methods/mkTemplates.js |
954 | deleted file mode 100644 |
955 | index 5d172b8..0000000 |
956 | --- a/methods/mkTemplates.js |
957 | +++ /dev/null |
958 | @@ -1,67 +0,0 @@ |
959 | - |
960 | -const fs = require('fs'); |
961 | -const Template = require('../models/template'); |
962 | -const Client = require('../models/client'); |
963 | - |
964 | -const freepaidTemplates = fs.readdirSync('../clients/freepaid/templates'); |
965 | -const conciseTemplate = fs.readdirSync('../clients/concise/templates'); |
966 | - |
967 | -const main = async (clientName) => { |
968 | - |
969 | - const client = await Client.findOne({ name: clientName }); |
970 | - |
971 | - if (!client) { |
972 | - console.log('Client not found'); |
973 | - return; |
974 | - } else if (client.name === 'FREEPAID') { |
975 | - |
976 | - freepaidTemplates.forEach(async (template) => { |
977 | - |
978 | - const templateName = template.split('.')[0]; |
979 | - const templatePath = `../clients/freepaid/templates/${template}`; |
980 | - const templateContent = fs.readFileSync(templatePath, 'utf8'); |
981 | - |
982 | - const template = Template.findOne({ client: client._id, }); |
983 | - |
984 | - if (!template) { |
985 | - const newTemplate = new Template({ |
986 | - client: client._id, |
987 | - emails: [{ name: templateName, html: templateContent }] |
988 | - }); |
989 | - await newTemplate.save(); |
990 | - } else { |
991 | - template.emails.push({ name: templateName, html: templateContent }); |
992 | - await template.save(); |
993 | - } |
994 | - |
995 | - }); |
996 | - |
997 | - } else if (client.name === 'CONCISE') { |
998 | - |
999 | - conciseTemplates.forEach(async (template) => { |