public async Task VerifyPost(string PostId)
        {
            var db = new SoLoudContext();

            Post post = db.Posts.FirstOrDefault(x => x.Id == PostId);

            if (post == null)
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)
                {
                    Content = new StringContent("No Post with such id")
                });
            }
            else if (post.PostStatus.Equals(PostStatus.Verified))
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    Content = new StringContent("Post already verified")
                });
            }

            var user = db.Users.Include("Claims").FirstOrDefault(x => x.Id == post.UserId);

            if (user == null)
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.ExpectationFailed)
                {
                    Content = new StringContent(String.Format("Post is connected to user with id {0} but no such user was found", post.UserId))
                });
            }

            var FbClaim = user.Claims.FirstOrDefault(x => x.ClaimType == SoloudClaimTypes.FacebookAccessToken.ToString() && x.UserId == user.Id);

            if (FbClaim == null)
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.ExpectationFailed)
                {
                    Content = new StringContent(String.Format("No saved fb token was found for user with id {0}", user.Id))
                });
            }

            var EncryptedFbToken = FbClaim.ClaimValue;
            var DecryptedFbToken = AESThenHMAC.SimpleDecryptWithPassword(EncryptedFbToken, EncryptionKey);

            var fbClient = new FbClient(DecryptedFbToken);

            var fbResponse = await fbClient.MultiphotoStory(post.Photos.ToList(), post.Text, post.PlaceId);

            post.VerifiedAt = DateTimeOffset.Now;
            //post.IsVerified = true;
            post.PostStatus = PostStatus.Verified;
            post.FacebookId = fbResponse.id;
            db.SaveChanges();
        }
Example #2
0
        public ActionResult Create(ContestSentItem contest)
        {
            //if (!Request.Content.IsMimeMultipartContent())
            //{
            //    this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
            //}


            //Stream req = Request.RequestContext.Content.ReadAsStreamAsync().Result;
            //HttpMultipartParser parser = new HttpMultipartParser(req, "file");

            //if (parser.Success)
            //{
            //    MemoryStream ms = new MemoryStream(parser.FileContents);
            //    HSSFWorkbook templateWorkbook = new HSSFWorkbook(ms);

            //    HSSFSheet sheet = (HSSFSheet)templateWorkbook.GetSheetAt(0);

            //}

            //var asd = new byte[];
            //Request.InputStream.Read()

            var a          = Request;
            var newContest = new Contest();

            newContest.Id          = Guid.NewGuid().ToString();
            newContest.UserId      = UserId;
            newContest.Title       = contest.Title;
            newContest.Description = contest.Description;
            newContest.EndingAt    = contest.EndingAt;
            newContest.Category    = contest.Category;

            //var imageurl = getImage();
            //newContest.ProductImageUrl = imageurl;

            if (contest.ProductImage != null && contest.ProductImage.ContentLength > 0)
            {
                var newPhoto = new File()
                {
                    FileName    = System.IO.Path.GetFileName(contest.ProductImage.FileName),
                    FileType    = FileType.Photo,
                    ContentType = contest.ProductImage.ContentType
                };
                using (var reader = new System.IO.BinaryReader(contest.ProductImage.InputStream))
                {
                    newPhoto.Content = reader.ReadBytes(contest.ProductImage.ContentLength);
                }
                newContest.ExamplePhotos = new List <File>()
                {
                    newPhoto
                };
            }

            if (ModelState.IsValid)
            {
                db.Contests.Add(newContest);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.UserId = new SelectList(db.Users, "Id", "Hometown", newContest.UserId);
            return(View(contest));
        }
        private async Task GrantResourceOwnerCredentialsFromFacebookToken(OAuthGrantResourceOwnerCredentialsContext context)
        {
            //Find External Token
            var facebookToken = getExternalToken(context);

            if (facebookToken == null)
            {
                throw new Exception("ExternalToken is null");
            }

            //Get User Using FacebookToken
            var fb = new FacebookClient(facebookToken);

            Facebook.Me me = fb.Get <Facebook.Me>("me", new { fields = "id, name, email, gender, birthday, picture.type(large)" });

            var User = userManager.FindByEmail(me.email);

            if (User == null)
            {
                var AccCtrl = new AccountController(HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>(), HttpContext.Current.GetOwinContext().GetUserManager <ApplicationSignInManager>());
                User = await AccCtrl.CreateUser("User", me.email, me.email, null);
            }

            //Save fbtoken to db
            var db = new SoLoudContext();

            //We need to refetch from db in order to be able to edit/add claims. If we dont the context is not tracking the Claim entities and changes will not save
            User = db.Users.Include("Claims").FirstOrDefault(x => x.Id == User.Id);
            var fbTokenClaim = User.Claims.FirstOrDefault(x => x.ClaimType == SoloudClaimTypes.FacebookAccessToken.ToString());

            if (fbTokenClaim == null)
            {
                fbTokenClaim = new Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim()
                {
                    ClaimType = SoloudClaimTypes.FacebookAccessToken.ToString()
                };
                User.Claims.Add(fbTokenClaim);
            }
            fbTokenClaim.ClaimValue = AESThenHMAC.SimpleEncryptWithPassword(facebookToken, ConfigurationManager.AppSettings["EncryptionKey"].ToString());
            db.SaveChanges();

            //Create Token and return
            var identity = new ClaimsIdentity(context.Options.AuthenticationType);

            identity.AddClaim(new Claim("UserName", User.UserName));
            identity.AddClaim(new Claim("UserId", User.Id));
            identity.AddClaim(new Claim(SoloudClaimTypes.FacebookAccessToken.ToString(), facebookToken));

            //find user roles
            var UserRoles = User.Roles.Join(db.Roles, x => x.RoleId, r => r.Id, (x, r) => r.Name);

            if (UserRoles != null && UserRoles.Count() > 0)
            {
                identity.AddClaim(new Claim("Roles", UserRoles.Aggregate((acc, cur) => acc += "," + cur)));
            }

            var props = new AuthenticationProperties(new Dictionary <string, string>
            {
                { "User", JsonConvert.SerializeObject(User) }
            });

            var ticket = new AuthenticationTicket(identity, props);

            context.Validated(ticket);

            return;
        }