示例#1
0
        public VisitDTO ConvertItemToDto(Community_Visit item)
        {
            VisitDTO dto = new VisitDTO();

            dto.id              = item.id;
            dto.date            = item.date;
            dto.visitor_id      = item.visitor_id;
            dto.tab_id          = item.tab_id;
            dto.country         = item.country;
            dto.region          = item.region;
            dto.city            = item.city;
            dto.latitude        = item.latitude;
            dto.longitude       = item.longitude;
            dto.language        = item.language;
            dto.domain          = item.domain;
            dto.url             = item.url;
            dto.user_agent      = item.user_agent;
            dto.device_type     = item.device_type;
            dto.device          = item.device;
            dto.platform        = item.platform;
            dto.browser         = item.browser;
            dto.referrer_domain = item.referrer_domain;
            dto.referrer_url    = item.referrer_url;
            dto.server          = item.server;
            dto.campaign        = item.campaign;
            dto.session_id      = item.session_id;
            dto.request_id      = item.request_id;
            dto.last_request_id = item.last_request_id;

            return(dto);
        }
示例#2
0
        public HttpResponseMessage Put(VisitDTO dto)
        {
            try
            {
                dto = SaveVisit(dto);

                return(Request.CreateResponse(HttpStatusCode.OK, dto));
            }
            catch (Exception ex)
            {
                Exceptions.LogException(ex);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex));
            }
        }
示例#3
0
        public VisitDTO SaveVisit(VisitDTO dto)
        {
            Community_Visit visit = dc.Community_Visits.Where(i => i.id == dto.id).SingleOrDefault();

            if (visit == null)
            {
                visit = ConvertDtoToItem(null, dto);

                dc.Community_Visits.InsertOnSubmit(visit);
            }

            visit = ConvertDtoToItem(visit, dto);

            dc.SubmitChanges();

            return(ConvertItemToDto(visit));
        }
示例#4
0
        public Visit ConvertDtoToItem(Visit item, VisitDTO dto)
        {
            if (item == null)
            {
                item = new Visit();
            }

            if (dto == null)
            {
                return(item);
            }

            item.id              = dto.id;
            item.date            = dto.date;
            item.visitor_id      = dto.visitor_id;
            item.tab_id          = dto.tab_id;
            item.ip              = dto.ip;
            item.country         = dto.country;
            item.region          = dto.region;
            item.city            = dto.city;
            item.latitude        = dto.latitude;
            item.longitude       = dto.longitude;
            item.language        = dto.language;
            item.domain          = dto.domain;
            item.url             = dto.url;
            item.user_agent      = dto.user_agent;
            item.device_type     = dto.device_type;
            item.device          = dto.device;
            item.platform        = dto.platform;
            item.browser         = dto.browser;
            item.referrer_domain = dto.referrer_domain;
            item.referrer_url    = dto.referrer_url;
            item.server          = dto.server;
            item.campaign        = dto.campaign;
            item.session_id      = dto.session_id;
            item.request_id      = dto.request_id;
            item.last_request_id = dto.last_request_id;

            return(item);
        }
