init commit

This commit is contained in:
Anastasia 2025-01-14 15:45:14 +03:00
parent 36c83618ee
commit 6a920f8507
3 changed files with 153 additions and 68 deletions

View File

@ -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<UserAuthorize>()
*/
/*
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 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 = readlnOrNull()
checkNotNull(userLogin)
require(userLogin.length >= 4)
println("Введите логин:")
val userLogin = readln()
check(userLogin.length >= 4) { "Имя пользователя должно быть не менее 4 символов." }
println("Введите пароль")
val password = readlnOrNull()
checkNotNull(password)
require(password.length>=8)
println("Введите пароль повторно")
val passwordAgain = password
require(password.length>=8 && password == passwordAgain)
password.forEach { it.isLetterOrDigit() }
println("Введите пароль:")
var password = readln()
println("Введите пароль повторно:")
var passwordAgain = readln()
check(password == passwordAgain) { "Пароли не совпадают." }
while (passwordAgain != password){
check(password.length >= 8) { "Пароль должен быть не менее 8 символов." }
check(password.any { it.isDigit() || it.isLetter() }) { "Пароль должен содержать и буквы, и цифры." }
println("Введите пароль повторно")
val passwordAgain = password
require(password.length>=8 && password == passwordAgain)
password.forEach { it.isLetterOrDigit() }
val hashedPassword = hashPassword(password)
}
println("Введите email:")
val email = readln()
check("@" in email) { "Email должен содержать символ '@'." }
println("Введите email")
val email = readlnOrNull()
checkNotNull(email)
require("@" in email)
println("Введите телефон")
val phone = readlnOrNull()
checkNotNull(phone)
require("+" in phone && phone.length == 11)
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)
phone = phone,
)
authorizeList.add(newUser)
println("Пользователь зарегистрирован успешно!")
return newUser
}
*/

View File

@ -1,6 +0,0 @@
package model
data class Roles (
val roleId: Int,
val roleName: String
)

View File

@ -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
)