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);
        }
Exemplo n.º 5
0
        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;
            }
        }
Exemplo n.º 6
0
        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";
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 9
0
        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;
                }
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
 public async void FindById(string subsID)
 {
     Model.Subscription subscription = await Repository.GetByIdAsync(subsID);
 }
Exemplo n.º 12
0
 public async Task <string> Post(Model.Subscription subscription)
 {
     return(await SubscriptionService.Create(subscription));
 }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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;
        }