private async Task AddDataToInMemoryDb()
        {
            var appImage = new Core.Entities.DockerImage
            {
                Name         = "AppImage",
                Description  = "",
                ExternalPort = 80,
                InternalPort = 80,
                ImageName    = "Image",
                ImageTag     = "latest",
                ImageType    = Core.Enums.ImageType.Application
            };

            await context.DockerImage.AddAsync(appImage);

            var jmeterImage = new Core.Entities.DockerImage
            {
                Name        = "JmeterImage",
                Description = "",
                ImageName   = "JmeterImage",
                ImageTag    = "latest",
                ImageType   = Core.Enums.ImageType.ApacheJmeter
            };

            await context.DockerImage.AddAsync(jmeterImage);

            await context.SaveChangesAsync();

            var application = new Core.Entities.Application
            {
                Name                    = "Test Application",
                ApplicationImage        = appImage,
                BenchmarkingImage       = jmeterImage,
                ApplicationType         = Core.Enums.ApplicationType.ECommerce,
                DelayToStartApplication = 60000,
            };

            await context.Application.AddAsync(application);
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Save([FromBody] UpdateApplicationUrlsRequest request)
        {
            var errors = Util.UriErrors(new Dictionary <string, string> {
                { "auth-callback-url", request.AuthCallbackUrl },
                { "data-update-callback-url", request.DataUpdateCallbackUrl },
                //{ "email-verification-url", request.EmailVerificationUrl },
            }, _logger);

            // if (errors != null && errors.Any())
            // {
            //     return BadRequest(new { message = "All urls have to be valid.", errors = errors });
            // }
            try
            {
                // Who's logged in?
                using var session = _documentStore.OpenAsyncSession();
                var user = await _platformAdminUserManager.GetByUniqueIdentifierAsync(User.Identity.Name, session);

                // Which project are we working on?


                var testMode = TestProjectId.IsValidIdentity(request.ProjectId) && !ProjectId.IsValidIdentity(request.ProjectId);

                var project = testMode ? await _projectManager.GetTest((TestProjectId)request.ProjectId, session) : await _projectManager.Get((ProjectId)request.ProjectId, session);

                // Does the user have access to the project?
                if (!project.AdminIds.Contains(user.Id) && project.OwnerAdminId != user.Id)
                {
                    throw new ApiException("Seems you are not an admin on this project.", (int)System.Net.HttpStatusCode.Unauthorized);
                }
                var  application = project.Applications?.FirstOrDefault();
                bool recreated   = false;

                if (application != null)
                {
                    // Check that the application exists through the API
                    try
                    {
                        var apiApplication = await _applicationHttpClient.Get(application.Id);
                    }
                    catch (ApiException ex)
                    {
                        // Unable to get the application
                        if (ex.InnerException is System.Net.Http.HttpRequestException && ex.StatusCode == (int)System.Net.HttpStatusCode.NotFound)
                        {
                            // Not found in API - recreate the application
                            _logger.LogInformation("Application not found in API. Attempting to re-create.");
                            var apiApplication = await _applicationHttpClient.CreateApplication(new CreateApplicationModel
                            {
                                Name            = project.Name,
                                AuthCallbackUrl = request.AuthCallbackUrl ?? "",
                                //EmailVerificationNotificationEndpointUrl = request.EmailVerificationUrl ?? "",
                                DataUpdateCallbackUrl = request.DataUpdateCallbackUrl ?? ""
                            });

                            if (apiApplication != null)
                            {
                                _logger.LogInformation("New application created. {id}", apiApplication.ApplicationId);
                                recreated   = true;
                                application = new Core.Entities.Application
                                {
                                    Id              = apiApplication.ApplicationId,
                                    SecretKey       = apiApplication.SecretKey,
                                    AuthCallbackUrl = request.AuthCallbackUrl,
                                    //EmailVerificationUrl = request.EmailVerificationUrl,
                                    DataUpdateCallbackUrl = request.DataUpdateCallbackUrl
                                };
                            }
                        }
                        if (ex.InnerException is System.Net.Http.HttpRequestException && ex.StatusCode == (int)System.Net.HttpStatusCode.RequestTimeout)
                        {
                            throw;
                        }
                        // throw;
                    }
                    catch (System.Exception)
                    {
                        throw;
                    }
                    if (!recreated)
                    {
                        //await _applicationHttpClient.PatchEmailVerificationUrl(application.Id, request.EmailVerificationUrl);
                        await _applicationHttpClient.PatchApiEndpointAppSetNotificationUrl(application.Id, request.DataUpdateCallbackUrl);

                        await _applicationHttpClient.PatchAuthCallbackUrl(application.Id, request.AuthCallbackUrl);

                        application = new Core.Entities.Application
                        {
                            Id              = application.Id,
                            SecretKey       = application.SecretKey,
                            AuthCallbackUrl = request.AuthCallbackUrl,
                            //EmailVerificationUrl = request.EmailVerificationUrl,
                            DataUpdateCallbackUrl = request.DataUpdateCallbackUrl
                        };
                    }
                }
                else
                {
                    _logger.LogError("No application found.");
                    return(BadRequest(new { message = "No application found." }));
                }

                // One application per project, so just replace
                project.Applications = new List <Core.Entities.Application> {
                    application
                };
                // Save
                project = await _projectManager.Update(project, session);

                await session.SaveChangesAsync();

                return(Ok(project));
            }
            catch (ApiException ex)
            {
                // return error message if there was an exception
                return(BadRequest(new { message = ex.Message }));
            }
        }