/// <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)); }
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)); }
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)); }
public Task Invoke(CustomFilter1Attribute attribute, VMContext context, NextFilterDelegate next) { Invoked?.Invoke(this, Tuple.Create(attribute, context)); return(next.Invoke(context)); }
public void RunVMFilters(DotNetifyHubContext hubContext, BaseVM vm, NextFilterDelegate finalFilter) { _ = RunVMFiltersAsync(hubContext, vm, finalFilter); }
public virtual Task Invoke(T attribute, VMContext context, NextFilterDelegate next) { Invoked?.Invoke(this, Tuple.Create(attribute, context)); return(next.Invoke(context)); }