示例#5
0
        public HttpResponseMessage Get()
        {
            try
            {
                List <VisitDTO> dtos = new List <VisitDTO>();

                var query = dc.Community_Visits.AsQueryable();

                foreach (Community_Visit item in query)
                {
                    VisitDTO dto = ConvertItemToDto(item);
                    dtos.Add(dto);
                }

                return(Request.CreateResponse(HttpStatusCode.OK, dtos));
            }
            catch (Exception ex)
            {
                Exceptions.LogException(ex);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex));
            }
        }
        public void OnEndRequest(object s, EventArgs e)
        {
            try
            {
                HttpContext  Context  = ((HttpApplication)s).Context;
                HttpRequest  Request  = Context.Request;
                HttpResponse Response = Context.Response;

                HttpCookie cookie_visitor = null;
                HttpCookie cookie_session = null;
                HttpCookie cookie_request = null;

                int            visitor_id      = 0;
                Nullable <int> user_id         = null;
                Guid           session_id      = Guid.Empty;
                Guid           request_id      = Guid.Empty;
                Guid           last_request_id = Guid.Empty;

                PortalSettings _portalSettings = (PortalSettings)Context.Items["PortalSettings"];

                // get/set cookie if visitor tracking is enabled
                cookie_visitor = Request.Cookies["DNNVISITOR"];
                if (cookie_visitor != null)
                {
                    visitor_id = Convert.ToInt32(cookie_visitor.Value);
                }

                // update/create visitor
                var visitor = dc.Visitors.Where(i => i.id == visitor_id).SingleOrDefault();
                if (visitor == null)
                { // create Visitor record
                    visitor = new Visitor()
                    {
                        created_on_date = DateTime.Now
                    };
                    dc.Visitors.InsertOnSubmit(visitor);
                }

                // get User if authenticated
                if (Request.IsAuthenticated)
                {
                    UserInfo user = UserController.Instance.GetCurrentUserInfo();
                    if (user != null)
                    {
                        user_id = user.UserID;
                    }
                }

                // update the user_id if not set yet
                if (!visitor.user_id.HasValue && user_id.GetValueOrDefault() > 0)
                {
                    visitor.user_id = user_id;
                }
                dc.SubmitChanges();

                // only process requests for content pages
                if (_portalSettings != null && Request.Url.LocalPath.ToLower().EndsWith("default.aspx"))
                {
                    // filter web crawlers and other bots
                    if (String.IsNullOrEmpty(Request.UserAgent) == false && UserAgentFilter.Match(Request.UserAgent).Success == false)
                    {
                        // get last request cookie value
                        cookie_request = Request.Cookies["DNNREQUEST"];
                        if (cookie_request != null)
                        {
                            last_request_id = new Guid(cookie_request.Value);
                        }

                        // create new request cookie
                        request_id           = Guid.NewGuid();
                        cookie_request       = new HttpCookie("DNNREQUEST");
                        cookie_request.Value = request_id.ToString();
                        Response.Cookies.Add(cookie_request);

                        // get last session cookie value
                        cookie_session = Request.Cookies["DNNSESSION"];
                        if (cookie_session != null)
                        {
                            session_id = new Guid(cookie_session.Value);
                        }
                        else
                        {
                            // create a new session id
                            session_id             = Guid.NewGuid();
                            cookie_session         = new HttpCookie("DNNSESSION");
                            cookie_session.Value   = session_id.ToString();
                            cookie_session.Expires = DateTime.Now.AddMinutes(30);
                            Response.Cookies.Add(cookie_session);
                        }

                        // campaign
                        string campaign = string.Empty;
                        if (Request.QueryString["campaign"] != null)
                        {
                            campaign = Request.QueryString["campaign"];
                        }



                        // create Visitor cookie
                        cookie_visitor         = new HttpCookie("DNNVISITOR");
                        cookie_visitor.Value   = visitor.id.ToString();
                        cookie_visitor.Expires = DateTime.MaxValue;
                        Response.Cookies.Add(cookie_visitor);

                        string domain = Request.Url.Host + Request.ApplicationPath;
                        if (domain.EndsWith("/"))
                        {
                            domain = domain.Substring(0, domain.Length - 1);
                        }

                        // get referrer URL
                        string url_referrer = string.Empty;
                        if (Request.UrlReferrer != null)
                        {
                            url_referrer = Request.UrlReferrer.ToString();
                        }

                        string domain_referrer = string.Empty;
                        if (!string.IsNullOrEmpty(url_referrer))
                        {
                            Uri Uri = new Uri(url_referrer);
                            domain_referrer = Uri.Host;
                        }

                        // get browser language
                        string language = string.Empty;
                        if (Request.UserLanguages != null)
                        {
                            if (Request.UserLanguages.Length != 0)
                            {
                                language = Request.UserLanguages[0].ToLowerInvariant().Trim();
                            }
                        }


                        // ip address
                        string ip = Request.UserHostAddress;

                        // url
                        string url = Request.RawUrl;

                        //user agenet
                        string user_agent = Request.UserAgent;

                        // create visit object
                        VisitDTO visitDTO = new VisitDTO()
                        {
                            date            = DateTime.Now,
                            visitor_id      = visitor.id,
                            tab_id          = _portalSettings.ActiveTab.TabID,
                            ip              = ip,
                            country         = "",
                            region          = "",
                            city            = "",
                            latitude        = "",
                            longitude       = "",
                            language        = language,
                            domain          = domain,
                            url             = url,
                            user_agent      = user_agent,
                            device_type     = "Desktop",
                            device          = "",
                            platform        = "",
                            browser         = "",
                            referrer_domain = domain_referrer,
                            referrer_url    = url_referrer,
                            server          = "",
                            activity        = "click",
                            campaign        = campaign,
                            session_id      = session_id,
                            request_id      = request_id,
                            last_request_id = last_request_id
                        };

                        visitDTO = visitController.ProcessVisit(visitDTO);

                        Visit visit = visitController.ConvertDtoToItem(null, visitDTO);

                        dc.Visits.InsertOnSubmit(visit);
                        dc.SubmitChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                Exceptions.LogException(ex);
            }
        }
示例#7
0
        public VisitDTO ProcessVisit(VisitDTO visit)
        {
            // get server
            visit.server = Dns.GetHostName();

            //visit.ip = "104.185.202.20"; // for testing on localhost, should resolve to Atlanta, GA...

            // get geo info based on IP
            if (!string.IsNullOrEmpty(visit.ip) && visit.ip != "127.0.0.1")
            {
                try
                {
                    using (var objGeoIP2DB = new DatabaseReader(string.Concat(AppDomain.CurrentDomain.BaseDirectory, "App_Data\\GeoIP2-City.mmdb")))
                    {
                        var objGeoIP2 = objGeoIP2DB.City(visit.ip);

                        if (objGeoIP2.Country.Name != null && objGeoIP2.Country.Name != "N/A")
                        {
                            visit.country = objGeoIP2.Country.Name;
                        }
                        if (objGeoIP2.MostSpecificSubdivision.Name != null)
                        {
                            visit.region = objGeoIP2.MostSpecificSubdivision.Name;
                        }
                        if (objGeoIP2.City.Name != null)
                        {
                            visit.city = objGeoIP2.City.Name;
                        }
                        visit.latitude  = objGeoIP2.Location.Latitude.ToString();
                        visit.longitude = objGeoIP2.Location.Longitude.ToString();
                    }
                }
                catch
                {
                    // IP address cannot be resolved
                }
            }

            //get user agent properties using the 51Degrees database
            if (!string.IsNullOrEmpty(visit.user_agent))
            {
                var device = WebProvider.ActiveProvider?.Match(visit.user_agent);
                if (device != null)
                {
                    if (device["IsMobile"] != null && device["IsMobile"].ToString() == "True")
                    {
                        visit.device_type = "Mobile";
                    }

                    if (device["HardwareVendor"] != null && device["HardwareVendor"].ToString() != "Unknown")
                    {
                        visit.device += device["HardwareVendor"].ToString(); // only available in Premium Data
                    }
                    if (device["HardwareModel"] != null && device["HardwareModel"].ToString() != "Unknown")
                    {
                        visit.device += device["HardwareModel"]; // only available in Premium Data
                    }
                    if (visit.device == "")
                    {
                        visit.device = "Unavailable";
                    }

                    if (device["PlatformVendor"] != null && device["PlatformVendor"].ToString() != "Unknown")
                    {
                        visit.platform += device["PlatformVendor"] + " "; // only available in Premium Data
                    }
                    if (device["PlatformName"] != null && device["PlatformName"].ToString() != "Unknown")
                    {
                        visit.platform += device["PlatformName"] + " ";
                    }
                    if (device["PlatformVersion"] != null && device["PlatformVersion"].ToString() != "Unknown")
                    {
                        visit.platform += device["PlatformVersion"];
                    }
                    if (visit.platform == "")
                    {
                        visit.platform = "Unavailable";
                    }

                    if (device["BrowserVendor"] != null && device["BrowserVendor"].ToString() != "Unknown")
                    {
                        visit.browser += device["BrowserVendor"] + " "; // only available in Premium Data
                    }
                    if (device["BrowserName"] != null && device["BrowserName"].ToString() != "Unknown")
                    {
                        visit.browser += device["BrowserName"] + " ";
                    }
                    if (device["BrowserVersion"] != null && device["BrowserVersion"].ToString() != "Unknown")
                    {
                        visit.browser += device["BrowserVersion"];
                    }
                    if (visit.browser == "")
                    {
                        visit.browser = "Unavailable";
                    }
                }
            }

            return(visit);
        }