/// <summary>
        ///   Register the device and pair it with the specified user.
        /// </summary>
        /// <param name="userId"> Guid representation of a userId </param>
        /// <returns> Returns true if device was registered to the user, false if user doesn't exist or device is already registered. </returns>
        public bool Post(Guid userId)
        {
            if (CurrentUser != null) return false;
            if (ConnectionId == Guid.Empty) return false;
            if (UserRegistry.ExistingId(userId))
            {
                if (DeviceRegistry.ConnectUser(ConnectionId, userId))
                {
                    _activityController = new ActivityController();
                    _friendController = new FriendController();

                    // Subscribe to connection
                    Notifier.Subscribe(ConnectionId, ConnectionId);

                    // Subscribe to user
                    Notifier.Subscribe(ConnectionId, userId);

                    // Subscribe to friends
                    foreach (var friend in UserRegistry.Get(userId).Friends)
                        Notifier.Subscribe(ConnectionId, friend.Id);

                    // Subscribe to activities and push to client
                    foreach (var activity in _activityController.GetExtendedActivities(userId))
                    {
                        Notifier.Subscribe(ConnectionId, Guid.Parse(activity["Id"].ToString()));
                        Notifier.NotifyGroup(ConnectionId, NotificationType.ActivityAdded, activity);
                        foreach(var resource in activity["Resources"])
                            Notifier.NotifyGroup(ConnectionId, NotificationType.FileDownload, resource);
                    }

                    // Push pending friend requests
                    foreach (var fr in _friendController.GetFriendRequests(userId))
                        Notifier.NotifyGroup(ConnectionId, NotificationType.FriendRequest,
                                             new UserController().GetExtendedUser(fr.UserId));

                    // Push connected device to user
                    if (DeviceRegistry.ConnectedDevices(CurrentUserId).Count == 1)
                        Notifier.NotifyGroup(CurrentUserId, NotificationType.UserConnected, userId);
                    return true;
                }
            }
            return false;
        }
 public Task<HttpResponseMessage> Post(Guid activityId, Guid resourceId)
 {
     try {
         var resource = new ActivityController().GetActivity(activityId).Resources.SingleOrDefault(r => r.Id == resourceId);
         if(resource != null) {
             var task = Request.Content.ReadAsStreamAsync();
             var result = task.ContinueWith(o =>
                                                {
                                                    var uploadTask = _fileStorage.Upload(GenerateId(resource), task.Result);
                                                    return uploadTask.ContinueWith(u =>
                                                                                {
                                                                                    if(u.Result)
                                                                                    {
                                                                                        Notifier.NotifyGroup(activityId, NotificationType.FileDownload, resource);
                                                                                        return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
                                                                                    }
                                                                                    throw new HttpResponseException(new HttpResponseMessage
                                                                                                                        {
                                                                                                                            StatusCode = HttpStatusCode.NotFound,
                                                                                                                            Content = new StringContent("The resource was not uploaded.")
                                                                                                                        });
                                                                                });
             });
             return result.Result;
         }
         throw new HttpResponseException(new HttpResponseMessage
         {
             StatusCode = HttpStatusCode.NotFound,
             Content = new StringContent("The resource was not found.")
         });
     } catch(Exception e)
     {
         throw new HttpResponseException(new HttpResponseMessage
         {
             StatusCode = HttpStatusCode.NotFound,
             Content = new StringContent(e.Message)
         });
     }
 }