public ActionResult Session_Register() { if (!AspDashboard.Classes.Util.Config.Get().GetBool("registration_enabled", false)) return Session_Ajax_Resp(false, "Registration is disabled at the moment!" + Environment.NewLine + "If you think this is a error please contact one of the Administrators!"); // REQUIRED: rUser, rPass, rEmail, rName Login log = new Login(); string name_Username = "******", name_Password = "******", name_Email = "rEmail", name_Name = "rName"; //return Session_Login_Ret(true, "Hello World!"); if (Request.HttpMethod == "POST") { bool userValid = false, passValid = false, emailValid = false, rnamValid = false, userRegisted = false, everythingValid = false; string user = "", name = "", pass = "", email = ""; // TODO: REMOVE THIS WHEN NOT TESTING // IT WILL EXPOSE USER PASSWORDS INTO THE LOG FILE! string logStr = string.Join(", ", Request.Form .AllKeys .Select(key => key + ": " + Request.Form[key]) .ToArray()); Log("Session_Register", logStr); /* Check if the user or pass exists and is not null */ { if(Request.Form.HasKeys()) { // Check if the values are not null by default // NOTE: THIS STOPS ANY EXCEPTIONS AT THE ISNULLORWHITESPACE STAGE userValid = (Request.Form[name_Username] != null); passValid = (Request.Form[name_Password] != null); emailValid = (Request.Form[name_Email] != null); rnamValid = (Request.Form[name_Name] != null); Log("Session_Register", $"Validation (#0): userValid={userValid}, passValid={passValid}, emailValid={emailValid}, rnamValid={rnamValid}."); // Check if the values exist user = userValid ? Request.Form[name_Username] : ""; pass = passValid ? Request.Form[name_Password] : ""; email = emailValid ? Request.Form[name_Email] : ""; name = rnamValid ? Request.Form[name_Name] : ""; Log("Session_Register", $"Validation (#1): userValid={userValid}, passValid={passValid}, emailValid={emailValid}, rnamValid={rnamValid}."); // Check if the values are not null/whitespaced userValid = userValid ? !string.IsNullOrWhiteSpace(user) : false; passValid = passValid ? !string.IsNullOrWhiteSpace(pass) : false; rnamValid = rnamValid ? !string.IsNullOrWhiteSpace(name) : false; emailValid = emailValid ? !string.IsNullOrWhiteSpace(email) : false; emailValid = emailValid ? Regex.IsMatch(email, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\." + @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:" + @"[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase) : false; Log("Session_Register", $"Validation (#2): userValid={userValid}, passValid={passValid}, emailValid={emailValid}, rnamValid={rnamValid}."); // Check if the values are at the required lengths userValid = userValid ? user.Length >= 5 : false; userValid = userValid ? user.Length <= 80 : false; passValid = passValid ? pass.Length >= 5 : false; passValid = passValid ? pass.Length <= 90 : false; rnamValid = rnamValid ? name.Length >= 5 : false; rnamValid = rnamValid ? name.Length <= 250 : false; // Like to see a name that long emailValid = emailValid ? email.Length >= 5 : false; emailValid = emailValid ? email.Length <= 250 : false; Log("Session_Register", $"Validation (#3): userValid={userValid}, passValid={passValid}, emailValid={emailValid}, rnamValid={rnamValid}."); // Check if everything is valid everythingValid = (userValid && passValid && emailValid && rnamValid); } else { Log("Session_Register", "Invalid Request #0"); return Session_Ajax_Resp(false, "Invalid request #0, please check over your values!"); } } /* Attempt to create the user account if everything checks out */ { if(everythingValid) { var ae = new UserEngine(); if(ae.userExists(user)) { Log("Session_Register", $"User already exists: Username={user}"); return Session_Ajax_Resp(false, "User is already registered!"); } Register reg = new Register(); // With a tiny chance of the password // getting generated incorrectly // i just want to make sure it aint // its most likely imposibile but one // cant be to sure. bool valid = false; var spass = ""; while (!valid) { var salt = BCrypt.GenerateSalt(); spass = BCrypt.HashPassword(pass, salt); valid = BCrypt.CheckPassword(pass, spass); } userRegisted = reg.RegisterUser(user, spass, email, name); Log("Session_Register", "Registration Status: " + userRegisted); } else { Log("Session_Register", $"Invalid results: userValid={userValid}, passValid={passValid}, emailValid={emailValid}, rnamValid={rnamValid}."); return Session_Ajax_Resp(false, "Invalid results, The requested values are not valid!"); } } /* Try to login as the user we just created if registered */ { if (userValid && passValid && emailValid && userRegisted) { var lAuth = new Classes.Authentication.Login(); bool loginState = lAuth.isLoginCorrect(user, pass); if(loginState) { lAuth.attemptUserLogin(user, pass); Log("Session_Register", "Successfully registered and logged in " + user); return Session_Ajax_Resp(true, "Successfully registered and logged in!"); } else { Log("Session_Register", $"Incorrect username and password {user}"); return Session_Ajax_Resp(false, "Incorrect username and password"); } } else { Log("Session_Register", $"Invalid username and password combination for {user}"); return Session_Ajax_Resp(false, "Invalid username and password"); } } } else { Log("Session_Register", "Invalid request #1"); return Session_Ajax_Resp(false, "Invalid request #1"); } return Session_Ajax_Resp(false, "Fallback Error!"); }
public ActionResult Session_Login() { Login log = new Login(); string name_Username = "******", name_Password = "******"; //return Session_Login_Ret(true, "Hello World!"); if (Request.HttpMethod == "POST") { bool userValid = false, passValid = false; string user = "", pass = ""; /* Check if the user or pass exists and is not null */ { if(Request.Form.HasKeys()) { userValid = (Request.Form[name_Username] != null); passValid = (Request.Form[name_Password] != null); user = userValid ? Request.Form[name_Username] : ""; pass = passValid ? Request.Form[name_Password] : ""; userValid = userValid ? !string.IsNullOrWhiteSpace(user) : false; passValid = userValid ? !string.IsNullOrWhiteSpace(user) : false; } else { Log("Session_Login", "Invalid Request #0"); return Session_Ajax_Resp(false, "Invalid request #0"); } } /* Check if the user/pass is valid and if so attempt login */ { if (userValid && passValid) { var lAuth = new Classes.Authentication.Login(); bool loginState = lAuth.isLoginCorrect(user, pass); if(loginState) { lAuth.attemptUserLogin(user, pass); Log("Session_Login", "Successfully logged in " + user); return Session_Ajax_Resp(true, "Successfully logged in!"); } else { Log("Session_Login", $"Incorrect username and password for {user}"); return Session_Ajax_Resp(false, "Incorrect username and password"); } } else { Log("Session_Login", $"Invalid username and password combination for {user}"); return Session_Ajax_Resp(false, "Invalid username and password"); } } } else { Log("Session_Login", "Invalid request #1"); return Session_Ajax_Resp(false, "Invalid request #1"); } // No Error Log("Session_Login", "Fallback Request"); return Session_Ajax_Resp(false, "Fallback Error!"); }