Example #1
0
        private SubscriptionServiceResult CallSubscriber(IHubConfiguration configuration, SubscriptionModel model)
        {
            SubscriptionServiceResult result = new SubscriptionServiceResult()
            {
                Type = SubscriptionResponseResultType.Success
            };

            var request = CreateRequest(configuration, model);

            try
            {
                var response = (HttpWebResponse)request.GetResponse();
                _loggingService.Info("Response received: " + response.StatusCode);

                if (response.StatusCode != HttpStatusCode.NoContent)
                {
                    result.Type             = SubscriptionResponseResultType.Error;
                    result.ErrorDescription = "The pubsubhub returned " + response.StatusDescription;
                }
                else
                {
                    using (Stream receiveStream = response.GetResponseStream())
                    {
                        using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
                        {
                            string hubResponse = readStream.ReadToEnd();

                            _loggingService.Info("Response text received: " + hubResponse);
                        }
                    }
                }
            }
            catch (WebException we)
            {
                if (((HttpWebResponse)we.Response).StatusCode == HttpStatusCode.Unauthorized)
                {
                    result.Type             = SubscriptionResponseResultType.NotAuthorised;
                    result.ErrorDescription = "The credentials provided were not accepted by the subscription hub";
                }
                else if ((int)((HttpWebResponse)we.Response).StatusCode == 422)
                {
                    result.Type             = SubscriptionResponseResultType.NotFound;
                    result.ErrorDescription = model.Mode + " error. The hub did not believe the subscription to exist or the sync callback failed.";
                }
                else
                {
                    string msg = model.Mode + " error. " + we.ToString();
                    _loggingService.Error(msg);
                    result.Type             = SubscriptionResponseResultType.Error;
                    result.ErrorDescription = msg;
                }
            }

            return(result);
        }
        public ActionResult Create([Bind(Exclude = "Id")] SubscriptionModel model)
        {
            ActionResult view = View();

            try
            {
                model.Callback      = model.Callback ?? Request.Url.GetLeftPart(UriPartial.Authority) + GetAppPath() + Url.Action("HubUpdate", "HubSubscription");
                model.Mode          = model.Mode ?? "subscribe";
                model.Verify        = model.Verify ?? "sync";
                model.PubSubHubUser = HubConfiguration.HubUsername;

                _loggingService.Info("Creating subscription for " + model + "\nModel valid: " + ViewData.ModelState.IsValid);

                ViewData.Model = model;
                if (ViewData.ModelState.IsValid)
                {
                    int maxSubsForUser = _subscriptionPersistenceService.GetMaxSubscriptionsForUser(model.PubSubHubUser);
                    int userSubCount   = _subscriptionPersistenceService.GetSubscriptionCountForUser(model.PubSubHubUser);

                    if (userSubCount >= maxSubsForUser)
                    {
                        string msg =
                            string.Format("Maximum number of subscriptions reaced for user. Subscriptions in use {0}. Maximum subscriptions {1}.",
                                          userSubCount, maxSubsForUser);
                        ViewData["ErrorDescription"] = msg;
                    }
                    else
                    {
                        _subscriptionPersistenceService.StoreSubscription(model);

                        SubscriptionServiceResult result = _subscriptionService.Subscribe(HubConfiguration, model);

                        if (result.Type != SubscriptionResponseResultType.Success)
                        {
                            ViewData["ErrorDescription"] = result.ErrorDescription;
                        }
                        else
                        {
                            view = RedirectToAction("Index");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string msg = "An exception occurred in Create method: " + ex.ToString();
                _loggingService.Error(msg);
                ViewData["ErrorDescription"] = msg;
            }

            return(view);
        }
        //
        // GET: /HubSubscription/Delete/5

        public ActionResult Delete(int id)
        {
            ActionResult view = View("DeleteError");

            _loggingService.Info("Deleting subscription Id: " + id);

            try
            {
                SubscriptionModel model = _subscriptionPersistenceService.GetSubscriptionById(id);
                model.PendingDeletion = true;
                model.LastUpdated     = DateTime.Now;
                model.Mode            = "unsubscribe";
                _subscriptionPersistenceService.SaveChanges(model);

                SubscriptionServiceResult result = _subscriptionService.UnSubscribe(HubConfiguration, model);

                if (result.Type == SubscriptionResponseResultType.Error ||
                    result.Type == SubscriptionResponseResultType.NotAuthorised)
                {
                    ViewData["ErrorDescription"] = result.ErrorDescription;
                }
                else if (result.Type == SubscriptionResponseResultType.NotFound)
                {
                    _subscriptionPersistenceService.DeleteSubscriptionById(id);

                    string msg = "The subscription could not be found in the subscription service. Deleted anyway. " +
                                 result.ErrorDescription;
                    _loggingService.Error(msg);
                    ViewData["ErrorDescription"] = msg;
                }
                else
                {
                    view = RedirectToAction("Index");
                }
            }
            catch (Exception ex)
            {
                string msg = "An exception in Delete method: " + ex.ToString();
                _loggingService.Error(msg);
                ViewData["ErrorDescription"] = msg;
            }

            return(view);
        }