public void InternalServiceRequestHandler_ProcessRequestGivenUnAuthorizedPermission()
        {
            //------------Setup for test--------------------------
            var args = new Dictionary <string, StringBuilder>
            {
                { "DebugPayload", new StringBuilder("<DataList>Value:SomeStringAsValue,IsDebug:true</DataList>") },
                { "IsDebug", new StringBuilder("<DataList>true</DataList>") },
            };
            var eer = new EsbExecuteRequest
            {
                ServiceName   = "Ping",
                Args          = args,
                TestName      = "Test1",
                ExecuteResult = new StringBuilder("Results")
            };

            var executingUser        = new Mock <IPrincipal>();
            var resourceCatalog      = new Mock <IResourceCatalog>();
            var authorizationService = new Mock <IAuthorizationService>();

            authorizationService.Setup(service => service.IsAuthorized(AuthorizationContext.Contribute, Guid.Empty)).Returns(false);
            var internalServiceRequestHandler = new InternalServiceRequestHandler(resourceCatalog.Object, authorizationService.Object)
            {
                ExecutingUser = executingUser.Object
            };
            //------------Execute Test---------------------------
            var processRequest = internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.NewGuid().ToString());

            authorizationService.Verify(service => service.IsAuthorized(AuthorizationContext.Contribute, Guid.Empty), Times.Once);
            Assert.IsNotNull(processRequest);
        }
Пример #2
0
        public void InternalServiceRequestHandler_ProcessRequest_WhenExecutingUserInFirstOverload_ExpectThreadHasCorrectUserContext()
        {
            //------------Setup for test--------------------------
            Mock <IPrincipal> principle = new Mock <IPrincipal>();

            principle.Setup(p => p.Identity.Name).Returns("FakeUser");
            principle.Setup(p => p.Identity.Name).Verifiable();

            Mock <ICommunicationContext> ctx            = new Mock <ICommunicationContext>();
            NameValueCollection          boundVariables = new NameValueCollection {
                { "servicename", "ping" }, { "instanceid", "" }, { "bookmark", "" }
            };
            NameValueCollection queryString = new NameValueCollection {
                { GlobalConstants.DLID, Guid.Empty.ToString() }, { "wid", Guid.Empty.ToString() }
            };

            ctx.Setup(c => c.Request.BoundVariables).Returns(boundVariables);
            ctx.Setup(c => c.Request.QueryString).Returns(queryString);
            ctx.Setup(c => c.Request.Uri).Returns(new Uri("http://localhost"));

            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = principle.Object
            };

            //------------Execute Test---------------------------
            internalServiceRequestHandler.ProcessRequest(ctx.Object);

            //------------Assert Results-------------------------
            principle.Verify(p => p.Identity.Name, Times.AtLeast(1));
        }
        public void InternalServiceRequestHandler_ProcessRequest_WhenExecutingUser()
        {
            //------------Setup for test--------------------------
            var ctx            = new Mock <ICommunicationContext>();
            var boundVariables = new NameValueCollection {
                { "servicename", "ping" }, { "instanceid", "" }, { "bookmark", "" }
            };
            var queryString = new NameValueCollection {
                { GlobalConstants.DLID, Guid.Empty.ToString() }, { "wid", Guid.Empty.ToString() }
            };

            ctx.Setup(c => c.Request.BoundVariables).Returns(boundVariables);
            ctx.Setup(c => c.Request.QueryString).Returns(queryString);
            ctx.Setup(c => c.Request.Uri).Returns(new Uri("http://localhost:3142/secure/Testing123.json?<DataList></DataList>&wid=7481a128-cf36-427c-90d7-daa32368af8d"));
            var executingUser = new Mock <IPrincipal>();
            var id            = new Mock <IIdentity>();

            id.Setup(identity => identity.Name).Returns("User");
            id.Setup(identity => identity.IsAuthenticated).Returns(true);
            executingUser.Setup(principal => principal.Identity).Returns(id.Object);
            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = executingUser.Object
            };

            //------------Execute Test---------------------------
            internalServiceRequestHandler.ProcessRequest(ctx.Object);
        }
        public void BuildStudioUrl_GivenPayLoad_BuildCorrect_WebURL_StripDebugInfo()
        {
            //------------Setup for test--------------------------
            var executingUser        = new Mock <IPrincipal>();
            var resourceCatalog      = new Mock <IResourceCatalog>();
            var authorizationService = new Mock <IAuthorizationService>();

            authorizationService.Setup(service => service.IsAuthorized(AuthorizationContext.Contribute, Guid.Empty.ToString())).Returns(true);
            var internalServiceRequestHandler = new InternalServiceRequestHandler(resourceCatalog.Object, authorizationService.Object)
            {
                ExecutingUser = executingUser.Object
            };

            var privateObject = new PrivateObject(internalServiceRequestHandler);
            var xElement      = XML.XmlResource.Fetch("DebugPayload");
            var s             = xElement.ToString();
            //------------Test Preconditions---------------------------
            var invoke = privateObject.Invoke("BuildStudioUrl", s).ToString();

            Assert.IsNotNull(invoke);
            Assert.IsFalse(invoke.Contains(" "));
            Assert.IsFalse(invoke.Contains(Environment.NewLine));
            //------------Execute Test---------------------------
            Assert.IsFalse(invoke.Contains("BDSDebugMode"));
            Assert.IsFalse(invoke.Contains("DebugSessionID"));
            Assert.IsFalse(invoke.Contains("EnvironmentID"));
            const string expected = "<DataList><input>a</input><rec%20json:Array=\"true\"%20xmlns:json=\"http://james.newtonking.com/projects/json\"><field>w</field></rec><obj><Name>nathi</Name></obj></DataList>";

            Assert.AreEqual(expected, invoke);
        }
