public void RemoveUserRolesTest() { GXUser user = new GXUser(); user.Id = "642c8f77-aeeb-4e86-86db-1a8b1b2fc982"; user.UserName = "******"; List <string> roles = new List <string>(); roles.Add("Admin"); roles.Add("User"); roles.Add("DeviceManager"); roles.Add("SystemErrorManager"); GXSelectArgs sel = GXSelectArgs.Select <GXRole>(q => GXSql.One); sel.Where.And <GXUserRole>(q => q.UserId == user.Id); sel.Where.And <GXRole>(q => !roles.Contains(q.Name)); GXDeleteArgs d = GXDeleteArgs.Delete <GXUserRole>(q => q.UserId == user.Id); d.Where.And <GXRole>(q => GXSql.Exists <GXUserRole, GXRole>(q => q.RoleId, q => q.Id, sel)); /* * GXSelectArgs sel = GXSelectArgs.Select<GXUserRole>(q => q.UserId, q => q.UserId == "642c8f77-aeeb-4e86-86db-1a8b1b2fc982"); * sel.Joins.AddInnerJoin<GXUserRole, GXRole>(a => a.RoleId, b => b.Id); * sel.Where.And<GXRole>(q => !roles.Contains(q.Name)); * GXDeleteArgs d = GXDeleteArgs.Delete<GXUserRole>(q => GXSql.Exists(sel)); */ Assert.AreEqual("", d.ToString()); }
public void AddUserRolesTest() { GXUser user = new GXUser(); user.Id = "642c8f77-aeeb-4e86-86db-1a8b1b2fc982"; user.UserName = "******"; List <string> roles = new List <string>(); roles.Add("Admin"); roles.Add("User"); roles.Add("DeviceManager"); roles.Add("SystemErrorManager"); GXSelectArgs sel = GXSelectArgs.Select <GXRole>(q => q.Id); GXSelectArgs sel2 = GXSelectArgs.Select <GXUserRole>(q => q.UserId, q => q.UserId == "642c8f77-aeeb-4e86-86db-1a8b1b2fc982"); sel.Where.And <GXRole>(q => !GXSql.Exists <GXRole, GXUserRole>(q => q.Id, q => q.RoleId, sel2)); sel.Where.And <GXRole>(q => roles.Contains(q.Name)); GXUserRole ur = new GXUserRole(); ur.UserId = user.Id; GXInsertArgs i = GXInsertArgs.Insert(ur); i.Add <GXUserRole>(sel, q => q.RoleId); Assert.AreEqual("", i.ToString()); }
public void IPTest() { GXUser user = new GXUser(); user.Id = "Gurux"; //GXSelectArgs args = GXSelectArgs.Select<GXIpAddress>(s => s.Id, where => where.User == user && where.IPAddress == 0); GXSelectArgs args = GXSelectArgs.Select <GXIpAddress>(s => s.Id, where => where.User == user); Assert.AreEqual("Mikko", args.ToString()); }
private bool isGroupMember(GXUser user, Group group) { var members = _context.GroupMembers.Where(x => x.group == group); if (group.owner == user || members.Any(x => x.member == user)) { return(true); } return(false); }
public void UpdateUserTest() { GXUser user = new GXUser(); user.Id = "1"; user.UserName = "******"; GXUpdateArgs arg2 = GXUpdateArgs.Update(user); arg2.Exclude <GXUser>(q => new { q.PasswordHash, q.SecurityStamp, q.CreationTime }); Assert.AreEqual("UPDATE [GXUser] SET [UserName] = 'Gurux', [NormalizedUserName] = NULL, [Email] = NULL, [NormalizedEmail] = NULL, [EmailConfirmed] = 0, [ConcurrencyStamp] = NULL, [PhoneNumber] = NULL, [PhoneNumberConfirmed] = 0, [TwoFactorEnabled] = 0, [LockoutEnd] = '00010101 00:00:00 +00:00', [LockoutEnabled] = 0, [AccessFailedCount] = 0, [Updated] = '00010101 00:00:00', [Detected] = '00010101 00:00:00', [Removed] = '00010101 00:00:00', [DateOfBirth] = NULL WHERE [ID] = '1'", arg2.ToString()); }
public void RemoveUsersTest() { RemoveUser req = new RemoveUser(); req.Ids = new string[] { Guid.Empty.ToString(), Guid.Empty.ToString() }; //Set removed time for all the removed users. GXUser u = new GXUser() { Removed = DateTime.Now }; GXUpdateArgs update = GXUpdateArgs.Update(u, q => q.Removed); update.Where.And <GXUser>(q => req.Ids.Contains(q.Id)); Assert.AreEqual("", update.ToString()); }
public async Task <IActionResult> Register([FromBody] RegisterViewModel vm) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } try { var user = new GXUser() { UserName = vm.email, Email = vm.email, firstName = vm.firstName, lastName = vm.lastName, gender = vm.gender }; var result = await _userManager.CreateAsync(user, vm.password); if (!result.Succeeded) { return(new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState))); } ; var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); //var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme); var ub = new UriBuilder(url); ub.Path = "confirm-email"; ub.Query = $"userId={user.Id}&code={HttpUtility.UrlEncode(code)}"; var callbackUrl = ub.ToString(); await _emailSender.SendEmailConfirmationAsync(user.Email, callbackUrl); return(Ok(result)); } catch (AppException ex) { return(BadRequest(ex.Message)); } }
public void MultipleTablesTest() { GXUser user = new GXUser() { Id = "Gurux" }; GXUserGroup userGroup = new GXUserGroup(); userGroup.Users.Add(user); GXSelectArgs arg = GXSelectArgs.Select <GXUserGroup>(s => s.Id, where => where.Removed == null); arg.Where.FilterBy(userGroup, false); arg.Joins.AddInnerJoin <GXUserGroup, GXUserGroupUser>(j => j.Id, j => j.UserGroupId); arg.Joins.AddInnerJoin <GXUserGroupUser, GXUser>(j => j.UserId, j => j.Id); string[] userIds = new string[] { "Gurux" }; arg.Where.And <GXUser>(where => where.Removed == null && userIds.Contains(where.Id)); Assert.AreEqual("Mikko", arg.ToString()); }
public void ExcludeTest() { GXUser user = new GXUser() { Id = "Default" }; GXUserGroup item = new GXUserGroup() { Name = "Default" }; item.Users.Add(user); GXInsertArgs insert = GXInsertArgs.Insert(item); insert.Exclude <GXUserGroup>(e => e.CreationTime); insert.Exclude <GXUserGroup>(e => e.Users); Assert.AreEqual("Mikko", insert.ToString()); }
public async Task <IActionResult> GoogleLogin([FromBody] GoogleLoginViewModel vm) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var user = await _userManager.FindByEmailAsync(vm.email); string password = Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8); if (user == null) { var u = new GXUser() { Email = vm.email, UserName = vm.email, googleId = vm.googleId, photoUrl = vm.photoUrl, firstName = vm.name, gender = "", dateJoined = DateTime.Now }; var result = await _userManager.CreateAsync(u, password); if (!result.Succeeded) { return(new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState))); } user = await _userManager.FindByEmailAsync(vm.email); } else { user.googleId = vm.googleId; user.photoUrl = vm.photoUrl; _context.Users.Update(user); await _context.SaveChangesAsync(); } var identity = await Task.FromResult(_jwtFactory.GenerateClaimsIdentity(user.UserName, user.Id)); var jwt = await Tokens.GenerateJwt(identity, _jwtFactory, user.UserName, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented }); return(Ok(new { Id = user.Id, userName = user.UserName, firstName = user.firstName, lastName = user.lastName, email = user.Email, facebookId = user.facebookId, gender = user.gender, twitterId = user.twitterId, googleId = user.googleId, birthDate = user.birthDate, photoUrl = !string.IsNullOrEmpty(user.photoUrl) ? user.photoUrl : "/assets/images/profile-pic.png", token = jwt })); }
public static string buildGroupInviteSubject(Group group, GroupInvite invite, GXUser user) { if (group == null) { return(""); } if (invite == null) { return(""); } if (user == null) { return(""); } var sb = new StringBuilder(); if (!string.IsNullOrEmpty(user.lastName) & !string.IsNullOrEmpty(user.firstName)) { sb.AppendFormat("{0} {1}", user.firstName, user.lastName); } else { sb.AppendFormat("{0}", user.Email); } sb.AppendFormat(" has invited you to to "); switch (user.gender) { case "": sb.Append("their"); break; case "m": sb.Append("his"); break; case "f": sb.Append("her"); break; default: sb.Append("their"); break; } sb.AppendFormat(" group {0} on Gift Exchange", group.name); return(sb.ToString()); }
private async Task <TwitterUserModel> getAccessToken(string authToken, string authVerifier) { GXUser user = null; TwitterUserModel twUser = null; string jwt = ""; string nonce = oAuthUtil.GetNonce(); string timeStamp = oAuthUtil.GetTimeStamp(); string sigBaseStringParams = "oauth_consumer_key=" + "5R7Y1dJMc26yEdzFEbLWCZWKg"; sigBaseStringParams += "&" + "oauth_nonce=" + nonce; sigBaseStringParams += "&" + "oauth_signature_method=" + "HMAC-SHA1"; sigBaseStringParams += "&" + "oauth_timestamp=" + timeStamp; sigBaseStringParams += "&" + "oauth_token=" + authToken; sigBaseStringParams += "&" + "oauth_verifier=" + authVerifier; sigBaseStringParams += "&" + "oauth_version=1.0"; string sigBaseString = "POST&"; sigBaseString += Uri.EscapeDataString("https://api.twitter.com/oauth/access_token") + "&" + Uri.EscapeDataString(sigBaseStringParams); byte[] content = Encoding.UTF8.GetBytes(sigBaseString); HMACSHA1 hmac = new HMACSHA1(Encoding.ASCII.GetBytes("Ly2vdzPf23DfYlFPruxloVT4ix93Y9hmXepngPbQWRUHMPeZZs" + "&")); hmac.ComputeHash(content); string signature = Convert.ToBase64String(hmac.Hash); signature = signature.Replace("-", ""); //string signature = oAuthUtil.GetSignature(sigBaseString, "Ly2vdzPf23DfYlFPruxloVT4ix93Y9hmXepngPbQWRUHMPeZZs"); var responseText = await oAuthUtil.PostData("https://api.twitter.com/oauth/access_token", sigBaseStringParams + "&oauth_signature=" + Uri.EscapeDataString(signature)); if (!string.IsNullOrEmpty(responseText)) { string oauth_token = null; string oauth_token_secret = null; string oauth_authorize_url = null; string oauth_oauth_verifier = null; string user_id = null; string screen_name = null; string[] keyValPairs = responseText.Split('&'); for (int i = 0; i < keyValPairs.Length; i++) { String[] splits = keyValPairs[i].Split('='); switch (splits[0]) { case "oauth_token": oauth_token = splits[1]; break; case "oauth_token_secret": oauth_token_secret = splits[1]; break; case "xoauth_request_auth_url": oauth_authorize_url = splits[1]; break; case "oauth_verifier": oauth_oauth_verifier = splits[1]; break; case "user_id": user_id = splits[1]; break; case "screen_name": screen_name = splits[1]; break; } } //requestToken.Text = oauth_token; //requestTokenSecretKey.Text = oauth_token_secret; //oAuthAuthorizeLink.Content = Uri.UnescapeDataString(_twitterAuthorizeUrl + "?oauth_token=" + oauth_token); var oa = new OAuthResponse(); if (oauth_token != null && oauth_token_secret != null) { //var credentialsText = Verify_Credentials("5R7Y1dJMc26yEdzFEbLWCZWKg", "Ly2vdzPf23DfYlFPruxloVT4ix93Y9hmXepngPbQWRUHMPeZZs", oauth_token, oauth_token_secret); var credentialsText = GetTwitterUser("5R7Y1dJMc26yEdzFEbLWCZWKg", "Ly2vdzPf23DfYlFPruxloVT4ix93Y9hmXepngPbQWRUHMPeZZs", oauth_token, oauth_token_secret); if (credentialsText.IndexOf("Error:") < 0 && !string.IsNullOrEmpty(credentialsText)) { try { twUser = JsonConvert.DeserializeObject <TwitterUserModel>(credentialsText); }catch (Exception ex) { return(null); } } } } return(twUser); }
public async Task <IActionResult> UpdateProfile([FromBody] GXUser u) { var user = await getUser(); var msg = ""; bool hasChanges = false; bool emailChanged = false; if (user.firstName != u.firstName) { user.firstName = u.firstName; hasChanges = true; } if (user.lastName != u.lastName) { user.lastName = u.lastName; hasChanges = true; } if (user.birthDate != u.birthDate) { user.birthDate = u.birthDate; hasChanges = true; } if (user.gender != u.gender) { user.gender = u.gender; hasChanges = true; } if (user.photoUrl != u.photoUrl) { user.photoUrl = u.photoUrl; hasChanges = true; } if (user.Email != u.Email && (string.IsNullOrEmpty(user.googleId) && string.IsNullOrEmpty(user.facebookId) && string.IsNullOrEmpty(user.twitterId))) { user.EmailConfirmed = false; user.Email = u.Email; user.UserName = u.Email; var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); //var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme); var ub = new UriBuilder(url); ub.Path = "confirm-email"; ub.Query = $"userId={user.Id}&code={HttpUtility.UrlEncode(code)}"; var callbackUrl = ub.ToString(); await _emailSender.SendEmailConfirmationAsync(user.Email, callbackUrl); hasChanges = true; emailChanged = true; } if (hasChanges) { _context.Users.Update(user); await _context.SaveChangesAsync(); if (!emailChanged) { msg = "Profile updated!"; } else { msg = "Your email has been updated. Please check your inbox to confirm your new email address."; } } return(Ok(new { user, msg, emailChanged })); }
public async Task <IActionResult> GetTwitterAccess(string accessToken, string authVerifier) { var s = await getAccessToken(accessToken, authVerifier); if (s == null) { return(BadRequest("Twitter login failed")); } var user = await _userManager.FindByEmailAsync(s.email); string password = Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8); if (user == null) { var u = new GXUser() { Email = s.email, UserName = s.email, googleId = "", photoUrl = s.profile_image_url_https, firstName = s.name, lastName = "", gender = "", dateJoined = DateTime.Now }; var result = await _userManager.CreateAsync(u, password); if (!result.Succeeded) { return(new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState))); } user = await _userManager.FindByEmailAsync(s.email); } else { user.twitterId = s.id_str; user.photoUrl = s.profile_image_url_https; _context.Users.Update(user); await _context.SaveChangesAsync(); } var identity = await Task.FromResult(_jwtFactory.GenerateClaimsIdentity(user.UserName, user.Id)); var jwt = await Tokens.GenerateJwt(identity, _jwtFactory, user.UserName, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented }); return(Ok(new { Id = user.Id, userName = user.UserName, firstName = user.firstName, lastName = user.lastName, email = user.Email, facebookId = user.facebookId, photoUrl = !string.IsNullOrEmpty(user.photoUrl) ? user.photoUrl : "/assets/images/profile-pic.png", token = jwt })); }
public async Task <IActionResult> FacebookLogin([FromBody] FacebookViewModel vm) { var appAccessTokenResponse = await Client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id={"189190551632736"}&client_secret={"3441dee2b662651ee71377f1677756e1"}&grant_type=client_credentials"); var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse); // 2. validate the user access token var userAccessTokenValidationResponse = await Client.GetStringAsync($"https://graph.facebook.com/debug_token?input_token={vm.AccessToken}&access_token={appAccessToken.AccessToken}"); var userAccessTokenValidation = JsonConvert.DeserializeObject <FacebookUserAccessTokenValidation>(userAccessTokenValidationResponse); if (!userAccessTokenValidation.Data.IsValid) { return(BadRequest(Errors.AddErrorToModelState("login_failure", "Invalid facebook token.", ModelState))); } // 3. we've got a valid token so we can request user data from fb var userInfoResponse = await Client.GetStringAsync($"https://graph.facebook.com/v2.8/me?fields=id,email,first_name,last_name,name,gender,locale,birthday,picture&access_token={vm.AccessToken}"); var userInfo = JsonConvert.DeserializeObject <FacebookUserData>(userInfoResponse); // 4. ready to create the local user account (if necessary) and jwt var user = await _userManager.FindByEmailAsync(userInfo.Email); if (user == null) { var appUser = new GXUser { firstName = userInfo.FirstName, lastName = userInfo.LastName, facebookId = userInfo.Id.ToString(), Email = userInfo.Email, UserName = userInfo.Email, photoUrl = userInfo.Picture.Data.Url }; var result = await _userManager.CreateAsync(appUser, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8)); if (!result.Succeeded) { return(new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState))); } } else { user.facebookId = userInfo.Id.ToString(); user.photoUrl = userInfo.Picture.Data.Url; _context.Users.Update(user); await _context.SaveChangesAsync(); } // generate the jwt for the local user... var localUser = await _userManager.FindByNameAsync(userInfo.Email); if (localUser == null) { return(BadRequest(Errors.AddErrorToModelState("login_failure", "Failed to create local user account.", ModelState))); } var identity = await Task.FromResult(_jwtFactory.GenerateClaimsIdentity(user.UserName, user.Id)); var jwt = await Tokens.GenerateJwt(identity, _jwtFactory, user.UserName, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented }); return(Ok(new { Id = user.Id, userName = user.UserName, firstName = user.firstName, lastName = user.lastName, email = user.Email, facebookId = user.facebookId, gender = user.gender, twitterId = user.twitterId, googleId = user.googleId, birthDate = user.birthDate, photoUrl = !string.IsNullOrEmpty(user.photoUrl) ? user.photoUrl : "/assets/images/profile-pic.png", token = jwt })); }
public IEnumerable <Group> getGroupsByOwner(GXUser user) { return(_db.Groups.OrderBy(x => x.owner == user)); }
public static string buildGroupInviteMessage(Group group, GroupInvite invite, GXUser user, string url) { if (group == null) { return(""); } if (invite == null) { return(""); } if (user == null) { return(""); } var sb = new StringBuilder(); sb.AppendFormat("<p>{0}</p>", buildGroupInviteSubject(group, invite, user)); sb.Append("<hr />"); sb.AppendFormat("<div>{0}</div>", invite.message); var acceptUrl = url + "/acceptinvite/" + invite.guid.ToString(); sb.AppendFormat("<p><a href=\"{0}\">{1}</a></p>", acceptUrl, "Click here to join this group"); return(sb.ToString()); }