Esempio n. 1
0
 /// <summary>
 /// Creates view model filter delegate that runs before it is requested/updated.
 /// </summary>
 /// <param name="hubContext">DotNetify hub context.</param>
 /// <param name="hubPipeline">Middleware/VM filter pipeline.</param>
 /// <returns>View model filter delegate.</returns>
 private VMController.FilterDelegate CreateVMFilter(DotNetifyHubContext hubContext, IHubPipeline hubPipeline)
 {
     return(async(vmId, vm, data, vmAction) =>
     {
         try
         {
             hubContext.Data = data;
             await hubPipeline.RunVMFiltersAsync(hubContext, vm, async ctx =>
             {
                 await vmAction(ctx.HubContext.Data);
             });
         }
         catch (TargetInvocationException ex)
         {
             throw ex.InnerException;
         }
     });
 }
        /// <summary>
        /// Invokes middleware.
        /// </summary>
        /// <param name="hubContext">DotNetify hub context.</param>
        /// <param name="next">Next middleware delegate.</param>
        public Task Invoke(DotNetifyHubContext hubContext, NextDelegate next)
        {
            try
            {
                var headers = ParseHeaders <HeaderData>(hubContext.Headers);
                if (headers?.Authorization?.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase) == true)
                {
                    var token = headers.Authorization.Substring("Bearer ".Length).Trim();
                    hubContext.Principal = new JwtSecurityTokenHandler().ValidateToken(token, _tokenValidationParameters, out SecurityToken validatedToken);
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }

            return(next(hubContext));
        }
            public override Task Invoke(DotNetifyHubContext hubContext, NextDelegate next)
            {
                if (hubContext.Headers != null)
                {
                    try
                    {
                        ValidateBearerToken(ParseHeaders <HeaderData>(hubContext.Headers), out SecurityToken validatedToken);
                        if (validatedToken != null)
                        {
                            hubContext.PipelineData.Add("AccessToken", validatedToken);
                        }
                    }
                    catch (Exception)
                    {
                    }
                }

                return(next(hubContext));
            }
Esempio n. 4
0
 /// <summary>
 /// Creates view model filter delegate that runs before it is requested/updated.
 /// </summary>
 /// <param name="hubContext">DotNetify hub context.</param>
 /// <param name="hubPipeline">Middleware/VM filter pipeline.</param>
 /// <returns>View model filter delegate.</returns>
 private VMController.FilterDelegate CreateVMFilter(DotNetifyHubContext hubContext, IHubPipeline hubPipeline)
 {
     return((vmId, vm, data, vmAction) =>
     {
         try
         {
             hubContext.Data = data;
             hubPipeline.RunVMFilters(hubContext, vm, ctx =>
             {
                 vmAction(ctx.HubContext.Data);
                 return Task.CompletedTask;
             });
         }
         catch (TargetInvocationException ex)
         {
             throw ex.InnerException;
         }
     });
 }
Esempio n. 5
0
        public async Task <string> Request_VM(
            string vmId,
            [FromQuery] string vmArg,
            [FromServices] IVMFactory vmFactory,
            [FromServices] IHubServiceProvider hubServiceProvider,
            [FromServices] IVMServiceScopeFactory serviceScopeFactory,
            [FromServices] IHubPipeline hubPipeline,
            [FromServices] IPrincipalAccessor principalAccessor
            )
        {
            var taskCompletionSource = new TaskCompletionSource <string>();
            var vmController         = new VMController((arg1, arg2, arg3) => taskCompletionSource.TrySetResult(arg3), vmFactory, serviceScopeFactory.CreateScope())
            {
                ResponseVMFilter = CreateRespondingVMFilter(hubPipeline, vmId, vmArg)
            };

            var httpCallerContext = InitializeContext(vmController, hubServiceProvider, principalAccessor);
            var connectionId      = httpCallerContext.ConnectionId;

            try
            {
                var hubContext = new DotNetifyHubContext(httpCallerContext, nameof(Request_VM), vmId, vmArg, BuildHeaders(), httpCallerContext.User);
                vmController.RequestVMFilter = CreateVMFilter(hubContext, hubPipeline);

                hubPipeline.RunMiddlewares(hubContext, ctx =>
                {
                    vmController.OnRequestVM(connectionId, ctx.VMId, ctx.Data);
                    vmController.Dispose();
                    return(Task.CompletedTask);
                });
            }
            catch (Exception ex)
            {
                var finalEx = hubPipeline.RunExceptionMiddleware(httpCallerContext, ex);
                if (finalEx is OperationCanceledException == false)
                {
                    taskCompletionSource.TrySetResult(DotNetifyHub.SerializeException(finalEx));
                }
            }

            return(await taskCompletionSource.Task);
        }
Esempio n. 6
0
        /// <summary>
        /// Invokes middleware.
        /// </summary>
        /// <param name="context">DotNetify hub context.</param>
        /// <param name="next">Next middleware delegate.</param>
        public Task Invoke(DotNetifyHubContext context, NextDelegate next)
        {
            // Set initial headers from previously cached headers.
            context.Headers = _headersCache.Get(_headersKey(context.CallerContext.ConnectionId));

            var tuple = ExtractHeaders(context.Data);

            if (tuple.Item1 != null)
            {
                context.Headers = tuple.Item1;
                _headersCache.Set(_headersKey(context.CallerContext.ConnectionId), context.Headers);
            }
            context.Data = tuple.Item2;

            // If the incoming message is only for updating the headers, no need to continue down the pipeline.
            if (context.Data == null && context.CallType == nameof(DotNetifyHub.Update_VM))
            {
                return(Task.CompletedTask);
            }

            return(next(context));
        }