Пример #5
0
        public void InternalServiceRequestHandler_ProcessRequest_WhenNullExecutingUser_ExpectException()
        {
            //------------Setup for test--------------------------
            EsbExecuteRequest eer = new EsbExecuteRequest {
                ServiceName = "Ping"
            };

            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = null
            };

            //------------Execute Test---------------------------
            internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.NewGuid().ToString());
        }
Пример #6
0
        public void InternalServiceRequestHandler_ProcessRequest_WhenMalformedConnectionId_ExpectException()
        {
            //------------Setup for test--------------------------
            Mock <IPrincipal> principle = new Mock <IPrincipal>();

            principle.Setup(p => p.Identity.Name).Returns("FakeUser");
            EsbExecuteRequest eer = new EsbExecuteRequest {
                ServiceName = "Ping"
            };

            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = principle.Object
            };

            //------------Execute Test---------------------------
            internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, "1");
        }
        public void InternalServiceRequestHandler_ProcessRequest_WhenNullExecutingUser_ExpectException()
        {
            //------------Setup for test--------------------------
            var args = new Dictionary <string, StringBuilder>
            {
                { "DebugPayload", new StringBuilder("<DataList>Value:SomeStringAsValue,IsDebug:true</DataList>") }
            };
            var eer = new EsbExecuteRequest
            {
                ServiceName = "Ping",
                Args        = args,
                ResourceID  = Guid.NewGuid()
            };

            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = null
            };

            //------------Execute Test---------------------------
            internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.NewGuid().ToString());
        }
