/// <summary> /// Decodes a encoded key value pair in base64 and returns it as a /// username and password. /// Sample hash: "dXNlcm5hbWU6cGFzcw==" /// Decodaed: "username:pass" /// The key will be "username" /// The value will be "pass" /// </summary> /// <param name="hash">A base 64 hash</param> /// <returns>Key value pair the key is the user, the value is the pass</returns> public static KeyValuePair<string, string> DecodeHash(string hash) { InventoryDatabaseEntities db = new InventoryDatabaseEntities(); byte[] data = Convert.FromBase64String(hash); string decoded = Encoding.UTF8.GetString(data); string[] userPass = decoded.Split(':'); return new KeyValuePair<string, string>(userPass[0], userPass[1]); }
/// <summary> /// Checks with the backend to ensure that the user exists. /// </summary> /// <param name="login">Key value pair, the key is the username, the value is the password</param> /// <returns>True or false based on if auth was a success</returns> public static bool Authenticate(KeyValuePair<string, string> login) { InventoryDatabaseEntities db = new InventoryDatabaseEntities(); string username = login.Key; string pass = login.Value; Models.User user = db.Users.Where(u => u.userName == username).First(); if (Auth.verifyPassword(pass, user.password)) { return true; } return false; }
/// <summary> /// Authenticate via a token. /// </summary> /// <param name="token">The token to authenticate.</param> /// <returns>authentication status success/failure</returns> public static bool Authenticate(string token) { InventoryDatabaseEntities db = new InventoryDatabaseEntities(); byte[] data = Convert.FromBase64String(token); string decoded = Encoding.UTF8.GetString(data); string[] userPass = decoded.Split(':'); string username = userPass[0]; Models.User user = db.Users.Where(u => u.userName == username).First(); Debug.WriteLine(username + " : " + userPass[1]); if (user.authDate.HasValue && (DateTime.Now - user.authDate.Value).TotalMinutes < 30) { if (userPass[1] == user.authToken) { user.authDate = DateTime.Now; db.SaveChanges(); return true; } } return false; }
public static string generateToken(string username) { InventoryDatabaseEntities db = new InventoryDatabaseEntities(); Models.User user = db.Users.Where(u => u.userName == username).First(); string token = Convert.ToBase64String(Guid.NewGuid().ToByteArray()); user.authToken = token; user.authDate = DateTime.Now; db.SaveChanges(); return token; }