/
pavellord
/
flutterStepik
Обзор
Документация
Войти
/
pavellord
/
flutterStepik
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
auth/lib/controllers/app_user_controller.dart
81 строка
3 KB
pavellord
updatePassword
19 апр 2024, 20:56
19 апр 2024, 20:56
75647ef
Код
Авторство
О чём код?
import 'dart:io'; import 'package:auth/models/user.dart'; import 'package:auth/utils/app_const.dart'; import 'package:auth/utils/app_response.dart'; import 'package:auth/utils/app_utils.dart'; import 'package:conduit_core/conduit_core.dart'; class AppUserController extends ResourceController { final ManagedContext managedContext; AppUserController({required this.managedContext}); @Operation.get() Future<Response> getProfile( @Bind.header(HttpHeaders.authorizationHeader) String header) async { try { final id = AppUtils.getIdFromHeader(header); final user = await managedContext.fetchObjectWithID<User>(id); user?.removePropertiesFromBackingMap( [AppConst.accessToken, AppConst.refreshToken]); return AppResponse.ok( message: "Успешное получение профиля", body: user?.backing.contents); } catch (error) { return AppResponse.serverError(error, message: "Ошибка получения профиля"); } } @Operation.post() Future<Response> updateProfile( @Bind.header(HttpHeaders.authorizationHeader) String header, @Bind.body() User user) async { try { final id = AppUtils.getIdFromHeader(header); final fUser = await managedContext.fetchObjectWithID<User>(id); final qUpdateUser = Query<User>(managedContext) ..where((x) => x.id).equalTo(id) ..values.username = user.username ?? fUser?.username ..values.email = user.email ?? fUser?.email; await qUpdateUser.updateOne(); final uUser = await managedContext.fetchObjectWithID<User>(id); uUser?.removePropertiesFromBackingMap( [AppConst.accessToken, AppConst.refreshToken]); return AppResponse.ok( message: "Успешное обновление профиля", body: uUser?.backing.contents); } catch (error) { return AppResponse.serverError(error, message: "Ошибка обновления профиля"); } } @Operation.put() Future<Response> updatePassword( @Bind.header(HttpHeaders.authorizationHeader) String header, @Bind.query("oldPassword") String oldPassword, @Bind.query("newPassword") String newPassword) async { try { final id = AppUtils.getIdFromHeader(header); final qFindUser = Query<User>(managedContext) ..where((table) => table.id).equalTo(id) ..returningProperties((table) => [table.salt, table.hashPassword]); final findUser = await qFindUser.fetchOne(); final salt = findUser?.salt ?? ""; final oldPasswordHash = generatePasswordHash(oldPassword, salt); if (oldPasswordHash != findUser?.hashPassword) { return AppResponse.badRequest(message: "Пароль неверынй"); } final newPasswordHash = generatePasswordHash(newPassword, salt); final qUpdateUser = Query<User>(managedContext) ..where((x) => x.id).equalTo(id) ..values.hashPassword = newPasswordHash; await qUpdateUser.updateOne(); return AppResponse.ok(message: "Успешное обновление пароля"); } catch (error) { return AppResponse.serverError(error, message: "Ошибка обновления пароля"); } } }