public void WebServerRequest_CreateResponseWriter()
        {
            var executionDto = new ExecutionDto();
            var mock         = new Mock <IDSFDataObject>();

            mock.SetupGet(o => o.Environment).Returns(new ExecutionEnvironment());
            mock.SetupGet(o => o.IsDebug).Returns(true);
            mock.SetupGet(o => o.RemoteInvoke).Returns(false);
            mock.SetupGet(o => o.RemoteNonDebugInvoke).Returns(false);
            executionDto.DataListFormat = DataListFormat.CreateFormat("JSON", EmitionTypes.JSON, "application/json");
            executionDto.ErrorResultTO  = new Data.TO.ErrorResultTO();
            executionDto.DataObject     = mock.Object;


            executionDto.Request = new Communication.EsbExecuteRequest();
            executionDto.Request.WasInternalService = false;

            executionDto.CreateResponseWriter();
        }
Esempio n. 2
0
        protected static IResponseWriter CreateForm(WebRequestTO webRequest, string serviceName, string workspaceId, NameValueCollection headers, IPrincipal user)
        {
            var executePayload = "";

            var workspaceRepository = _repository ?? WorkspaceRepository.Instance;
            var workspaceGuid       = SetWorkspaceId(workspaceId, workspaceRepository);

            var allErrors  = new ErrorResultTO();
            var dataObject = CreateNewDsfDataObject(webRequest, serviceName, user, workspaceGuid);

            dataObject.SetupForWebDebug(webRequest);
            webRequest.BindRequestVariablesToDataObject(ref dataObject);
            dataObject.SetupForRemoteInvoke(headers);
            dataObject.SetEmitionType(webRequest, serviceName, headers);
            dataObject.SetupForTestExecution(serviceName, headers);
            if (dataObject.ServiceName == null)
            {
                dataObject.ServiceName = serviceName;
            }

            dataObject.SetResourceNameAndId(_resourceCatalog, serviceName, out IResource resource);
            dataObject.SetTestResourceIds(_resourceCatalog, webRequest, serviceName);
            dataObject.WebUrl = webRequest.WebServerUrl;
            var serializer  = new Dev2JsonSerializer();
            var esbEndpoint = new EsbServicesEndpoint();

            dataObject.EsbChannel = esbEndpoint;

            var instance   = _authorizationService ?? ServerAuthorizationService.Instance;
            var canExecute = dataObject.CanExecuteCurrentResource(resource, instance);

            // Build EsbExecutionRequest - Internal Services Require This ;)
            var esbExecuteRequest = new EsbExecuteRequest {
                ServiceName = serviceName
            };

            foreach (string key in webRequest.Variables)
            {
                esbExecuteRequest.AddArgument(key, new StringBuilder(webRequest.Variables[key]));
            }

            var executionDlid = GlobalConstants.NullDataListID;
            var formatter     = DataListFormat.CreateFormat("XML", EmitionTypes.XML, "text/xml");

            if (canExecute && dataObject.ReturnType != EmitionTypes.SWAGGER)
            {
                ErrorResultTO errors = null;
                Thread.CurrentPrincipal = user;
                var userPrinciple = user;
                if ((dataObject.ReturnType == EmitionTypes.TEST || dataObject.ReturnType == EmitionTypes.TRX) && dataObject.TestName == "*")
                {
                    formatter = ServiceTestExecutor.ExecuteTests(serviceName, dataObject, formatter, userPrinciple, workspaceGuid, serializer, _testCatalog, _resourceCatalog, ref executePayload);
                    return(new StringResponseWriter(executePayload, formatter.ContentType));
                }

                Common.Utilities.PerformActionInsideImpersonatedContext(userPrinciple, () => { executionDlid = esbEndpoint.ExecuteRequest(dataObject, esbExecuteRequest, workspaceGuid, out errors); });
            }
            else
            {
                if (!canExecute)
                {
                    dataObject.Environment.AddError(string.Format(Warewolf.Resource.Errors.ErrorResource.UserNotAuthorizedToExecuteOuterWorkflowException, dataObject.ExecutingUser.Identity.Name, dataObject.ServiceName));
                }
            }

            formatter = DataListFormat.CreateFormat("JSON", EmitionTypes.JSON, "application/json");
            if (dataObject.IsServiceTestExecution)
            {
                executePayload = ServiceTestExecutor.SetupForTestExecution(serializer, esbExecuteRequest, dataObject);
                if (!canExecute)
                {
                    return(new StringResponseWriter(dataObject.Environment.FetchErrors(), formatter.ContentType));
                }
                return(new StringResponseWriter(executePayload, formatter.ContentType));
            }
            if (dataObject.IsDebugFromWeb)
            {
                var serialize = SetupForWebExecution(dataObject, serializer);
                return(new StringResponseWriter(serialize, formatter.ContentType));
            }

            var unionedErrors = dataObject.Environment?.Errors?.Union(dataObject.Environment?.AllErrors) ?? new List <string>();

            foreach (var error in unionedErrors)
            {
                if (error.Length > 0)
                {
                    allErrors.AddError(error, true);
                }
            }

            var executionDto = new ExecutionDto
            {
                WebRequestTO   = webRequest,
                ServiceName    = serviceName,
                DataObject     = dataObject,
                Request        = esbExecuteRequest,
                DataListIdGuid = executionDlid,
                WorkspaceID    = workspaceGuid,
                Resource       = resource,
                DataListFormat = formatter,
                PayLoad        = executePayload,
                Serializer     = serializer,
                ErrorResultTO  = allErrors
            };

            return(executionDto.CreateResponseWriter());
        }