/// <summary>
        /// Inserts a new subscription.
        /// </summary>
        /// <param name="controller">Controller calling this method.</param>
        /// <returns>Status message.</returns>
        private static String InsertSubscription(MainController controller)
        {
            String collection = controller.Request.Form.Get("collection");
            if (String.IsNullOrEmpty(collection))
            {
                collection = "timeline";
            }

            Subscription subscription = new Subscription()
            {
                Collection = collection,
                UserToken = controller.UserId,
                CallbackUrl = controller.Url.Action(
                    "Notify", "Notify", null, controller.Request.Url.Scheme)
            };
            controller.Service.Subscriptions.Insert(subscription).Fetch();

            return "Application is now subscribed to updates.";
        }
        /// <summary>
        /// Inserts a timeline item to all users (up to 10).
        /// </summary>
        /// <param name="controller">Controller calling this method.</param>
        /// <returns>Status message.</returns>
        private static String InsertItemAllUsers(MainController controller)
        {
            StoredCredentialsDBContext db = new StoredCredentialsDBContext();
            int userCount = db.StoredCredentialSet.Count();

            if (userCount > 10)
            {
                return "Total user count is " + userCount +
                    ". Aborting broadcast to save your quota";
            }
            else
            {
                TimelineItem item = new TimelineItem()
                {
                    Text = "Hello Everyone!",
                    Notification = new NotificationConfig() { Level = "DEFAULT" }
                };

                foreach (StoredCredentials creds in db.StoredCredentialSet)
                {
                    AuthorizationState state = new AuthorizationState()
                    {
                        AccessToken = creds.AccessToken,
                        RefreshToken = creds.RefreshToken
                    };
                    MirrorService service = new MirrorService(new BaseClientService.Initializer()
                    {
                        Authenticator = Utils.GetAuthenticatorFromState(state)
                    });
                    service.Timeline.Insert(item).Fetch();
                }
                return "Successfully sent cards to " + userCount + " users.";
            }
        }
 /// <summary>
 /// Inserts a timeline item with action.
 /// </summary>
 /// <param name="controller">Controller calling this method.</param>
 /// <returns>Status message.</returns>
 private static String InsertItemWithAction(MainController controller)
 {
     TimelineItem item = new TimelineItem()
     {
         Creator = new Contact()
         {
             DisplayName = ".NET Quick Start",
             Id = "DOTNET_QUICK_START",
         },
         Text = "Tell me what you had for lunch :)",
         Notification = new NotificationConfig() { Level = "DEFAULT" },
         MenuItems = new List<MenuItem>() { { new MenuItem() { Action = "REPLY" } } },
     };
     controller.Service.Timeline.Insert(item).Fetch();
     return "A timeline item with action has been inserted.";
 }
        /// <summary>
        /// Inserts a timeline item.
        /// </summary>
        /// <param name="controller">Controller calling this method.</param>
        /// <returns>Status message.</returns>
        private static String InsertItem(MainController controller)
        {
            TimelineItem item = new TimelineItem()
            {
                Text = controller.Request.Form.Get("message"),
                Notification = new NotificationConfig() { Level = "DEFAULT" }
            };
            String mediaLink = controller.Request.Form.Get("imageUrl");

            if (!String.IsNullOrEmpty(mediaLink))
            {
                Stream stream = null;
                if (mediaLink.StartsWith("/"))
                {
                    stream = new StreamReader(controller.Server.MapPath(mediaLink)).BaseStream;
                }
                else
                {
                    HttpWebRequest request = WebRequest.Create(mediaLink) as HttpWebRequest;
                    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                    stream = response.GetResponseStream();
                }

                controller.Service.Timeline.Insert(item, stream, "image/jpeg").Upload();
            }
            else
            {
                controller.Service.Timeline.Insert(item).Fetch();
            }

            return "A timeline item has been inserted.";
        }
        /// <summary>
        /// Inserts a sharing contact.
        /// </summary>
        /// <param name="controller">Controller calling this method.</param>
        /// <returns>Status message.</returns>
        private static String InsertContact(MainController controller)
        {
            String name = controller.Request.Form.Get("name");
            String imageUrl = controller.Request.Form.Get("imageUrl");

            if (imageUrl.StartsWith("/"))
            {
                UriBuilder builder = new UriBuilder(controller.Request.Url);
                builder.Path = imageUrl;
                imageUrl = builder.ToString();
            }

            Contact contact = new Contact()
            {
                DisplayName = name,
                Id = name,
                ImageUrls = new List<String>() { imageUrl }
            };

            controller.Service.Contacts.Insert(contact).Fetch();

            return "Inserted contact: " + name + ".";
        }
 /// <summary>
 /// Deletes a timeline item.
 /// </summary>
 /// <param name="controller">Controller calling this method.</param>
 /// <returns>Status message.</returns>
 private static String DeleteTimelineItem(MainController controller)
 {
     controller.Service.Timeline.Delete(controller.Request.Form.Get("itemId")).Fetch();
     return "A timeline item has been deleted.";
 }
        /// <summary>
        /// Deletes an existing subscription.
        /// </summary>
        /// <param name="controller">Controller calling this method.</param>
        /// <returns>Status message.</returns>
        private static String DeleteSubscription(MainController controller)
        {
            String collection = controller.Request.Form.Get("subscriptionId");

            controller.Service.Subscriptions.Delete(collection).Fetch();
            return "Application has been unsubscribed.";
        }
 /// <summary>
 /// Deletes a sharing contact.
 /// </summary>
 /// <param name="controller">Controller calling this method.</param>
 /// <returns>Status message.</returns>
 private static String DeleteContact(MainController controller)
 {
     controller.Service.Contacts.Delete(controller.Request.Form.Get("id")).Fetch();
     return "Contact has been deleted.";
 }