public SimpleMembershipInitializer() { Database.SetInitializer<UsersContext>(null); try { using (var context = new UsersContext()) { if (!context.Database.Exists()) { // Create the SimpleMembership database without Entity Framework migration schema ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); } } WebSecurity.InitializeDatabaseConnection("ProviderDB", "UserProfile", "UserId", "Email", true); } catch (Exception ex) { throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); } }
public void SetUserDirty(string email) { using (UsersContext db = new UsersContext()) { var user = db.UserProfiles.FirstOrDefault(u => u.Email.ToLower() == email.ToLower()); user.IsDirty = true; db.SaveChanges(); } }
/// <summary> /// Creates or or adds a user with an external identityprovider using AuthWebSecurity /// </summary> /// <param name="provider">Name of Identity Provider</param> /// <param name="providerUserId">User Id provided by the Identity Provider</param> /// <param name="email">Username (aka email) of the userIdentity</param> /// <returns>A bool if the update has succeded or not</returns> public bool CreateOrUpdateOAuthAccount(string provider, string providerUserId, string email) { using (UsersContext db = new UsersContext()) { Thinktecture.IdentityServer.Repositories.Sql.UserProfile user = db.UserProfiles.FirstOrDefault(u => u.Email.ToLower() == email.ToLower()); // Check if user already exists if (user == null) { // Insert name into the profile table db.UserProfiles.Add(new Thinktecture.IdentityServer.Repositories.Sql.UserProfile { Email = email, IsDirty = true, IsVerified = true }); } else if (user.OAuthMemberships.Count > 0) { foreach (var OAuthProvider in user.OAuthMemberships) { if (OAuthProvider.Provider == provider) { return false; } } } else { user.IsDirty = true; } db.SaveChanges(); OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, email); return true; } }
public IEnumerable<string> GetUsers(string filter) { using (var userContext = new UsersContext()) { if (string.IsNullOrEmpty(filter)) { var items = userContext.UserProfiles.Select(user => user.Email).ToList(); return items; } else { var items = userContext.UserProfiles.Where(e => e.Email.ToLower().Contains(filter.ToLower())).Select(e => e.Email).ToList(); return items; } } }
/// <summary> /// Updates the user profile /// </summary> /// <param name="model">user profile model</param> public void Update(Thinktecture.IdentityServer.Models.UserProfile model) { if (model == null) throw new ArgumentException("model"); using (var entities = new UsersContext()) { var item = entities.UserProfiles.Where(u => u.UserId == model.UserId).Single(); model.UpdateEntity(item); entities.SaveChanges(); } }
/// <summary> /// Gets a user by the Unique Id from an external system. /// !Important Used only if you have your user Syncronized with an external system. /// </summary> /// <param name="externalKey">Unique external user Id</param> /// <returns>User Profile</returns> public Thinktecture.IdentityServer.Models.UserProfile GetByExternalKey(string externalKey) { using (var userContext = new UsersContext()) { return userContext.UserProfiles.Where(u => u.ExternalUniqueKey.Equals(externalKey)) .ToList() .Select(x => x.ToDomainModel()) .FirstOrDefault(); } }
/// <summary> /// Gets a user based on their Unique Membership ID /// </summary> /// <param name="id">MemberShip Id</param> /// <returns>User Profile</returns> public Thinktecture.IdentityServer.Models.UserProfile GetByUserId(int id) //JWIJDE20130201, based on Thinktecture implementation.. { using (var userContext = new UsersContext()) { return userContext.UserProfiles.Where(u => u.UserId.Equals(id)) .ToList() .Select(x => x.ToDomainModel()) .FirstOrDefault(); } }
/// <summary> /// Generates a temporaryValid token using a username and datetime from now. /// this token can be used as a variable in urls to identify valid users. /// Make sure to Remove the token after it has been used or when they are no longer valid /// </summary> /// <param name="userName">username</param> /// <param name="tokenExperationInMinutesFromNow">The ammount of minutes the token should be valid</param> /// <returns></returns> private string GenerateTemporaryValidToken(string userName, int tokenExperationInMinutesFromNow, EmailFunctionType type) { var token = string.Format("{0};{1};{2}", userName, DateTime.Now.AddMinutes(tokenExperationInMinutesFromNow), type.ToString()).Encrypt(); using (var userContext = new UsersContext()) { var userProfile = userContext.UserProfiles.Where(u => u.Email.Equals(userName)).FirstOrDefault(); //If the token conaints a splitter it already has a set token, so just remove them and set it again if (!string.IsNullOrEmpty(userProfile.TemporarilyValidGeneratedToken)) { if (userProfile.TemporarilyValidGeneratedToken.Contains(';')) { userProfile.TemporarilyValidGeneratedToken = ""; userProfile.TemporarilyValidGeneratedToken = token; } else { userProfile.TemporarilyValidGeneratedToken += ";" + token; } } else { userProfile.TemporarilyValidGeneratedToken = token; } userContext.SaveChanges(); } return token; }
public IEnumerable<string> GetUsers(string filter, int start, int count, out int totalCount) { using (var userContext = new UsersContext()) { var query = from user in userContext.UserProfiles where user.Email.Contains(filter) || (user.Email != null && user.Email.Contains(filter)) select user.Email; totalCount = query.Count(); return query.OrderBy(e => e).Skip(start).Take(count).ToList(); } }
public IEnumerable<string> GetUsers(int start, int count, out int totalCount) { using (var userContext = new UsersContext()) { var items = userContext.UserProfiles.Select(user => user.Email).ToList(); totalCount = items.Count(); return items; } }
public string GetNewEmailFromUser(string email) { using (var userContext = new UsersContext()) { return userContext.UserProfiles.Where(u => u.Email.Equals(email)).Select(u => u.NewEmail).FirstOrDefault(); } }
public bool CheckUserForValidatedTokenOrValidateToken(string email, string token, EmailFunctionType type) { using (var userContext = new UsersContext()) { var userProfile = userContext.UserProfiles.Where(u => u.Email.Equals(email)).FirstOrDefault(); var tokens = userProfile.TemporarilyValidGeneratedToken.Split(';'); //We must make sure we can only have 1 validated token here var validToken = tokens.Where(t => t.EndsWith("Validated")).FirstOrDefault(); var dycriptedvalidToken = string.IsNullOrEmpty(validToken) ? "" : validToken.Replace("Validated", "").Decrypt(); if (string.IsNullOrEmpty(validToken)) { userProfile.TemporarilyValidGeneratedToken = userProfile.TemporarilyValidGeneratedToken.Replace(token, token + "Validated"); userContext.SaveChanges(); return false; } else { if (dycriptedvalidToken.Split(';')[2].Equals(type.ToString())) { return false; } else { //Remove the tokens and return true //if we want to use these tokens for more then just email change we must only remove the 2 email change tokens. userProfile.TemporarilyValidGeneratedToken = ""; userContext.SaveChanges(); return true; } } } }
/// <summary> /// Validates the temporarily generated token. /// User must be logged In to validate this token. /// </summary> /// <param name="userName">logged in userName</param> /// <param name="Token">temporarily generated token</param> /// <returns></returns> public bool ValidateTemporarilyValidGeneratedToken(string userName, string Token, EmailFunctionType type) { var decryptedToken = Token.Decrypt(); DateTime dycriptedDate; if (decryptedToken.Split(';')[2].Equals(type.ToString())) { if (DateTime.TryParse(decryptedToken.Split(';')[1], out dycriptedDate)) { if (dycriptedDate > DateTime.Now) { using (var userContext = new UsersContext()) { var userProfile = userContext.UserProfiles.Where(u => u.Email.Equals(userName)).FirstOrDefault(); var tokens = userProfile.TemporarilyValidGeneratedToken.Split(';'); foreach (var newToken in tokens) { if (newToken.Replace("Validated", "").Equals(Token)) { var dycripteduserName = decryptedToken.Split(';')[0]; if (dycripteduserName == userName) { return true; } } } } } } } return false; }
public void RemoveTemporaryValidToken(string userName, string token) { using (var userContext = new UsersContext()) { var userProfile = userContext.UserProfiles.Where(u => u.Email.Equals(userName)).FirstOrDefault(); if (!string.IsNullOrEmpty(userProfile.TemporarilyValidGeneratedToken)) { var tokens = userProfile.TemporarilyValidGeneratedToken.Split(';'); string validTokens = ""; foreach (var newtoken in tokens) { if (newtoken != token) { validTokens += newtoken + ";"; } } userProfile.TemporarilyValidGeneratedToken = validTokens.TrimEnd(';'); } userContext.SaveChanges(); } }
public string GetPasswordSalt(int userid) { using (UsersContext db = new UsersContext()) { return db.Database.SqlQuery<string>("select passwordsalt from webpages_membership where userId = {0}", userid) .FirstOrDefault(); } }
public IEnumerable<Models.UserProfile> VerifiedDirtyProfiles() { using (var userContext = new UsersContext()) { return userContext.UserProfiles .Where(u => u.IsVerified && u.IsDirty) .ToList() .Select(x => x.ToDomainModel()).ToList(); } }
public void SendEmailChangeConfirmationMail(string newEmail, string oldEmail) { //Using the password reset token we can generate a temporary unique url where we can change the password string token = GenerateTemporaryValidToken(oldEmail, 30, EmailFunctionType.EmailAdressChangeConfirm); //Updating the new email in the database, we will set this email as username/main email when the validation link has been clicked try { using (var userContext = new UsersContext()) { var userProfile = userContext.UserProfiles.Where(u => u.Email.Equals(oldEmail)).FirstOrDefault(); userProfile.NewEmail = newEmail; userContext.SaveChanges(); } } catch (Exception e) { logger.LogException(LogLevel.Error, "An error occured while trying to add a NewEmail to a userprofile", e); } try { var subject = "Identity Provider Confirm Email Change"; var url = GenerateConfirmNewEmailurl(token); var body = string.Format("To confirm your email change click this link: {0}", url); SendEmail(body, subject, newEmail); } catch (FormatException ex) { logger.LogException(LogLevel.Error, "EmailAdress Format incorrect Can't send confirm change emailadress, email", ex); throw new MembershipCreateUserException(MembershipCreateStatus.InvalidEmail); } catch (Exception ex) { logger.LogException(LogLevel.Error, "An Error occured while trying to send a confirm change emailadress, email", ex); } }