Exemple #1
0
        /// <summary>
        /// Runs the view model filter.
        /// </summary>
        /// <param name="hubContext">Hub context.</param>
        /// <param name="vm">View model instance.</param>
        public void RunVMFilters(DotNetifyHubContext hubContext, BaseVM vm, NextFilterDelegate finalFilter)
        {
            var nextFilters = new Stack <NextFilterDelegate>();

            nextFilters.Push(finalFilter);

            // Find and execute the filter that matches each view model class attribute.
            foreach (var attr in vm.GetType().GetTypeInfo().GetCustomAttributes().Reverse())
            {
                var vmFilterType = typeof(IVMFilter <>).MakeGenericType(attr.GetType());
                if (_vmFilterFactories.Keys.Any(t => vmFilterType.IsAssignableFrom(t)))
                {
                    var vmFilter             = _vmFilterFactories.FirstOrDefault(kvp => vmFilterType.IsAssignableFrom(kvp.Key)).Value();
                    var vmFilterInvokeMethod = vmFilterType.GetMethod(nameof(IVMFilter <Attribute> .Invoke));
                    if (vmFilterInvokeMethod != null)
                    {
                        nextFilters.Push(ctx => (Task)vmFilterInvokeMethod.Invoke(vmFilter, new object[] { attr, ctx, nextFilters.Pop() }));
                    }
                }
            }

            var vmContext = new VMContext(hubContext, vm);

            if (nextFilters.Count > 0)
            {
                nextFilters.Pop()(vmContext);
            }
        }
        public Task Invoke(AuthorizeAttribute auth, VMContext context, NextFilterDelegate next)
        {
            var principal = context.HubContext.Principal;

            bool authd = principal?.Identity?.IsAuthenticated == true;

            if (authd)
            {
                if (!string.IsNullOrEmpty(auth.Role))
                {
                    authd &= principal.IsInRole(auth.Role);
                }

                if (!string.IsNullOrEmpty(auth.ClaimType))
                {
                    authd &= principal is ClaimsPrincipal ? (principal as ClaimsPrincipal).HasClaim(auth.ClaimType, auth.ClaimValue) : false;
                }
            }

            if (!authd)
            {
                throw new UnauthorizedAccessException();
            }

            return(next(context));
        }
Exemple #3
0
        public Task Invoke(SetAccessTokenAttribute attr, VMContext vmContext, NextFilterDelegate next)
        {
            var methodInfo  = vmContext.Instance.GetType().GetTypeInfo().GetMethod("SetAccessToken");
            var accessToken = vmContext.HubContext.PipelineData.ContainsKey("AccessToken") ? vmContext.HubContext.PipelineData["AccessToken"] : null;

            if (methodInfo != null && accessToken != null)
            {
                methodInfo.Invoke(vmContext.Instance, new object[] { accessToken as SecurityToken });
            }

            return(next(vmContext));
        }
Exemple #4
0
            public Task Invoke(CustomFilter2Attribute attribute, VMContext context, NextFilterDelegate next)
            {
                if (context.HubContext.CallType == "Response_VM")
                {
                    var data = JsonConvert.DeserializeObject <IDictionary <string, object> >(context.HubContext.Data.ToString());
                    foreach (var key in data.Keys.ToList())
                    {
                        data[key] = data[key].ToString().ToUpper();
                    }
                    context.HubContext.Data = JsonConvert.SerializeObject(data);
                }

                Invoked?.Invoke(this, Tuple.Create(attribute, context));
                return(next.Invoke(context));
            }
Exemple #5
0
 public Task Invoke(CustomFilter1Attribute attribute, VMContext context, NextFilterDelegate next)
 {
     Invoked?.Invoke(this, Tuple.Create(attribute, context));
     return(next.Invoke(context));
 }
Exemple #6
0
 public void RunVMFilters(DotNetifyHubContext hubContext, BaseVM vm, NextFilterDelegate finalFilter)
 {
     _ = RunVMFiltersAsync(hubContext, vm, finalFilter);
 }
Exemple #7
0
 public virtual Task Invoke(T attribute, VMContext context, NextFilterDelegate next)
 {
     Invoked?.Invoke(this, Tuple.Create(attribute, context));
     return(next.Invoke(context));
 }