diff --git a/src/main/kotlin/main.kt b/src/main/kotlin/main.kt index e68a831..d667c16 100644 --- a/src/main/kotlin/main.kt +++ b/src/main/kotlin/main.kt @@ -1,73 +1,178 @@ -import model.UserAuthorize -import model.Roles import java.time.LocalDate -import java.util.zip.Checksum +import java.security.SecureRandom +import javax.crypto.SecretKeyFactory +import javax.crypto.spec.PBEKeySpec +/* val authorizeList = mutableListOf() +*/ +/* fun main(){ authorizeList.add(registration()) - authorizeList.forEach{ println(it)} + val user = authorize() + if (user != null){ + when(user.role){"администратор" -> adminPanel() + else -> println("уходи ты не админ")} + } } -fun authorize():UserAuthorize{ - println("Введите почту или телефон") - val phone = readlnOrNull() - val email = readlnOrNull() - val checkPhoneEmail = readlnOrNull() - checkNotNull(email) - checkNotNull(phone) - checkNotNull(checkPhoneEmail) - require(checkPhoneEmail == phone || checkPhoneEmail == email) - require("@" in email) - require("+" in phone && phone.length == 11) +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 registration():UserAuthorize{ - println("Введите логин") - val userLogin = readlnOrNull() - checkNotNull(userLogin) - require(userLogin.length >= 4) +fun showAllUsers() { + if (authorizeList.isEmpty()) { + println("Нет пользователей.") + } else { + println("Список пользователей:") + authorizeList.forEach { println(it) } + } +} - println("Введите пароль") - val password = readlnOrNull() - checkNotNull(password) - require(password.length>=8) - println("Введите пароль повторно") - val passwordAgain = password - require(password.length>=8 && password == passwordAgain) - password.forEach { it.isLetterOrDigit() } +fun changeUserPassword() { + println("Введите id лошка которому надо поменять пароль") + val userId = readln().toInt() - while (passwordAgain != password){ - println("Введите пароль повторно") - val passwordAgain = password - require(password.length>=8 && password == passwordAgain) - password.forEach { it.isLetterOrDigit() } + 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("Введите email") - val email = readlnOrNull() - checkNotNull(email) - require("@" in email) - - println("Введите телефон") - val phone = readlnOrNull() - checkNotNull(phone) - require("+" in phone && phone.length == 11) + 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 символов." } - - return UserAuthorize(authorizeList.size +1, - password = password, + val newUser = UserAuthorize( + userId = authorizeList.size + 1, login = userLogin, + password = hashedPassword, lastAuthorizeDate = LocalDate.now(), email = email, - phone = phone) -} \ No newline at end of file + phone = phone, + + ) + + + authorizeList.add(newUser) + + println("Пользователь зарегистрирован успешно!") + + return newUser +} +*/ + diff --git a/src/main/kotlin/model/Roles.kt b/src/main/kotlin/model/Roles.kt deleted file mode 100644 index e1ac730..0000000 --- a/src/main/kotlin/model/Roles.kt +++ /dev/null @@ -1,6 +0,0 @@ -package model - - data class Roles ( - val roleId: Int, - val roleName: String -) \ No newline at end of file diff --git a/src/main/kotlin/model/UserAuthorize.kt b/src/main/kotlin/model/UserAuthorize.kt deleted file mode 100644 index a5eeb3a..0000000 --- a/src/main/kotlin/model/UserAuthorize.kt +++ /dev/null @@ -1,14 +0,0 @@ -package model - - -import java.time.LocalDate - -data class UserAuthorize( - val userId: Int, - val login: String, - var password: String, - var lastAuthorizeDate: LocalDate, - var email: String, - var phone:String - -)