Esempio n. 7
0
        /// <summary>
        /// Invokes middleware.
        /// </summary>
        /// <param name="context">DotNetify hub context.</param>
        /// <param name="next">Next middleware delegate.</param>
        public Task Invoke(DotNetifyHubContext context, NextDelegate next)
        {
            // Make sure the data is JObject.
            context.Data = NormalizeType(context);

            // Skip if context already has headers (in the case of Web API mode).
            if (context.Headers != null)
            {
                return(next(context));
            }

            // Set initial headers from previously cached headers.
            if (context.CallerContext != null)
            {
                context.Headers = _headersCache.Get(_headersKey(context.ConnectionId));
            }

            var tuple = ExtractHeaders(context.Data);

            if (tuple.Item1 != null)
            {
                context.Headers = tuple.Item1;
                if (context.CallerContext != null)
                {
                    _headersCache.Set(_headersKey(context.ConnectionId), context.Headers);
                }
            }
            context.Data = tuple.Item2;

            // If the incoming message is only for updating the headers, no need to continue down the pipeline.
            if (context.Data == null && context.CallType == nameof(DotNetifyHub.Update_VM))
            {
                return(Task.CompletedTask);
            }

            return(next(context));
        }
Esempio n. 8
0
 internal VMContext(DotNetifyHubContext hubContext, BaseVM instance)
 {
     HubContext = hubContext;
     Instance   = instance;
 }
Esempio n. 9
0
 public Task Invoke(DotNetifyHubContext context, NextDelegate next)
 {
     throw new OperationCanceledException();
 }
Esempio n. 10
0
 public virtual Task Invoke(DotNetifyHubContext context, NextDelegate next)
 {
     Invoked?.Invoke(this, context);
     context.PipelineData.Add(GetType().Name, null);
     return(next(context));
 }
Esempio n. 11
0
 public Task Invoke(DotNetifyHubContext context, NextDelegate next)
 {
     _eventAggregator.Context = context.CallerContext.ConnectionId;
     return(next(context));
 }
Esempio n. 12
0
        public async Task <string> Update_VM(
            string vmId,
            [FromQuery] string vmArg,
            [FromBody] Dictionary <string, object> vmData,
            [FromServices] IVMFactory vmFactory,
            [FromServices] IHubServiceProvider hubServiceProvider,
            [FromServices] IVMServiceScopeFactory serviceScopeFactory,
            [FromServices] IHubPipeline hubPipeline,
            [FromServices] IPrincipalAccessor principalAccessor)
        {
            var taskCompletionSource1 = new TaskCompletionSource <string>(TaskCreationOptions.RunContinuationsAsynchronously);
            var taskCompletionSource2 = new TaskCompletionSource <string>(TaskCreationOptions.RunContinuationsAsynchronously);

            Task responseVM(string arg1, string arg2, string arg3)
            {
                if (!taskCompletionSource1.TrySetResult(arg3))
                {
                    taskCompletionSource2.TrySetResult(arg3);
                }
                return(Task.CompletedTask);
            }

            var vmController = new VMController(responseVM, vmFactory, serviceScopeFactory.CreateScope())
            {
                ResponseVMFilter = CreateRespondingVMFilter(hubPipeline, vmId, vmData)
            };

            var httpCallerContext = InitializeContext(vmController, hubServiceProvider, principalAccessor);
            var connectionId      = httpCallerContext.ConnectionId;

            try
            {
                var hubContext = new DotNetifyHubContext(httpCallerContext, nameof(Request_VM), vmId, vmArg, BuildHeaders(), httpCallerContext.User);
                vmController.RequestVMFilter = CreateVMFilter(hubContext, hubPipeline);

                await hubPipeline.RunMiddlewaresAsync(hubContext, async ctx =>
                {
                    await vmController.OnRequestVMAsync(connectionId, ctx.VMId, ctx.Data);
                });
            }
            catch (Exception ex)
            {
                var finalEx = await hubPipeline.RunExceptionMiddlewareAsync(httpCallerContext, ex);

                if (finalEx is OperationCanceledException == false)
                {
                    taskCompletionSource1.TrySetResult(DotNetifyHub.SerializeException(finalEx));
                }
            }

            await taskCompletionSource1.Task;

            try
            {
                var hubContext = new DotNetifyHubContext(httpCallerContext, nameof(Update_VM), vmId, vmData, BuildHeaders(), httpCallerContext.User);
                vmController.UpdateVMFilter = CreateVMFilter(hubContext, hubPipeline);

                await hubPipeline.RunMiddlewaresAsync(hubContext, async ctx =>
                {
                    await vmController.OnUpdateVMAsync(connectionId, ctx.VMId, ctx.Data as Dictionary <string, object>);
                    vmController.Dispose();
                });
            }
            catch (Exception ex)
            {
                var finalEx = await hubPipeline.RunExceptionMiddlewareAsync(httpCallerContext, ex);

                if (finalEx is OperationCanceledException == false)
                {
                    taskCompletionSource2.TrySetResult(DotNetifyHub.SerializeException(finalEx));
                }
            }

            return(await taskCompletionSource2.Task);
        }
Esempio n. 13
0
 public Task Invoke(DotNetifyHubContext context, NextDelegate next)
 {
     return(Task.CompletedTask);
 }