mobilka_authorize/src/main/kotlin/main.kt
2025-01-14 15:45:14 +03:00

179 lines
5.7 KiB
Kotlin
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
*/