/// <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 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> /// 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; }