public async Task <int> RegisterInstance(bool isMaster) { string currentIp = GetCurrentExternalIP(); //instance exists _logger.LogInformation($"Registering instance with IP: {currentIp}"); var existingInstance = _instanceRepository.GetAll(n => n.IP == currentIp).FirstOrDefault(); if (existingInstance != null) { existingInstance.IsDown = false; existingInstance.IsMaster = isMaster; await _instanceRepository.Update(existingInstance); return(existingInstance.Id); } else { //adding instance var newInstance = await _instanceRepository.Create(new Instance() { IP = currentIp, IsAvailable = true, IsDown = false, IsMaster = isMaster }); return(newInstance.Id); } }
public async Task <ActionResult <Instance> > Post(string appId, [FromBody] Instance instance) { (Application appInfo, ActionResult appInfoError) = await GetApplicationOrErrorAsync(appId); int instanceOwnerPartyId = int.Parse(instance.InstanceOwner.PartyId); if (appInfoError != null) { return(appInfoError); } if (string.IsNullOrWhiteSpace(instance.InstanceOwner.PartyId)) { return(BadRequest("Cannot create an instance without an instanceOwner.PartyId.")); } // Checking that user is authorized to instantiate. XacmlJsonRequestRoot request = DecisionHelper.CreateDecisionRequest(appInfo.Org, appInfo.Id.Split('/')[1], HttpContext.User, "instantiate", instanceOwnerPartyId, null); XacmlJsonResponse response = await _pdp.GetDecisionForRequest(request); if (response?.Response == null) { _logger.LogInformation($"// Instances Controller // Authorization of instantiation failed with request: {JsonConvert.SerializeObject(request)}."); return(Forbid()); } bool authorized = DecisionHelper.ValidatePdpDecision(response.Response, HttpContext.User); if (!authorized) { return(Forbid()); } Instance storedInstance = new Instance(); try { DateTime creationTime = DateTime.UtcNow; string userId = GetUserId(); Instance instanceToCreate = CreateInstanceFromTemplate(appInfo, instance, creationTime, userId); storedInstance = await _instanceRepository.Create(instanceToCreate); await DispatchEvent(InstanceEventType.Created, storedInstance); _logger.LogInformation($"Created instance: {storedInstance.Id}"); storedInstance.SetPlatformSelflink(_storageBaseAndHost); return(Created(storedInstance.SelfLinks.Platform, storedInstance)); } catch (Exception storageException) { _logger.LogError($"Unable to create {appId} instance for {instance.InstanceOwner.PartyId} due to {storageException}"); // compensating action - delete instance await _instanceRepository.Delete(storedInstance); _logger.LogError($"Deleted instance {storedInstance.Id}"); return(StatusCode(500, $"Unable to create {appId} instance for {instance.InstanceOwner.PartyId} due to {storageException.Message}")); } }
public async Task <ActionResult> Post(string appId, [FromBody] Instance instance) { // check if metadata exists Application appInfo = GetApplicationOrError(appId, out ActionResult appInfoError); if (appInfoError != null) { return(appInfoError); } if (string.IsNullOrWhiteSpace(instance.InstanceOwner.PartyId)) { return(BadRequest("Cannot create an instance without an instanceOwner.PartyId.")); } Instance storedInstance = new Instance(); try { DateTime creationTime = DateTime.UtcNow; string userId = GetUserId(); Instance instanceToCreate = CreateInstanceFromTemplate(appInfo, instance, creationTime, userId); storedInstance = await _instanceRepository.Create(instanceToCreate); await DispatchEvent(InstanceEventType.Created.ToString(), storedInstance); _logger.LogInformation($"Created instance: {storedInstance.Id}"); AddSelfLinks(Request, storedInstance); return(Created(storedInstance.SelfLinks.Platform, storedInstance)); } catch (Exception storageException) { _logger.LogError($"Unable to create {appId} instance for {instance.InstanceOwner.PartyId} due to {storageException}"); // compensating action - delete instance await _instanceRepository.Delete(storedInstance); _logger.LogError($"Deleted instance {storedInstance.Id}"); return(StatusCode(500, $"Unable to create {appId} instance for {instance.InstanceOwner.PartyId} due to {storageException.Message}")); } }
public async Task <ActionResult> Create(Instance model) { // check model state exists if (!ModelState.IsValid) { return(RedirectToAction("Index")); } // async new instance object to the db var result = await _repository.Create(model); // check if successful and return to appropriate view/error message if (!result.Success) { ModelState.AddModelError("", result.Message); return(View(model)); } else { return(RedirectToAction("Index")); } }
public async Task <ActionResult> Post(string appId, int?instanceOwnerId) { // check if metadata exists Application appInfo = GetApplicationOrError(appId, out ActionResult appInfoError); if (appInfoError != null) { return(appInfoError); } List <Part> parts = ReadAndCheckContent(Request, appInfo, out ActionResult contentError); if (contentError != null) { return(contentError); } // extract instance template. it should, if it exists, be first part in list Instance instanceTemplate = await ExtractInstanceTemplateFromParts(parts); // get instanceOwnerId from one out of three possible places int ownerId = GetOrLookupInstanceOwnerId(instanceOwnerId, instanceTemplate, out ActionResult instanceOwnerIdError); if (instanceOwnerIdError != null) { return(instanceOwnerIdError); } if (instanceTemplate == null) { instanceTemplate = new Instance(); } Instance storedInstance = null; try { DateTime creationTime = DateTime.UtcNow; string userId = null; Instance instanceToCreate = CreateInstanceFromTemplate(appInfo, instanceTemplate, ownerId, creationTime, userId); storedInstance = await _instanceRepository.Create(instanceToCreate); await DispatchEvent(InstanceEventType.Created.ToString(), storedInstance); logger.LogInformation($"Created instance: {storedInstance.Id}"); if (parts.Any()) { storedInstance = await SaveDataElementsAndUpdateInstance(parts, storedInstance, creationTime, userId); } AddSelfLinks(Request, storedInstance); return(Ok(storedInstance)); } catch (Exception storageException) { logger.LogError($"Unable to create {appId} instance for {ownerId} due to {storageException}"); // compensating action - delete instance await _instanceRepository.Delete(storedInstance); logger.LogError($"Deleted instance {storedInstance.Id}"); return(StatusCode(500, $"Unable to create {appId} instance for {ownerId} due to {storageException.Message}")); } }
public async Task <ActionResult> Post(string appId, int?instanceOwnerId, [FromBody] Instance instanceTemplate) { // check if metadata exists Application appInfo = GetApplicationOrError(appId, out ActionResult appInfoErrorResult); if (appInfoErrorResult != null) { return(appInfoErrorResult); } // get instanceOwnerId from three possible places int ownerId = GetOrLookupInstanceOwnerId(instanceOwnerId, instanceTemplate, out ActionResult instanceOwnerErrorResult); if (instanceOwnerErrorResult != null) { return(instanceOwnerErrorResult); } if (instanceTemplate == null) { instanceTemplate = new Instance(); } DateTime creationTime = DateTime.UtcNow; string org = appInfo.Org; string userName = GetUser(User); Instance createdInstance = createdInstance = new Instance() { InstanceOwnerId = ownerId.ToString(), CreatedBy = userName, CreatedDateTime = creationTime, LastChangedBy = userName, LastChangedDateTime = creationTime, AppId = appId, Org = org, VisibleDateTime = DateTimeHelper.ConvertToUniversalTime(instanceTemplate.VisibleDateTime), DueDateTime = DateTimeHelper.ConvertToUniversalTime(instanceTemplate.DueDateTime), Labels = instanceTemplate.Labels, PresentationField = instanceTemplate.PresentationField, InstanceState = new InstanceState { IsArchived = false, IsDeleted = false, IsMarkedForHardDelete = false }, }; if (instanceTemplate.Process != null) { createdInstance.Process = instanceTemplate.Process; } else { createdInstance.Process = new ProcessState { CurrentTask = "FormFilling_1", IsComplete = false }; } try { Instance result = await _instanceRepository.Create(createdInstance); SetSelfLinks(result); return(Ok(result)); } catch (Exception e) { logger.LogError($"Unable to create {appId} instance for {ownerId} due to {e}"); return(StatusCode(500, $"Unable to create {appId} instance for {ownerId} due to {e}")); } }