コード例 #1
0
        private void GetSocialMediaAccounts(ApplicationUser user, SocialMediaAccounts accountType,
                                            out FacebookUserAccount facebookAccount,
                                            out TwitterUserAccount twitterAccount)
        {
            facebookAccount = new FacebookUserAccount();
            twitterAccount  = new TwitterUserAccount();

            if (accountType == SocialMediaAccounts.Team)
            {
                facebookAccount.AccountId            = user.FbTeamAccount != null ? user.FbTeamAccount.AccountId : "";
                facebookAccount.account_access_token = user.FbTeamAccount != null ? user.FbTeamAccount.account_access_token : "";

                twitterAccount.AccountId                   = user.twitterTeamAccount != null ? user.twitterTeamAccount.AccountId : "";
                twitterAccount.account_access_token        = user.twitterTeamAccount != null ? user.twitterTeamAccount.account_access_token : "";
                twitterAccount.account_access_token_secret = user.twitterTeamAccount != null ? user.twitterTeamAccount.account_access_token_secret : "";

                return;
            }

            facebookAccount.AccountId            = user.FbUserAccount != null ? user.FbUserAccount.AccountId : "";
            facebookAccount.account_access_token = user.FbUserAccount != null ? user.FbUserAccount.account_access_token : "";

            twitterAccount.AccountId                   = user.twitterUserAccount != null ? user.twitterUserAccount.AccountId : "";
            twitterAccount.account_access_token        = user.twitterUserAccount != null ? user.twitterUserAccount.account_access_token : "";
            twitterAccount.account_access_token_secret = user.twitterUserAccount != null ? user.twitterUserAccount.account_access_token_secret : "";
        }
