public async Task Invoke(HttpContext context) { try { context.Response.ContentType = "text/html"; var requestHost = context.Request.Headers["Referer"]; if (string.IsNullOrEmpty(requestHost)) { await context.Response.WriteAsync("No Iframe! Don't Cheat!"); return; } string host = new Uri(requestHost).Authority.ToString(); var topdomain = ""; if (host.IndexOf(".") == host.LastIndexOf(".")) { topdomain = host; } else { topdomain = host.Substring(host.IndexOf(".") + 1); } var hostData = await _hostCache.GetHostAsync(topdomain); if (hostData == null) { return; } string userCookie = context.Request.Cookies[_configuration.CookieName]; //try //{ // var logAgent= _redisCache.GetDatabase(DataAccess.RedisDatabases.CacheData).StringGet("LogAgent"); // if (logAgent.HasValue) // { // var userAgent = context.Request.Headers["User-Agent"].ToString(); // var agentstring = string.IsNullOrEmpty(userAgent.ToString()) ? "unknown" : userAgent.ToString(); // var agentDb = _redisCache.GetDatabase(DataAccess.RedisDatabases.Logs); // await agentDb.HashIncrementAsync("AgentCounter",agentstring); // } //} //catch //{ //} long userId = 0; if (userCookie == null) { userId = await _userIdSetter.GetNewUserIdAsync(); var co = new CookieOptions() { Expires = DateTime.Now.AddYears(5), SameSite = SameSiteMode.None }; if (_configuration.CookieDomain != ".") { co.Domain = _configuration.CookieDomain; } context.Response.Cookies.Append(_configuration.CookieName, userId.ToString(), co); } else { var resultofparseCookie = long.TryParse(userCookie, out userId); if (!resultofparseCookie) { return; } } if (await _crowlerCache.IsCrowler(userId)) { return; } var rawhtml = "<!DOCTYPE html><html><head><meta charset=\"utf-8\" /><title></title></head><body>partner_iframes<script>var sendingData = {};sendingData.message = \"GetCookie\";sendingData.UserId = user_identity;sendingData.FinalizePage = 'finalize_page';sendingData.HostId = host_identity;sendingData.AddToCart = 'add_to_cart';parent.postMessage(JSON.stringify(sendingData), \"*\");</script></body></html>"; var html = rawhtml.Replace("user_identity", userId.ToString()).Replace("host_identity", hostData.Id.ToString()).Replace("add_to_cart", hostData.AddToCardId).Replace("finalize_page", hostData.FinalizePage); var partners = await _partnerCache.ListAsync(); var pixelHtml = ""; foreach (var item in partners) { if (!string.IsNullOrEmpty(item.CookieSyncAddress)) { var partnerAddress = item.CookieSyncAddress?.Replace("@StickyId", userId.ToString()); pixelHtml += "<iframe src=\"" + partnerAddress + "\"></iframe>"; } } html = html.Replace("partner_iframes", pixelHtml); await context.Response.WriteAsync(html); } catch (Exception ex) { await _errorLogger.LogError(ex.Message); } }