Пример #8
0
        public void InternalServiceRequestHandler_ProcessRequest_WhenNullExecutingUserInFirstOverload_ExpectException()
        {
            //------------Setup for test--------------------------
            Mock <ICommunicationContext> ctx            = new Mock <ICommunicationContext>();
            NameValueCollection          boundVariables = new NameValueCollection {
                { "servicename", "ping" }, { "instanceid", "" }, { "bookmark", "" }
            };
            NameValueCollection queryString = new NameValueCollection {
                { GlobalConstants.DLID, Guid.Empty.ToString() }, { "wid", Guid.Empty.ToString() }
            };

            ctx.Setup(c => c.Request.BoundVariables).Returns(boundVariables);
            ctx.Setup(c => c.Request.QueryString).Returns(queryString);
            ctx.Setup(c => c.Request.Uri).Returns(new Uri("http://localhost"));

            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = null
            };

            //------------Execute Test---------------------------
            internalServiceRequestHandler.ProcessRequest(ctx.Object);
        }
        public void InternalServiceRequestHandler_ProcessRequest()
        {
            //------------Setup for test--------------------------
            var args = new Dictionary <string, StringBuilder>
            {
                { "DebugPayload", new StringBuilder("<DataList>Value:SomeStringAsValue,IsDebug:true</DataList>") },
                { "IsDebug", new StringBuilder("<DataList>true</DataList>") }
            };
            var eer = new EsbExecuteRequest
            {
                ServiceName = "Ping",
                Args        = args,
            };

            var executingUser = new Mock <IPrincipal>();
            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = executingUser.Object
            };

            //------------Execute Test---------------------------
            internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.NewGuid().ToString());
        }
        public void InternalServiceRequestHandler_ProcessRequest_WhenPassingInUserContext_ExpectThreadHasCorrectUserContext()
        {
            //------------Setup for test--------------------------
            Mock <IPrincipal> principle = new Mock <IPrincipal>();

            principle.Setup(p => p.Identity.Name).Returns("FakeUser");
            principle.Setup(p => p.Identity.Name).Verifiable();
            EsbExecuteRequest eer = new EsbExecuteRequest {
                ServiceName = "Ping"
            };

            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = principle.Object
            };

            //------------Execute Test---------------------------
            var result = internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.Empty.ToString());

            //------------Assert Results-------------------------
            Assert.IsNotNull(result);
            StringAssert.Contains(result.ToString(), "Pong");
            principle.Verify(p => p.Identity.Name, Times.Once());
        }
        public void BuildStudioUrl_GivenPayLoad_BuildCorrect_WebURL()
        {
            //------------Setup for test--------------------------
            var executingUser        = new Mock <IPrincipal>();
            var resourceCatalog      = new Mock <IResourceCatalog>();
            var authorizationService = new Mock <IAuthorizationService>();

            authorizationService.Setup(service => service.IsAuthorized(AuthorizationContext.Contribute, Guid.Empty.ToString())).Returns(true);
            var internalServiceRequestHandler = new InternalServiceRequestHandler(resourceCatalog.Object, authorizationService.Object)
            {
                ExecutingUser = executingUser.Object
            };

            var privateObject = new PrivateObject(internalServiceRequestHandler);
            var xElement      = XML.XmlResource.Fetch("DebugPayload");
            var s             = xElement.ToString();
            var invoke        = privateObject.Invoke("BuildStudioUrl", s).ToString();

            //------------Execute Test---------------------------
            Assert.IsNotNull(invoke);
            Assert.IsFalse(invoke.Contains(" "));
            Assert.IsFalse(invoke.Contains(Environment.NewLine));
        }
