Example #1
0
        /// <summary>
        /// Для unit-тестов
        /// </summary>
        public ContextController(Guid?accountId, Guid?userId)
        {
            ControllerContext = new ControllerContext();

            var request = new HttpRequest(
                string.Empty,
                @"//localhost/",
                string.Empty);

            RouteData.Values.Add("controller", GetType().Name.ToLower().Replace("controller", ""));

            var response = new HttpResponse(new StringWriter());

            ControllerContext.HttpContext = new HttpContextWrapper(new HttpContext(request, response));

            var routes = new RouteCollection();

            RouteConfig.RegisterRoutes(routes);
            Url = new System.Web.Mvc.UrlHelper(ControllerContext.RequestContext, routes);

            System.Web.HttpContext.Current = new HttpContext(request, response);

            var fullContext = new FullRequestContext(this);

            FullRequestContext.Current = fullContext;

            DbContext = fullContext.DbContext;

            if (accountId.HasValue)
            {
                var accountDbContext = DbContext.GetAccountDbContext(accountId.Value);
                if (userId.HasValue)
                {
                    var user = accountDbContext.GetUserRepository().GetById(userId.Value);
                    CurrentUser = UserHelper.UserInfoByUser(user, accountId.Value);
                    fullContext.SetUser(CurrentUser);
                }
            }
        }
Example #2
0
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            Thread.CurrentThread.CurrentCulture = CultureHelper.Russian;

            base.OnActionExecuting(filterContext);

            CurrentUser = UserHelper.CurrentUser;

            ProcessUserAgentTag(filterContext);

            if (Request.IsAuthenticated)
            {
                if (CurrentUser == null)
                {
                    Session.Abandon();
                    FormsAuthentication.SignOut();
                    filterContext.Result = new RedirectResult("~/");
                    return;
                }
            }

            if (!filterContext.IsChildAction)
            {
                var fullContext = new FullRequestContext(this);
                FullRequestContext.Current = fullContext;
            }
            DbContext = FullRequestContext.Current.DbContext;

            if (Request.IsAuthenticated && !CurrentUser.IsSwitched)
            {
                // не будем логировать действия системных пользователей
                // а то когда смотришь лог, в самых актуальных записях видишь свои же запросы
                if (!string.Equals(CurrentUser.AccountName, SystemAccountHelper.SystemAccountName, StringComparison.OrdinalIgnoreCase))
                {
                    var uri = filterContext.HttpContext.Request.Url;
                    if (uri != null && !filterContext.IsChildAction && !filterContext.HttpContext.Request.IsAjaxRequest())
                    {
                        var actionName     = filterContext.ActionDescriptor.ActionName;
                        var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
                        var baseUrl        = controllerName + "/" + actionName;
                        ConfigDbServicesHelper.GetUserAccountActivityService().Add(CurrentUser.Id, baseUrl);
                    }
                }

                var control = MvcApplication.ComponentControl;

                var message = string.Format(
                    "Пользователь {0} c IP {1}",
                    CurrentUser.Login,
                    FullRequestContext.Current.Ip);

                control
                .CreateComponentEvent("Пользователь на сайте", message)
                .SetImportance(Api.EventImportance.Success)
                .SetJoinInterval(TimeSpan.FromMinutes(Session.Timeout))
                .SetJoinKey(CurrentUser.Login, FullRequestContext.Current.Ip)
                .SetProperty("UserAgent", filterContext.HttpContext.Request.UserAgent)
                .SetProperty("IP", FullRequestContext.Current.Ip)
                .Add();
            }
        }