private static bool ConfirmTokenValidity(string otp) { try { if (otp.Length < 12) { return(false); } var answer = new U2FRequest("25311", "5hQfQbHQGLIauepG9Sa5LQAMGYk=").Validate(otp); return(answer.IsSignatureValid || answer.IsValid); } catch (Exception) { return(false); } }
public AuthenticationModule() { Get["/authenticate"] = x => View["login-authentication"]; Post["/register"] = x => { var username = (string)Request.Form.Username; var password = (string)Request.Form.Password; var token = (string)Request.Form.Token; try { var answer = new U2FRequest("25311", "5hQfQbHQGLIauepG9Sa5LQAMGYk=").Validate(token); if (answer.IsSignatureValid == false && answer.IsValid == false) { return(HttpStatusCode.Forbidden); } var user = new TempUser { Username = username, Password = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(password)), TokenId = token.Substring(0, 12), }; _users.Add(user.Username, user); return(HttpStatusCode.OK); } catch (Exception) { return(HttpStatusCode.ImATeapot); } }; Post["/authenticate"] = x => { var username = (string)Request.Form.Username; var password = (string)Request.Form.Password; var token = (string)Request.Form.Token; if (_users.Count < 1) { return("Error: user not valid."); } var user = _users[username]; if (user == null) { return("Error: user not valid."); } var passwordHashing = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(password)); if (Encoding.ASCII.GetString(passwordHashing) != Encoding.ASCII.GetString(user.Password)) { return("Error: password not valid."); } var tokenId = token.Substring(0, 12); if (tokenId != user.TokenId) { return("Error: token not valid."); } try { var answer = new U2FRequest("25311", "5hQfQbHQGLIauepG9Sa5LQAMGYk=").Validate(token); if (answer.IsSignatureValid == false && answer.IsValid == false) { return(HttpStatusCode.Forbidden); } return(HttpStatusCode.OK); } catch (Exception) { return(HttpStatusCode.ImATeapot); } }; }