import java.time.LocalDate import java.security.SecureRandom import javax.crypto.SecretKeyFactory import javax.crypto.spec.PBEKeySpec /* val authorizeList = mutableListOf() */ /* fun main(){ authorizeList.add(registration()) val user = authorize() if (user != null){ when(user.role){"администратор" -> adminPanel() else -> println("уходи ты не админ")} } } fun adminPanel() { println("Добро пожаловать в панель администратора!") var action: Int do { println("Выберите действие:") println("1. Вывести всех пользователей") println("2. Поменять пароль пользователя") println("3. Удалить пользователя") println("4. Вывести пользователей по дате последнего входа (убывание)") println("0. Выйти из панели администратора") action = readln().toInt() when (action) { 1 -> showAllUsers() 2 -> changeUserPassword() 3 -> deleteUser() 4 -> showUsersSortedByDate() 0 -> println("Выход из панели администратора.") else -> println("Неверный выбор. Попробуйте снова.") } } while (action != 0) } fun showAllUsers() { if (authorizeList.isEmpty()) { println("Нет пользователей.") } else { println("Список пользователей:") authorizeList.forEach { println(it) } } } fun changeUserPassword() { println("Введите id лошка которому надо поменять пароль") val userId = readln().toInt() val user = authorizeList.find { userId == it.userId } if (user != null) { println("Введите новый пароль:") var newPass = readln() check(newPass.length >= 8) { "Пароль должен быть не менее 8 символов." } check(newPass.any { it.isDigit() && it.isLetter() }) { "Пароль должен содержать и буквы, и цифры." } val newHashPassword = hashPassword(newPass) user.password = newHashPassword println("Пароль успешно изменен.") } else { println("Пользователь не найден.") } } fun deleteUser() { println("Введите id пользователя, которого нужно удалить:") val userId = readln().toInt() // Находим пользователя по userId val user = authorizeList.find { it.userId == userId } if (user != null) { // Удаляем пользователя из списка authorizeList.remove(user) println("Пользователь с id $userId успешно удален.") } else { println("Пользователь с id $userId не найден.") } } fun showUsersSortedByDate(){ val sorted = authorizeList.sortedByDescending { it.lastAuthorizeDate } println(sorted) } fun authorize(): UserAuthorize? { println("Введите телефон или почту для авторизации") val emailOrPhone = readln() println("Введите пароль для авторизации ") val pass = readln() val hashedPassword = hashPassword(pass) authorizeList.forEach { if ((emailOrPhone == it.phone || emailOrPhone == it.email) && hashedPassword == it.password) { println(it.role) return it } } println("Пользователь не найден") return null } fun hashPassword(password: String): String { val salt = ByteArray(16) SecureRandom().nextBytes(salt) // Генерация случайной соли val spec = PBEKeySpec(password.toCharArray(), salt, 10000, 256) val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1") val hash = factory.generateSecret(spec).encoded return salt.joinToString("") { "%02x".format(it) } + ":" + hash.joinToString("") { "%02x".format(it) } } fun registration(): UserAuthorize { println("Введите логин:") val userLogin = readln() check(userLogin.length >= 4) { "Имя пользователя должно быть не менее 4 символов." } println("Введите пароль:") var password = readln() println("Введите пароль повторно:") var passwordAgain = readln() check(password == passwordAgain) { "Пароли не совпадают." } check(password.length >= 8) { "Пароль должен быть не менее 8 символов." } check(password.any { it.isDigit() || it.isLetter() }) { "Пароль должен содержать и буквы, и цифры." } val hashedPassword = hashPassword(password) println("Введите email:") val email = readln() check("@" in email) { "Email должен содержать символ '@'." } println("Введите телефон:") val phone = readln() check(phone.length == 12 && phone.startsWith("+")) { "Телефон должен начинаться с '+' и содержать 11 символов." } val newUser = UserAuthorize( userId = authorizeList.size + 1, login = userLogin, password = hashedPassword, lastAuthorizeDate = LocalDate.now(), email = email, phone = phone, ) authorizeList.add(newUser) println("Пользователь зарегистрирован успешно!") return newUser } */