コード例 #2
0
        // POST: Post/CreateTwitterComment
        //[HttpPost]
        private async Task <ActionResult> CreateTwitterComment(SocialMediaAccounts type, HttpRequestBase Request)
        {
            CommentViewModel comment = null;

            try
            {
                GetUser(out _, out ApplicationUser user);
                GetSocialMediaAccounts(user, type, out _, out TwitterUserAccount twitterAccount);

                comment = await twitterPostsApi.CreatePostCommentAsync(Request.Form["post_id"], Request.Form["message"], twitterAccount.AccountId, twitterAccount.account_access_token, twitterAccount.account_access_token_secret);
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            return(PartialView("~/Views/Post/Partials/_Comments.cshtml", new List <CommentViewModel>()
            {
                comment
            }));
        }
コード例 #3
0
        public async Task <SocialMediaAccountFullViewModel> AddSocialMediaAccount(SocialMediaAccountViewModel account,
                                                                                  string userId)
        {
            var user = await FindByIdAsync(userId) ??
                       throw new ContentNotFoundException(
                                 "Не е намерен потребителят на, който искате да добавите социална медия!");

            if (user.SocialMediaAccounts.Any(s => s.SocialMedia == account.SocialMedia))
            {
                throw new UniquenessException($"Вече имате въведен акаунт в {account.SocialMedia}");
            }

            var socialMediaAccount = new SocialMediaAccounts
            {
                SocialMedia        = account.SocialMedia,
                SocialMediaAccount = account.SocialMediaAccount
            };

            user.SocialMediaAccounts.Add(socialMediaAccount);
            await UpdateAsync(user);

            return(new SocialMediaAccountFullViewModel
            {
                Id = socialMediaAccount.Id,
                SocialMedia = socialMediaAccount.SocialMedia,
                SocialMediaAccount = socialMediaAccount.SocialMediaAccount
            });
        }
コード例 #4
0
        // GET: Post/GetFacebookComments
        private async Task <ActionResult> GetFacebookComments(SocialMediaAccounts type, string post_id, string after_cursor)
        {
            Tuple <List <CommentViewModel>, string> comments = null;

            try
            {
                GetUser(out _, out ApplicationUser user);
                GetSocialMediaAccounts(user, type, out FacebookUserAccount facebookAccount, out _);

                comments = await facebookPostsApi.GetPostCommentsAsync(post_id, facebookAccount.account_access_token, 5, after_cursor);
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            return(Json(new
            {
                cursors = new
                {
                    after = comments.Item2,
                },
                comments = Utils.RenderRazorViewToString(this, "~/Views/Post/Partials/_Comments.cshtml", comments.Item1)
            }, JsonRequestBehavior.AllowGet));
        }
コード例 #5
0
        // POST: Post/CreateFacebookComment
        //[HttpPost]
        private async Task <ActionResult> CreateFacebookComment(SocialMediaAccounts type, HttpRequestBase Request)
        {
            CommentViewModel comment = null;

            try
            {
                GetUser(out _, out ApplicationUser user);
                GetSocialMediaAccounts(user, type, out FacebookUserAccount facebookAccount, out _);

                comment = await facebookPostsApi.CreatePostCommentAsync(Request.Form["post_id"], Request.Form["message"], facebookAccount.account_access_token);
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            //catch (Exception)
            //{
            //    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            //}

            return(PartialView("~/Views/Post/Partials/_Comments.cshtml", new List <CommentViewModel>()
            {
                comment
            }));
        }
コード例 #6
0
        // GET: Post/GetTwitterComments
        private async Task <ActionResult> GetTwitterComments(SocialMediaAccounts type, string post_id, string after_cursor)
        {
            List <CommentViewModel> comments = null;

            try
            {
                GetUser(out _, out ApplicationUser user);
                GetSocialMediaAccounts(user, type, out _, out TwitterUserAccount twitterAccount);

                comments = await twitterPostsApi.GetPostCommentsAsync(post_id, twitterAccount.AccountId, twitterAccount.account_access_token, twitterAccount.account_access_token_secret);
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            return(Json(new
            {
                cursors = new
                {
                    after = "",
                },
                comments = Utils.RenderRazorViewToString(this, "~/Views/Post/Partials/_Comments.cshtml", comments)
            }, JsonRequestBehavior.AllowGet));
        }
コード例 #7
0
        // GET: Post/GetTwitterPosts -> Private
        private async Task <ActionResult> GetTwitterPosts(SocialMediaAccounts type, string twitter_after_cursor)
        {
            GetUser(out _, out ApplicationUser user);
            GetSocialMediaAccounts(user, type, out _, out TwitterUserAccount twitterAccount);
            Tuple <List <PostViewModel>, string> twitterPosts;

            try
            {
                twitterPosts = await twitterPostsApi.GetPostedPostsAsync(twitterAccount.AccountId,
                                                                         twitterAccount.account_access_token,
                                                                         twitterAccount.account_access_token_secret,
                                                                         10, twitter_after_cursor);
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            return(Json(new
            {
                cursors = new
                {
                    fbafter = "",
                    twafter = twitterPosts.Item2
                },
                posts = Utils.RenderRazorViewToString(this, "~/Views/Post/Partials/_Posts.cshtml", twitterPosts.Item1)
            }, JsonRequestBehavior.AllowGet));
        }
コード例 #8
0
        // POST: Post/EditPost
        private async Task <ActionResult> EditPostAsync(SocialMediaAccounts type, HttpRequestBase Request)
        {
            var form = Request.Form;

            GetUser(out _, out ApplicationUser user);
            GetSocialMediaAccounts(user, type,
                                   out FacebookUserAccount facebookAccount,
                                   out _);

            PostViewModel editedPost = null;

            try
            {
                editedPost = await facebookPostsApi.EditPostAsync(facebookAccount.AccountId, form["post-id"], form["message"], Request.Files, form["old-photos"], form["deleted"], facebookAccount.account_access_token);
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            return(PartialView("~/Views/Post/Partials/_Posts.cshtml", new List <PostViewModel>()
            {
                editedPost
            }));
        }
コード例 #9
0
        // GET: Post/GetPosts
        private async Task <ActionResult> GetPosts(SocialMediaAccounts type, string tab, string fb_after_cursor, string twitter_after_cursor)
        {
            if (tab.ToLower() == "facebook")
            {
                return(await GetFacebookPosts(type, fb_after_cursor));
            }

            if (tab.ToLower() == "twitter")
            {
                return(await GetTwitterPosts(type, twitter_after_cursor));
            }

            return(await GetAllPosts(type, fb_after_cursor, twitter_after_cursor));
        }
コード例 #10
0
        private async Task <ActionResult> DeleteTwitterPost(SocialMediaAccounts type, string post_id)
        {
            try
            {
                GetUser(out _, out ApplicationUser user);
                GetSocialMediaAccounts(user, type, out _, out TwitterUserAccount twitterAccount);

                await twitterPostsApi.DeleteTweetAsync(post_id, twitterAccount.account_access_token, twitterAccount.account_access_token_secret);
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.Accepted));
        }
コード例 #11
0
        private async Task <ActionResult> DeleteFacebookPost(SocialMediaAccounts type, string post_id)
        {
            try
            {
                GetUser(out _, out ApplicationUser user);
                GetSocialMediaAccounts(user, type, out FacebookUserAccount facebookAccount, out _);

                await facebookPostsApi.DeleteObjectAsync(post_id, facebookAccount.account_access_token);
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.Accepted));
        }
コード例 #12
0
        private async System.Threading.Tasks.Task <List <SocialMediaAccountViewModel> > GetProfilesInfoAsync(ApplicationUser user, SocialMediaAccounts type)
        {
            GetSocialMediaAccounts(user, type,
                                   out FacebookUserAccount facebookAccount,
                                   out TwitterUserAccount twitterAccount);

            bool CanAccessFacebook = facebookAccount.account_access_token != "" &&
                                     await FacebookOAuthLogin.IsAuthorized(facebookAccount.account_access_token);

            bool CanAccessTwitter = twitterAccount.account_access_token != "" &&
                                    await TwitterOAuthAuthenticator.IsAuthorized(twitterAccount.account_access_token, twitterAccount.account_access_token_secret);

            List <SocialMediaAccountViewModel> profileInfo = new List <SocialMediaAccountViewModel>();

            if (CanAccessFacebook)
            {
                profileInfo.Add(await facebookPostsApi.GetProfileInfoAsync(facebookAccount.AccountId, facebookAccount.account_access_token));
            }

            if (CanAccessTwitter)
            {
                profileInfo.Add(await twitterPostsApi.GetProfileInfoAsync(twitterAccount.AccountId, twitterAccount.account_access_token, twitterAccount.account_access_token_secret));
            }

            return(profileInfo);
        }
コード例 #13
0
        private async Task <ActionResult> CreatePost(SocialMediaAccounts type, HttpRequestBase Request)
        {
            GetUser(out _, out ApplicationUser user);
            GetSocialMediaAccounts(user, type,
                                   out FacebookUserAccount facebookAccount,
                                   out TwitterUserAccount twitterAccount);

            bool CanAccessFacebook = facebookAccount.account_access_token != "" &&
                                     await FacebookOAuthLogin.IsAuthorized(facebookAccount.account_access_token);

            bool CanAccessTwitter = twitterAccount.account_access_token != "" &&
                                    await TwitterOAuthAuthenticator.IsAuthorized(twitterAccount.account_access_token, twitterAccount.account_access_token_secret);

            List <Task <PostViewModel> > postTasks = new List <Task <PostViewModel> >();

            JArray selectedAccounts = JArray.Parse(Request.Form["accounts"]);

            HttpFileCollectionBase images  = Request.Files;
            List <MemoryStream>    streams = new List <MemoryStream>();

            if (images.Count != 0)
            {
                streams = images.AllKeys
                          .ToList()
                          .Select(key =>
                {
                    MemoryStream stream = new MemoryStream();
                    images[key].InputStream.CopyTo(stream);
                    return(stream);
                })
                          .ToList();
            }

            List <PostViewModel> postedPosts = new List <PostViewModel>();

            try
            {
                foreach (var account in selectedAccounts)
                {
                    if (account["type"].ToString().ToLower() == "facebook" && CanAccessFacebook)
                    {
                        //postedPosts.Add(await facebookPostsApi.CreatePostAsync(facebookAccount.AccountId,
                        //    Request.Form["message"],
                        //    Request.Files,
                        //    facebookAccount.account_access_token));

                        postTasks.Add(facebookPostsApi.CreatePostAsync(facebookAccount.AccountId,
                                                                       Request.Form["message"],
                                                                       streams,
                                                                       facebookAccount.account_access_token));
                    }

                    if (account["type"].ToString().ToLower() == "twitter" && CanAccessTwitter)
                    {
                        //postedPosts.Add(await twitterPostsApi.CreatePostAsync(Request.Form["message"],
                        //    Request.Files,
                        //    twitterAccount.account_access_token,
                        //    twitterAccount.account_access_token_secret));
                        postTasks.Add(twitterPostsApi.CreatePostAsync(Request.Form["message"],
                                                                      streams,
                                                                      twitterAccount.account_access_token,
                                                                      twitterAccount.account_access_token_secret));
                    }
                }

                foreach (var task in postTasks)
                {
                    postedPosts.Add(await task.TimeoutAfter <PostViewModel>(new TimeSpan(0, 0, 10), () => new PostViewModel {
                        Id = ""
                    }));
                }
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            //PostViewModel post = await facebookPostsApi.CreatePostAsync(user.FbUserAccount.AccountId, Request.Form["message"], Request.Files, user.FbUserAccount.account_access_token);

            return(PartialView("~/Views/Post/Partials/_Posts.cshtml", postedPosts.Where(post => post.Id != "").ToList()));
        }
コード例 #14
0
        // GET: Post/GetAllPosts -> Private
        private async Task <ActionResult> GetAllPosts(SocialMediaAccounts type, string fb_after_cursor, string twitter_after_cursor)
        {
            GetUser(out _, out ApplicationUser user);
            GetSocialMediaAccounts(user, type,
                                   out FacebookUserAccount facebookAccount,
                                   out TwitterUserAccount twitterAccount);

            bool CanGetFacebookPosts = facebookAccount.account_access_token != "" &&
                                       await FacebookOAuthLogin.IsAuthorized(facebookAccount.account_access_token);

            bool CanGetTwitterPosts = twitterAccount.account_access_token != "" &&
                                      await TwitterOAuthAuthenticator.IsAuthorized(twitterAccount.account_access_token, twitterAccount.account_access_token_secret);

            Task <Tuple <List <PostViewModel>, string> > facebookPostsTask =
                new Task <Tuple <List <PostViewModel>, string> >(() => Tuple.Create(new List <PostViewModel>(), ""));
            Task <Tuple <List <PostViewModel>, string> > twitterPostsTask =
                new Task <Tuple <List <PostViewModel>, string> >(() => Tuple.Create(new List <PostViewModel>(), ""));;

            try
            {
                if (CanGetFacebookPosts)
                {
                    facebookPostsTask = facebookPostsApi.GetPostedPostsAsync(facebookAccount.AccountId,
                                                                             facebookAccount.account_access_token,
                                                                             5, fb_after_cursor);
                }

                if (CanGetTwitterPosts)
                {
                    twitterPostsTask = twitterPostsApi.GetPostedPostsAsync(twitterAccount.AccountId,
                                                                           twitterAccount.account_access_token,
                                                                           twitterAccount.account_access_token_secret,
                                                                           5, twitter_after_cursor);
                }
            }
            catch (SocialMediaApiException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
            catch (Exception)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            Tuple <List <PostViewModel>, string> facebookPosts = await facebookPostsTask.TimeoutAfter(new TimeSpan(0, 0, 1), () => Tuple.Create(new List <PostViewModel>(), "")); // await facebookPostsTask;

            Tuple <List <PostViewModel>, string> twitterPosts = await twitterPostsTask.TimeoutAfter(new TimeSpan(0, 0, 1), () => Tuple.Create(new List <PostViewModel>(), ""));   // await twitterPostsTask;

            IEnumerable <Tuple <PostViewModel, PostViewModel> > pairs = facebookPosts.Item1.Zip(twitterPosts.Item1, (a, b) => Tuple.Create(a, b));
            List <PostViewModel> posts = pairs.ToList()
                                         .SelectMany(p => new List <PostViewModel>()
            {
                p.Item1, p.Item2
            })
                                         .ToList();

            int facebookPostsCount = facebookPosts.Item1.Count;
            int twitterPostsCount  = twitterPosts.Item1.Count;

            posts.AddRange(facebookPostsCount >= twitterPostsCount ?
                           facebookPosts.Item1.GetRange(Math.Min(facebookPostsCount, twitterPostsCount), Math.Abs(facebookPostsCount - twitterPostsCount)) :
                           twitterPosts.Item1.GetRange(Math.Min(facebookPostsCount, twitterPostsCount), Math.Abs(facebookPostsCount - twitterPostsCount)));

            return(Json(new
            {
                cursors = new
                {
                    fbafter = facebookPosts.Item2,
                    twafter = twitterPosts.Item2
                },
                posts = Utils.RenderRazorViewToString(this, "~/Views/Post/Partials/_Posts.cshtml", posts)
            }, JsonRequestBehavior.AllowGet));
        }
コード例 #15
0
 public SocialMediaAccountInfoDTO(SocialMediaAccounts socialMediaAccount)
 {
     SocialMedia        = socialMediaAccount.SocialMedia;
     SocialMediaAccount = socialMediaAccount.SocialMediaAccount;
 }