public void test() { var cont = new SoLoudContext(); ApplicationUser asdok = new ApplicationUser(); cont.Users.Add(asdok); }
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(); }
internal async Task <ApplicationUser> CreateUser(string UserType, string email, string username, string hometown) { var context = new SoLoudContext(); var UserRole = context.Roles.FirstOrDefault(x => x.Name == UserType); var user = new ApplicationUser { UserName = username, Email = email, Hometown = hometown }; user.Roles.Add(new IdentityUserRole() { RoleId = UserRole.Id, UserId = user.Id }); var result = await UserManager.CreateAsync(user); return(UserManager.FindById(user.Id)); }
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; }