public IActionResult AddSubscription(string clientID, string definitionID, string instanceID, [FromBody] ServiceModels.Subscription subscription) { IActionResult result; if (subscription != null) { Model.Subscription item = subscription.ToModel(Request, clientID, definitionID, instanceID); item.OrganisationID = User.GetOrganisationID(); item.SubscriptionID = Guid.NewGuid(); if (!ExistingSubscriptionMatches(item)) { BusinessLogicFactory.Subscriptions.SaveSubscription(item, Model.TObjectState.Add); ServiceModels.ResourceCreated response = new ServiceModels.ResourceCreated(); response.ID = StringUtils.GuidEncode(item.SubscriptionID); string rootUrl = Request.GetRootUrl(); response.AddSelfLink(string.Concat(rootUrl, "/subscriptions/", response.ID), false, false); result = Request.GetObjectResult(response, System.Net.HttpStatusCode.Created); } else { result = new StatusCodeResult((int)System.Net.HttpStatusCode.Conflict); } } else { result = new BadRequestResult(); } return(result); }
private bool ExistingSubscriptionMatches(Model.Subscription item) { List <Model.Subscription> subscriptions = null; if (item.ClientID != Guid.Empty) { subscriptions = BusinessLogicFactory.Subscriptions.GetSubscriptions(item.ClientID); } else { subscriptions = BusinessLogicFactory.Subscriptions.GetSubscriptions(item.OrganisationID); } foreach (Model.Subscription subscription in subscriptions) { if (subscription.ClientID == item.ClientID && subscription.ObjectDefinitionID == item.ObjectDefinitionID && subscription.ObjectID == item.ObjectID && string.Compare(subscription.Url, item.Url, true) == 0 && subscription.PropertyDefinitionID == item.PropertyDefinitionID && subscription.SubscriptionType == item.SubscriptionType && subscription.SubscriptionID != item.SubscriptionID) { return(true); } } return(false); }
public IActionResult UpdateSubscription(string subscriptionID, [FromBody] ServiceModels.Subscription subscription) { IActionResult result; Guid subscriptionIDGuid; if (StringUtils.GuidTryDecode(subscriptionID, out subscriptionIDGuid)) { Model.Subscription subscriptionToUpdate = BusinessLogicFactory.Subscriptions.GetSubscription(subscriptionIDGuid); if (subscriptionToUpdate == null) { result = new NotFoundResult(); } else { subscription.UpdateModel(subscriptionToUpdate); if (!ExistingSubscriptionMatches(subscriptionToUpdate)) { BusinessLogicFactory.Subscriptions.SaveSubscription(subscriptionToUpdate, TObjectState.Update); result = new NoContentResult(); } else { result = new StatusCodeResult((int)System.Net.HttpStatusCode.Conflict); } } } else { result = new BadRequestResult(); } return(result); }
public IActionResult GetSubscription(string subscriptionID) { IActionResult result; Guid subscriptionIDGuid; if (StringUtils.GuidTryDecode(subscriptionID, out subscriptionIDGuid)) { Model.Subscription subscription = BusinessLogicFactory.Subscriptions.GetSubscription(subscriptionIDGuid); if (subscription == null) { result = new NotFoundResult(); } else { ServiceModels.Subscription response = new ServiceModels.Subscription(subscription); string rootUrl = Request.GetRootUrl(); response.AddSelfLink(string.Concat(rootUrl, "/subscriptions/", StringUtils.GuidEncode(subscription.SubscriptionID)), true, true); result = Request.GetObjectResult(response); } } else { result = new BadRequestResult(); } return(result); }
public Subscription(Model.Subscription item) { SubscriptionType = item.SubscriptionType.ToString(); if (item.ObjectDefinitionID != null && item.PropertyDefinitionID != null) { Model.ObjectDefinition objectDefinition = DataAccessFactory.ObjectDefinitions.GetLookups().GetObjectDefinition(item.ObjectDefinitionID); if (objectDefinition != null) { Model.PropertyDefinition propertyDefinition = objectDefinition.GetProperty(item.PropertyDefinitionID); if (propertyDefinition != null) { Property = propertyDefinition.SerialisationName; } } } Url = item.Url; AcceptContentType = item.AcceptContentType; if (item.NotificationParameters != null) { Attributes = new SubscriptionAttributes(); Attributes.Pmin = item.NotificationParameters.MinimumPeriod; Attributes.Pmax = item.NotificationParameters.MaximumPeriod; Attributes.Step = item.NotificationParameters.Step; Attributes.LessThan = item.NotificationParameters.LessThan; Attributes.GreaterThan = item.NotificationParameters.GreaterThan; } }
public async void Unsubscribe(Model.Subscription subscription) { Subscriptions.Remove(subscription); Model.Delete delete = new Model.Delete() { Item = BuyItem.Subscription, ItemId = subscription.SubscriptionId, UserId = APIService.User.UserId }; await _usersApi.Delete <Model.Subscription>(delete); HasNotifications = "True"; }
private bool ShouldNotify(BuildCompletedEvent buildCompletedEvent, Model.Subscription subscription) { var buildDefinition = buildCompletedEvent.Resource.Definition.Name; var result = buildCompletedEvent.Resource.Status; if (subscription.BuildDefinitionName != "*" && !subscription.BuildDefinitionName.Contains(buildDefinition)) { return(false); } if (subscription.BuildState != "None" && subscription.BuildState != string.Empty && subscription.BuildState.ToLower() != result.ToLower()) { return(false); } return(true); }
public IActionResult RemoveSubscription(string subscriptionID) { IActionResult result; Guid subscriptionIDGuid; if (StringUtils.GuidTryDecode(subscriptionID, out subscriptionIDGuid)) { Model.Subscription subscription = BusinessLogicFactory.Subscriptions.GetSubscription(subscriptionIDGuid); if (subscription == null) { result = new NotFoundResult(); } else { BusinessLogicFactory.Subscriptions.SaveSubscription(subscription, TObjectState.Delete); result = new NoContentResult(); } } else { result = new BadRequestResult(); } return(result); }
public void UpdateModel(Model.Subscription model) { if (Url != null) { model.Url = Url; } if (Attributes != null && model.NotificationParameters == null) { model.NotificationParameters = new NotificationParameters(); } if (Attributes != null) { if (Attributes.Pmin.HasValue) { model.NotificationParameters.MinimumPeriod = Attributes.Pmin; } if (Attributes.Pmax.HasValue) { model.NotificationParameters.MaximumPeriod = Attributes.Pmax; } if (Attributes.Step.HasValue) { model.NotificationParameters.Step = Attributes.Step; } if (Attributes.LessThan.HasValue) { model.NotificationParameters.LessThan = Attributes.LessThan; } if (Attributes.GreaterThan.HasValue) { model.NotificationParameters.GreaterThan = Attributes.GreaterThan; } } }
public async Task <string> Create(Model.Subscription subscription) { subscription.Id = Guid.NewGuid().ToString(); string queueName = $"subs-{subscription.Id}"; //create queue var queueResponse = await CreateQueueAsync(queueName, subscription.Id); subscription.QueueUrl = queueResponse.QueueUrl; //set lambda subs await ConfigureLambdaWithQueueAsync(queueName); //Get topicsARN var app = await ApplicationRepository.GetByIdAsync(subscription.ApplicationId); if (app != null) { //getting ARN var events = from subEvent in subscription.Events join appEvent in app.Events on subEvent.EventName equals appEvent.EventName select new Event { EventName = appEvent.EventName, TopicArn = appEvent.TopicArn }; await events.ToList().ForEachAsync(e => { subscription.Events.RemoveAll(y => y.EventName == e.EventName); subscription.Events.Add(e); var sub = AwsFactory.CreateClient <AmazonSimpleNotificationServiceClient>() .SubscribeQueueToTopicsAsync( new List <string>() { e.TopicArn }, AwsFactory.CreateClient <AmazonSQSClient>(), queueResponse.QueueUrl); sub.Result.ToList().ForEach(s => { try { var setting = AwsFactory.CreateClient <AmazonSimpleNotificationServiceClient>().SetSubscriptionAttributesAsync(new SetSubscriptionAttributesRequest { AttributeName = "RawMessageDelivery", AttributeValue = "true", SubscriptionArn = sub.Result.FirstOrDefault().Value }); } catch (Exception) { throw new WebhookManagerException("Error setting Subscription Attribute"); } } ); }); await Repository.CreateAsync(subscription); } return(subscription.Id); }
public async void FindById(string subsID) { Model.Subscription subscription = await Repository.GetByIdAsync(subsID); }
public async Task <string> Post(Model.Subscription subscription) { return(await SubscriptionService.Create(subscription)); }
public Model.Subscription ToModel(HttpRequest request, string clientID, string definitionID, string instanceID) { Model.Subscription result = new Model.Subscription(); TSubscriptionType subscriptionType; if (Enum.TryParse <TSubscriptionType>(SubscriptionType, true, out subscriptionType)) { result.SubscriptionType = subscriptionType; } else { throw new BadRequestException(); } if (AcceptContentType == null) { result.AcceptContentType = request.ContentType.Contains("xml") ? "application/xml" : "application/json"; } else { result.AcceptContentType = AcceptContentType; } if (clientID != null) { result.ClientID = StringUtils.GuidDecode(clientID); } if (definitionID != null) { result.ObjectDefinitionID = StringUtils.GuidDecode(definitionID); } if (instanceID != null) { result.ObjectID = instanceID; } if (Attributes != null) { result.NotificationParameters = new NotificationParameters(); result.NotificationParameters.MinimumPeriod = Attributes.Pmin; result.NotificationParameters.MaximumPeriod = Attributes.Pmax; result.NotificationParameters.Step = Attributes.Step; result.NotificationParameters.LessThan = Attributes.LessThan; result.NotificationParameters.GreaterThan = Attributes.GreaterThan; } if (Url != null) { result.Url = Url; } else { throw new BadRequestException(); } if (Links != null) { foreach (Link link in Links) { if (link.rel.Equals("object")) { string[] fields = link.href.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < fields.Length - 1; i++) { if (fields[i].Equals("clients") && result.ClientID == Guid.Empty) { result.ClientID = StringUtils.GuidDecode(fields[i + 1]); } else if (fields[i].Equals("objecttypes") && result.ObjectDefinitionID == Guid.Empty) { result.ObjectDefinitionID = StringUtils.GuidDecode(fields[i + 1]); } else if (fields[i].Equals("instances") && result.ObjectID == null) { result.ObjectID = fields[i + 1]; break; } } } } } if (result.SubscriptionType == TSubscriptionType.Observation) { if (result.ClientID == null || result.ObjectDefinitionID == null) { throw new BadRequestException(); } if (Property != null) { Model.PropertyDefinition propertyDefinition = DataAccessFactory.ObjectDefinitions.GetLookups().GetPropertyDefinitionFromNameOrID(result.ObjectDefinitionID, Property); if (propertyDefinition != null) { result.PropertyDefinitionID = propertyDefinition.PropertyDefinitionID; } else { throw new BadRequestException(); } } } return(result); }
public Model.Subscription ToModel(HttpRequest request, string clientID, string definitionID, string instanceID) { Model.Subscription result = new Model.Subscription(); TSubscriptionType subscriptionType; if (Enum.TryParse<TSubscriptionType>(SubscriptionType, true, out subscriptionType)) { result.SubscriptionType = subscriptionType; } else { throw new BadRequestException(); } if (AcceptContentType == null) result.AcceptContentType = request.ContentType.Contains("xml") ? "application/xml" : "application/json"; else result.AcceptContentType = AcceptContentType; if (clientID != null) result.ClientID = StringUtils.GuidDecode(clientID); if (definitionID != null) result.ObjectDefinitionID = StringUtils.GuidDecode(definitionID); if (instanceID != null) result.ObjectID = instanceID; if (Attributes != null) { result.NotificationParameters = new NotificationParameters(); result.NotificationParameters.MinimumPeriod = Attributes.Pmin; result.NotificationParameters.MaximumPeriod = Attributes.Pmax; result.NotificationParameters.Step = Attributes.Step; result.NotificationParameters.LessThan = Attributes.LessThan; result.NotificationParameters.GreaterThan = Attributes.GreaterThan; } if (Url != null) { result.Url = Url; } else { throw new BadRequestException(); } if (Links != null) { foreach (Link link in Links) { if (link.rel.Equals("object")) { string[] fields = link.href.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < fields.Length - 1; i++) { if (fields[i].Equals("clients") && result.ClientID == Guid.Empty) { result.ClientID = StringUtils.GuidDecode(fields[i + 1]); } else if (fields[i].Equals("objecttypes") && result.ObjectDefinitionID == Guid.Empty) { result.ObjectDefinitionID = StringUtils.GuidDecode(fields[i + 1]); } else if (fields[i].Equals("instances") && result.ObjectID == null) { result.ObjectID = fields[i + 1]; break; } } } } } if (result.SubscriptionType == TSubscriptionType.Observation) { if (result.ClientID == null || result.ObjectDefinitionID == null) { throw new BadRequestException(); } if (Property != null) { Model.PropertyDefinition propertyDefinition = DataAccessFactory.ObjectDefinitions.GetLookups().GetPropertyDefinitionFromNameOrID(result.ObjectDefinitionID, Property); if (propertyDefinition != null) { result.PropertyDefinitionID = propertyDefinition.PropertyDefinitionID; } else { throw new BadRequestException(); } } } return result; }