Error executing template "Designs/Web/Paragraph/RegistrationPayment.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_8e78209977d2434a996122be4408deac.Xor.HexToBytes(String hex) in e:\dynamicweb.net\solutions\Skabertrangweb\nijmegenmarchen.net.dynamicweb-cms.com\files\Templates\Designs\Web\Paragraph\RegistrationPayment.cshtml:line 25
at CompiledRazorTemplates.Dynamic.RazorEngine_8e78209977d2434a996122be4408deac.Xor.XorDecrypt(String value) in e:\dynamicweb.net\solutions\Skabertrangweb\nijmegenmarchen.net.dynamicweb-cms.com\files\Templates\Designs\Web\Paragraph\RegistrationPayment.cshtml:line 60
at CompiledRazorTemplates.Dynamic.RazorEngine_8e78209977d2434a996122be4408deac.Execute() in e:\dynamicweb.net\solutions\Skabertrangweb\nijmegenmarchen.net.dynamicweb-cms.com\files\Templates\Designs\Web\Paragraph\RegistrationPayment.cshtml:line 94
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @using System.Text
2 @functions {
3 public class Xor {
4 // https://www.random.org/integers/?num=16&min=1&max=255&col=1&base=10&format=html&rnd=new
5 private static int[] XorKeys {
6 get {
7 return new[] { 122, 181, 133, 137, 230, 71, 161, 93, 254, 78, 135, 190, 88, 74, 141, 45 };
8 }
9 }
10
11 private static string BytesToHex(byte[] bytes) {
12 var c = new char[bytes.Length * 2];
13
14 for (var i = 0; i < bytes.Length; i++) {
15 var b = (byte)(bytes[i] >> 4);
16 c[i * 2] = (char)(b > 9 ? b + 0x37 + 0x20 : b + 0x30);
17 b = (byte)(bytes[i] & 0xF);
18 c[i * 2 + 1] = (char)(b > 9 ? b + 0x37 + 0x20 : b + 0x30);
19 }
20
21 return new string(c);
22 }
23
24 private static byte[] HexToBytes(string hex) {
25 var bytes = new byte[hex.Length / 2];
26
27 for (var i = 0; i < bytes.Length; i++) {
28 var c = hex[i * 2];
29 bytes[i] = (byte)((c > '9' ? (c > 'Z' ? (c - 'a' + 10) : (c - 'A' + 10)) : (c - '0')) << 4);
30 c = hex[i * 2 + 1];
31 bytes[i] |= (byte)(c > '9' ? (c > 'Z' ? (c - 'a' + 10) : (c - 'A' + 10)) : (c - '0'));
32 }
33
34 return bytes;
35 }
36
37 public static string XorEncrypt(string value) {
38 var buffer = Encoding.UTF8.GetBytes(value);
39 var hashed = new byte[buffer.Length + 16];
40 var keys = XorKeys;
41 var salt = (Guid.NewGuid()).ToByteArray();
42 var j = 0;
43
44 for (var i = 0; i < 8; i++) {
45 hashed[i] = (byte)(salt[i] ^ (uint)keys[i]);
46 hashed[i + 8 + buffer.Length] = (byte)(salt[i + 8] ^ (uint)keys[i + 8]);
47 }
48
49 for (var i = 0; i < buffer.Length; i++) {
50 if (j >= 16)
51 j = 0;
52 hashed[i + 8] = (byte)((buffer[i] ^ (uint)salt[j]) ^ 135u);
53 j++;
54 }
55
56 return BytesToHex(hashed);
57 }
58
59 public static string XorDecrypt(string value) {
60 var hashed = HexToBytes(value);
61 var buffer = new byte[hashed.Length - 16];
62 var keys = XorKeys;
63 var salt = new byte[16];
64 var j = 0;
65
66 for (var i = 0; i < 8; i++) {
67 salt[i] = (byte)(hashed[i] ^ (uint)keys[i]);
68 salt[i + 8] = (byte)(hashed[i + 8 + buffer.Length] ^ (uint)keys[i + 8]);
69 }
70
71 for (var i = 0; i < buffer.Length; i++) {
72 if (j >= 16)
73 j = 0;
74 buffer[i] = (byte)((hashed[i + 8] ^ 135u) ^ salt[j]);
75 j++;
76 }
77
78 return Encoding.UTF8.GetString(buffer);
79 }
80 }
81 }
82 @using System.Data.SqlClient
83 @using System.Security.Cryptography
84 @using System.Web
85 @{
86 var paragraphId = GetInteger("ParagraphID");
87 var designBaseUrl = GetString("Template:DesignBaseUrl");
88 var receiptPage = GetString("Item.ReceiptPage");
89 var text = GetString("Item.Text");
90
91 var hashed = HttpContext.Current.Request["hashed"];
92 var actioncode = HttpContext.Current.Request["actioncode"];
93
94 var unhash = Xor.XorDecrypt(hashed).Split(':');
95 var rowId = int.Parse(unhash[1]);
96
97 var type = default(string);
98 var data = default(string);
99
100 using (var connection = Dynamicweb.Data.Database.CreateConnection()) {
101 using (var command = connection.CreateCommand()) {
102 command.CommandText = "SELECT * FROM Tilmelding WHERE TilmeldingID = @id";
103 command.Parameters.Add(new SqlParameter("@id", rowId));
104
105 using (var reader = command.ExecuteReader()) {
106 if (reader.Read()) {
107 type = reader.GetString(reader.GetOrdinal("Tilmelding_Type"));
108 data = reader.GetString(reader.GetOrdinal("Tilmelding_Data"));
109 }
110 }
111 }
112 }
113
114 var json = Newtonsoft.Json.Linq.JObject.Parse(data);
115
116 var n_secret = "f3fa19cb2fbc10558bdd36956679d95a2597d622a483a9e2502039095e9daee74ebca9b38ec02e64f65b1ddae964a07a0616fa5aff78f2f6653a3391c40ab5e3";
117 var n_params = new Dictionary<string, string>
118 {
119 { "onpay_gatewayid" , "20081020106418" },
120 { "onpay_currency" , "208" },
121 { "onpay_amount" , (int.Parse((string)json["PrisNijmegen"]) * 100).ToString() },
122 { "onpay_reference" , "DW" + (20000000 + rowId) },
123 { "onpay_accepturl" , "https://" + HttpContext.Current.Request.Url.Host + "/Files/Handlers/PaymentHandler.ashx?methodName=Accept&rid=" + rowId + "&payment=" + Pageview.Page.ID + "&receipt=" + receiptPage + "&hashed=" + hashed },
124 { "onpay_declineurl" , "https://" + HttpContext.Current.Request.Url.Host + "/Files/Handlers/PaymentHandler.ashx?methodName=Decline&rid=" + rowId + "&payment=" + Pageview.Page.ID + "&receipt=" + receiptPage + "&hashed=" + hashed },
125 { "onpay_callbackurl" , "https://" + HttpContext.Current.Request.Url.Host + "/Files/Handlers/PaymentHandler.ashx?methodName=Callback&rid=" + rowId + "&payment=" + Pageview.Page.ID + "&receipt=" + receiptPage + "&hashed=" + hashed }
126 };
127
128 var n_queries = string.Join("&", n_params.Where(o => o.Key.StartsWith("onpay_")).OrderBy(o => o.Key).Select(o => HttpUtility.UrlEncode(o.Key) + "=" + HttpUtility.UrlEncode(o.Value))).ToLower();
129
130 using (var sha1 = new HMACSHA1(Encoding.UTF8.GetBytes(n_secret))) {
131 var bytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(n_queries));
132
133 n_params["onpay_hmac_sha1"] = string.Join(string.Empty, bytes.Select(o => o.ToString("x2")));
134 }
135 }
136 <div class="container-fluid">
137 <div class="registration-wrapper">
138 <h1>Tilmelding til Nijmegen @(DateTime.Now.Year)</h1>
139 <p><strong>(Trin 2 af 2)</strong></p>
140
141 <p>Du har nu gennemført trin 1 i tilmeldingen til årets Nijmegenmarch:</p>
142
143 <div class="row">
144 <div class="col-sm-3">Navn:</div>
145 <div class="col-sm-9">@(json["Navn"])</div>
146 </div>
147 <div class="row">
148 <div class="col-sm-3">Værnsgren:</div>
149 <div class="col-sm-9">
150 @if ((string)json["TFR"] == "Beredskab") {
151 @("BRS")
152 } else {
153 if (((string)json["TFR"]).StartsWith("FSV ")) {
154 @("FSV")
155 } else {
156 @("HJV")
157 }
158 }
159 </div>
160 </div>
161 <div class="row">
162 <div class="col-sm-3">Hold/Individuel:</div>
163 <div class="col-sm-9">@(json["Hold"])</div>
164 </div>
165 <div class="row">
166 <div class="col-sm-3">Beløb til betaling:</div>
167 <div class="col-sm-9">@(json["PrisNijmegen"]),00 kr.</div>
168 </div>
169
170 <hr>
171
172 @(text)
173
174 @if (!string.IsNullOrWhiteSpace(actioncode)) {
175 <p class="bg-danger" style="padding: 15px;">
176 Vi havde problemer med at gennemføre din betaling. (Fejl: @(actioncode))<br>
177 Prøv igen.<br><br>
178 Hvis fejlen bliver ved med at opstå, så kontakt <a href="mailto:webmaster@nijmegen.dk">webmaster@nijmegen.dk</a>
179 </p>
180 }
181
182 <form method="post" action="https://onpay.io/window/v3/">
183 @foreach (var kvp in n_params) {
184 <input type="hidden" name="@(kvp.Key)" value="@(kvp.Value)">
185 }
186
187 <button type="submit" class="btn btn-englishholly">Betal</button>
188 </form>
189 </div>
190 </div>