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); }
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 })); } }