Пример #12
0
        /// <summary>
        ///     Executes the command.
        /// </summary>
        /// <param name="envelope">The envelope.</param>
        /// <param name="endOfStream">if set to <c>true</c> [end of stream].</param>
        /// <param name="workspaceId">The workspace unique identifier.</param>
        /// <param name="dataListId">The data list unique identifier.</param>
        /// <param name="messageId">The message unique identifier.</param>
        /// <returns></returns>
        public async Task <Receipt> ExecuteCommand(Envelope envelope, bool endOfStream, Guid workspaceId, Guid dataListId, Guid messageId)
        {
            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = Context.User
            };

            try
            {
                var task = new Task <Receipt>(() =>
                {
                    try
                    {
                        StringBuilder sb;
                        if (!MessageCache.TryGetValue(messageId, out sb))
                        {
                            sb = new StringBuilder();
                            MessageCache.TryAdd(messageId, sb);
                        }
                        sb.Append(envelope.Content);

                        MessageCache.TryRemove(messageId, out sb);
                        var request = _serializer.Deserialize <EsbExecuteRequest>(sb);

                        var user = string.Empty;
                        // ReSharper disable ConditionIsAlwaysTrueOrFalse
                        var userPrinciple = Context.User;
                        if (Context.User.Identity != null)
                        // ReSharper restore ConditionIsAlwaysTrueOrFalse
                        {
                            user = Context.User.Identity.Name;
                            // set correct principle ;)
                            userPrinciple           = Context.User;
                            Thread.CurrentPrincipal = userPrinciple;
                            Dev2Logger.Log.Debug("Execute Command Invoked For [ " + user + " ] For Service [ " + request.ServiceName + " ]");
                        }
                        StringBuilder processRequest = null;
                        Common.Utilities.PerformActionInsideImpersonatedContext(userPrinciple, () => { processRequest = internalServiceRequestHandler.ProcessRequest(request, workspaceId, dataListId, Context.ConnectionId); });
                        // always place requesting user in here ;)
                        var future = new FutureReceipt
                        {
                            PartID    = 0,
                            RequestID = messageId,
                            User      = user
                        };

                        var value = processRequest.ToString();
                        if (!string.IsNullOrEmpty(value))
                        {
                            if (!ResultsCache.Instance.AddResult(future, value))
                            {
                                Dev2Logger.Log.Error(new Exception("Failed to build future receipt for [ " + Context.ConnectionId + " ] Value [ " + value + " ]"));
                            }
                        }
                        return(new Receipt {
                            PartID = envelope.PartID, ResultParts = 1
                        });
                    }
                    catch (Exception e)
                    {
                        Dev2Logger.Log.Error(e);
                    }
                    return(null);
                });
                task.Start();
                return(await task);
            }
            catch (Exception e)
            {
                Dev2Logger.Log.Error(e);
                Dev2Logger.Log.Info("Is End of Stream:" + endOfStream);
            }
            return(null);
        }
Пример #13
0
        /// <summary>
        ///     Executes the command.
        /// </summary>
        /// <param name="envelope">The envelope.</param>
        /// <param name="endOfStream">if set to <c>true</c> [end of stream].</param>
        /// <param name="workspaceId">The workspace unique identifier.</param>
        /// <param name="dataListId">The data list unique identifier.</param>
        /// <param name="messageId">The message unique identifier.</param>
        /// <returns></returns>
        public async Task <Receipt> ExecuteCommand(Envelope envelope, bool endOfStream, Guid workspaceId, Guid dataListId, Guid messageId)
        {
            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = Context.User
            };

            try
            {
                var task = new Task <Receipt>(() =>
                {
                    try
                    {
                        StringBuilder sb;
                        if (!MessageCache.TryGetValue(messageId, out sb))
                        {
                            sb = new StringBuilder();
                            MessageCache.TryAdd(messageId, sb);
                        }
                        sb.Append(envelope.Content);

                        if (endOfStream)
                        {
                            MessageCache.TryRemove(messageId, out sb);
                            var request = _serializer.Deserialize <EsbExecuteRequest>(sb);

                            var user = string.Empty;
                            // ReSharper disable ConditionIsAlwaysTrueOrFalse
                            if (Context.User.Identity != null)
                            // ReSharper restore ConditionIsAlwaysTrueOrFalse
                            {
                                user = Context.User.Identity.Name;
                                // set correct principle ;)
                                Thread.CurrentPrincipal = Context.User;
                                Dev2Logger.Log.Debug("Execute Command Invoked For [ " + user + " ] For Service [ " + request.ServiceName + " ]");
                            }

                            var processRequest = internalServiceRequestHandler.ProcessRequest(request, workspaceId, dataListId, Context.ConnectionId);
                            // Convert to chunked msg store for fetch ;)
                            var length   = processRequest.Length;
                            var startIdx = 0;
                            var rounds   = (int)Math.Ceiling(length / GlobalConstants.MAX_SIZE_FOR_STRING);

                            for (var q = 0; q < rounds; q++)
                            {
                                var len = (int)GlobalConstants.MAX_SIZE_FOR_STRING;
                                if (len > (length - startIdx))
                                {
                                    len = (length - startIdx);
                                }

                                // always place requesting user in here ;)
                                var future = new FutureReceipt
                                {
                                    PartID    = q,
                                    RequestID = messageId,
                                    User      = user
                                };

                                var value = processRequest.Substring(startIdx, len);

                                if (!ResultsCache.Instance.AddResult(future, value))
                                {
                                    Dev2Logger.Log.Error(new Exception("Failed to build future receipt for [ " + Context.ConnectionId + " ] Value [ " + value + " ]"));
                                }

                                startIdx += len;
                            }

                            return(new Receipt {
                                PartID = envelope.PartID, ResultParts = rounds
                            });
                        }

                        return(new Receipt {
                            PartID = envelope.PartID, ResultParts = -1
                        });
                    }
                    catch (Exception e)
                    {
                        Dev2Logger.Log.Error(e);
                    }
                    return(null);
                });
                task.Start();
                return(await task);
            }
            catch (Exception e)
            {
                Dev2Logger.Log.Error(e);
            }
            return(null);
        }
