mobilka_authorize/src/main/kotlin/main.kt

179 lines
5.7 KiB
Kotlin
Raw Normal View History

2025-01-13 12:56:42 +00:00
import java.time.LocalDate
2025-01-14 12:45:14 +00:00
import java.security.SecureRandom
import javax.crypto.SecretKeyFactory
import javax.crypto.spec.PBEKeySpec
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
/*
2025-01-13 12:56:42 +00:00
val authorizeList = mutableListOf<UserAuthorize>()
2025-01-14 12:45:14 +00:00
*/
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
/*
2025-01-13 12:56:42 +00:00
fun main(){
authorizeList.add(registration())
2025-01-14 12:45:14 +00:00
val user = authorize()
if (user != null){
when(user.role){"администратор" -> adminPanel()
else -> println("уходи ты не админ")}
}
2025-01-13 12:56:42 +00:00
}
2025-01-14 12:45:14 +00:00
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)
2025-01-13 12:56:42 +00:00
}
2025-01-14 12:45:14 +00:00
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() }) { "Пароль должен содержать и буквы, и цифры." }
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
val newHashPassword = hashPassword(newPass)
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
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 не найден.")
2025-01-13 12:56:42 +00:00
}
2025-01-14 12:45:14 +00:00
}
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
fun showUsersSortedByDate(){
val sorted = authorizeList.sortedByDescending { it.lastAuthorizeDate }
println(sorted)
}
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
fun authorize(): UserAuthorize? {
println("Введите телефон или почту для авторизации")
val emailOrPhone = readln()
println("Введите пароль для авторизации ")
val pass = readln()
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
val hashedPassword = hashPassword(pass)
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
authorizeList.forEach {
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
if ((emailOrPhone == it.phone || emailOrPhone == it.email) && hashedPassword == it.password) {
println(it.role)
return it
}
}
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
println("Пользователь не найден")
return null
}
2025-01-13 12:56:42 +00:00
2025-01-14 12:45:14 +00:00
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,
2025-01-13 12:56:42 +00:00
login = userLogin,
2025-01-14 12:45:14 +00:00
password = hashedPassword,
2025-01-13 12:56:42 +00:00
lastAuthorizeDate = LocalDate.now(),
email = email,
2025-01-14 12:45:14 +00:00
phone = phone,
)
authorizeList.add(newUser)
println("Пользователь зарегистрирован успешно!")
return newUser
}
*/