using System; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Web; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.RazorPages; using trainav.web.database; namespace trainav.web.Pages { public class LoginModel : PageModel { public void OnPost() { if (!Request.HasFormContentType || string.IsNullOrWhiteSpace(Request.Form["user"]) || string.IsNullOrWhiteSpace(Request.Form["pass"])) return; using var db = new Database.DbConn(); var user = db.Users.FirstOrDefault(p => p.Username == Request.Form["user"].ToString() && p.Password == Request.Form["pass"].ToString().Sha256()); if (user == null) return; var uid = user.UserId; HttpContext.Session.SetString("uid", uid.ToString()); HttpContext.Session.SetString("authorized", "true"); //TODO } } public static class StringExtensions { public static string Sha256(this string rawData) { // Create a SHA256 using var sha256Hash = SHA256.Create(); // ComputeHash - returns byte array var bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData)); // Convert byte array to a string var builder = new StringBuilder(); for (var i = 0; i < bytes.Length; i++) builder.Append(bytes[i].ToString("x2")); return builder.ToString(); } public static string Base64Encode(this string plainText) { var plainTextBytes = Encoding.UTF8.GetBytes(plainText); return Convert.ToBase64String(plainTextBytes); } public static string UrlEncode(this string plainText) => HttpUtility.UrlEncode(plainText); public static string Delimit(this string input, int max) => input.PadRight(max, ' ').Substring(0, max).TrimEnd(); } }