модуль пользователи импорт "стд::вывод" импорт "исх/строка" импорт "исх/спринтф" импорт "исх/массивы" импорт "исх/сеть/хттп" импорт "исх/форматы/джесон" импорт "исх/сеть/хттп/маршрутизатор" импорт "исх/картотека" импорт "исх/картотека/репозитории" импорт "исх/бюрократия" фн войти*(путь: Строка, параметры: массивы.Строки, обращение: маршрутизатор.Обращение): хттп.ХттпОтвет { пусть картотека = картотека.зайти() пусть оплошность := "" пусть данные = джесон.парсить(обращение.туловище, оплошность) если оплошность # "" { вернуть хттп.ответ_500() } пусть имя пользователя := данные.получить("имя пользователя").строка() пусть пароль := данные.получить("пароль").строка() пусть пользователь = репозитории.авторизовать пользователя(имя пользователя^, пароль^, оплошность) если оплошность # "" { вывод.ф("$стр\n", оплошность) вернуть хттп.ответ_500() } если пользователь = пусто { вернуть хттп.ответ_401() } вернуть хттп.ХттпОтвет{ туловище: "Рады видеть вас снова :3" } } фн сменить пароль*(путь: Строка, параметры: массивы.Строки, обращение: маршрутизатор.Обращение): хттп.ХттпОтвет { пусть оплошность := "" пусть картотека = картотека.зайти() пусть пользователь = репозитории.авторизовать по паспорту(бюрократия.получить данные паспорта(обращение), оплошность) если оплошность # "" { вернуть хттп.ответ_500() } если пользователь = пусто { вернуть хттп.ответ_401() } пусть данные = джесон.парсить(обращение.туловище, оплошность) если оплошность # "" { вернуть хттп.ответ_400() } пусть новый пароль := данные.получить("новый пароль").строка() если новый пароль = пусто | новый пароль^ = "" { вернуть хттп.ответ_422() } картотека.запросить безопасно(` UPDATE users SET password = ? WHERE id = ? `, оплошность, новый пароль^, пользователь^.идентификатор ) если оплошность # "" { вернуть хттп.ответ_500() } вернуть хттп.ответ_204() } фн добавить маршруты*(маршрутизатор: маршрутизатор.Маршрутизатор): маршрутизатор.Маршрутизатор { маршрутизатор.добавить маршрут("/api/users/login", массивы.Строки["POST"], войти) маршрутизатор.добавить маршрут("/api/users/password", массивы.Строки["PUT"], сменить пароль) вернуть маршрутизатор }