public async Task InvokeAsync(HttpContext context, IEncryptionKeyService encryptionKeyService, IClientService clientService) { if (context.Request.HasFormContentType) { NameValueCollection fcnvc = context.Request.Form.AsNameValueCollection(); Dictionary <string, StringValues> dictValues = new Dictionary <string, StringValues>(); var option = _options.Where(m => m.Path == context.Request.Path).FirstOrDefault(); if (option != null) { foreach (var key in fcnvc.AllKeys) { var parameter = option.Parameters.Where(m => m == key).FirstOrDefault(); if (parameter != null) { if (option.RedirectPath?.Length > 0) { context.Request.Path = new PathString(option.RedirectPath); } var client = clientService.GetClientsAsync(fcnvc["client_id"]).Result.Clients.Where(m => m.ClientId == fcnvc["client_id"]).FirstOrDefault(); var encryptionKey = encryptionKeyService.GetEncryptionKeyByClientIdAsync(client?.Id ?? 0).Result; if (encryptionKey != null) { var encryptionSecret = Encoding.ASCII.GetBytes(encryptionKey.EncryptionSecret); var decryptText = DecryptStringFromBytes_Aes(fcnvc[key], encryptionSecret); var decodeStrings = decryptText.Split("]-["); DateTime dateClientSecret = DateTime.ParseExact(decodeStrings[1].Replace("]", ""), "yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); var minutes = (DateTime.Now - dateClientSecret).TotalMinutes; if (minutes < 1 && minutes > -5 || true) { var valueParameter = decodeStrings[0].Replace("[", ""); fcnvc.Set(parameter, valueParameter); } } } } foreach (var key in fcnvc.AllKeys) { dictValues.Add(key, fcnvc.Get(key)); } var fc = new FormCollection(dictValues); context.Request.Form = fc; } } await _next(context); }
public async Task <IActionResult> Client(int id) { if (id == 0) { var clientDto = _clientService.BuildClientViewModel(); return(View(clientDto)); } var client = await _clientService.GetClientAsync((int)id); client = _clientService.BuildClientViewModel(client); var encryptionKey = await _encryptionKeyService.GetEncryptionKeyByClientIdAsync(id); client.EncryptionKey = encryptionKey?.EncryptionSecret; return(View(client)); }