179 lines
5.7 KiB
Kotlin
179 lines
5.7 KiB
Kotlin
import java.time.LocalDate
|
||
import java.security.SecureRandom
|
||
import javax.crypto.SecretKeyFactory
|
||
import javax.crypto.spec.PBEKeySpec
|
||
|
||
/*
|
||
val authorizeList = mutableListOf<UserAuthorize>()
|
||
*/
|
||
|
||
/*
|
||
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
|
||
}
|
||
*/
|
||
|