Пример #14
0
        public async Task <Receipt> ExecuteCommand(Envelope envelope, bool endOfStream, Guid workspaceId, Guid dataListId, Guid messageId)
        {
            var internalServiceRequestHandler = new InternalServiceRequestHandler {
                ExecutingUser = Context.User
            };

            try
            {
                var task = new Task <Receipt>(() =>
                {
                    try
                    {
                        if (!MessageCache.TryGetValue(messageId, out StringBuilder sb))
                        {
                            sb = new StringBuilder();
                            MessageCache.TryAdd(messageId, sb);
                        }
                        sb.Append(envelope.Content);

                        MessageCache.TryRemove(messageId, out sb);
                        var request = _serializer.Deserialize <EsbExecuteRequest>(sb);

                        var user = string.Empty;

                        var userPrinciple = Context.User;
                        if (Context.User.Identity != null)

                        {
                            user                    = Context.User.Identity.Name;
                            userPrinciple           = Context.User;
                            Thread.CurrentPrincipal = userPrinciple;
                            Dev2Logger.Debug("Execute Command Invoked For [ " + user + " : " + userPrinciple?.Identity?.AuthenticationType + " : " + userPrinciple?.Identity?.IsAuthenticated + " ] For Service [ " + request.ServiceName + " ]", GlobalConstants.WarewolfDebug);
                        }
                        StringBuilder processRequest = null;
                        Common.Utilities.PerformActionInsideImpersonatedContext(userPrinciple, () => { processRequest = internalServiceRequestHandler.ProcessRequest(request, workspaceId, dataListId, Context.ConnectionId); });
                        var future = new FutureReceipt
                        {
                            PartID    = 0,
                            RequestID = messageId,
                            User      = user
                        };

                        var value = processRequest?.ToString();
                        if (!string.IsNullOrEmpty(value) && !ResultsCache.Instance.AddResult(future, value))
                        {
                            Dev2Logger.Error(new Exception(string.Format(ErrorResource.FailedToBuildFutureReceipt, Context.ConnectionId, value)), GlobalConstants.WarewolfError);
                        }

                        return(new Receipt {
                            PartID = envelope.PartID, ResultParts = 1
                        });
                    }
                    catch (Exception e)
                    {
                        Dev2Logger.Error(e, GlobalConstants.WarewolfError);
                    }
                    return(null);
                });
                task.Start();
                return(await task.ConfigureAwait(true));
            }
            catch (Exception e)
            {
                Dev2Logger.Error(e, GlobalConstants.WarewolfError);
                Dev2Logger.Info("Is End of Stream:" + endOfStream, GlobalConstants.WarewolfInfo);
            }
            return(null);
        }