using System; using System.Collections.Generic; using System.IO; using Newtonsoft.Json; namespace UserPermissionTest_CS_WinForms { public class JsonUserRepository : IUserRepository { private const string UsersFile = "users.json"; private const string PermissionsFile = "permissions.json"; public List LoadUsers() { if (!File.Exists(UsersFile)) { var defaults = GetDefaultUsers(); SaveUsers(defaults); return defaults; } try { string json = File.ReadAllText(UsersFile); var users = JsonConvert.DeserializeObject>(json); if (users == null) return GetDefaultUsers(); // Dynamic Migration: If any loaded user has a plain text password, hash it and re-save bool modified = false; foreach (var user in users) { if (user.Password.Length != 64 || !IsHexString(user.Password)) { user.Password = PasswordHasher.HashPassword(user.Password); modified = true; } } if (modified) { SaveUsers(users); } return users; } catch (Exception ex) { Console.WriteLine("Error reading users JSON, falling back to defaults: " + ex.Message); return GetDefaultUsers(); } } private bool IsHexString(string str) { if (string.IsNullOrEmpty(str)) return false; foreach (char c in str) { if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) return false; } return true; } public void SaveUsers(List users) { try { string json = JsonConvert.SerializeObject(users, Formatting.Indented); File.WriteAllText(UsersFile, json); } catch (Exception ex) { Console.WriteLine("Error writing users JSON: " + ex.Message); } } public List LoadPermissions() { if (!File.Exists(PermissionsFile)) { var defaults = GetDefaultPermissions(); SavePermissions(defaults); return defaults; } try { string json = File.ReadAllText(PermissionsFile); var permissions = JsonConvert.DeserializeObject>(json); return permissions ?? GetDefaultPermissions(); } catch (Exception ex) { Console.WriteLine("Error reading permissions JSON, falling back to defaults: " + ex.Message); return GetDefaultPermissions(); } } public void SavePermissions(List permissions) { try { string json = JsonConvert.SerializeObject(permissions, Formatting.Indented); File.WriteAllText(PermissionsFile, json); } catch (Exception ex) { Console.WriteLine("Error writing permissions JSON: " + ex.Message); } } private List GetDefaultUsers() { return new List { new User { Username = "admin", FullName = "System Administrator", Password = PasswordHasher.HashPassword("admin"), Permissions = GetDefaultPermissions() }, new User { Username = "user", FullName = "Standard User", Password = PasswordHasher.HashPassword("user"), Permissions = new List { "View Dashboard" } } }; } private List GetDefaultPermissions() { return new List { "View Dashboard", "Edit Settings", "Manage Users", "Full Control", "Delete Transactions" }; } } }