From f0100ba084eb5c14697c2613fec345fb0176d85f Mon Sep 17 00:00:00 2001 From: vigdorov Date: Sat, 8 Aug 2020 23:01:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=88=D0=B8=D0=BB=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20admin.?= =?UTF-8?q?=20=D0=95=D0=B3=D0=BE=20=D0=BD=D0=B5=D0=BB=D1=8C=D0=B7=D1=8F=20?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D1=82=D1=8C,=20=D0=BE=D1=82?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C.=20=D0=9F=D0=B5=D1=80=D0=B5=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=B6=D0=B4=D0=BE=D0=BC=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.ts | 28 +++++++++++++++++++++++++++- src/users/users.service.ts | 11 +++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index b3d01dd..dc4098b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,33 @@ import {NestFactory} from '@nestjs/core'; import {AppModule} from './app.module'; import {SwaggerModule, DocumentBuilder} from '@nestjs/swagger'; -import {USERS_CONTROLLER, AUTH_CONTROLLER} from './consts'; +import {USERS_CONTROLLER, AUTH_CONTROLLER, MONGO_URL, DB_NAME} from './consts'; +import * as mongoose from 'mongoose'; +import * as bcrypt from 'bcrypt'; + +const initAdmin = async () => { + mongoose.connect(`${MONGO_URL}/${DB_NAME}`, {useNewUrlParser: true}); + const schema = new mongoose.Schema({ + login: String, + avatar: String, + password: String, + is_admin: Boolean, + }); + + const Model = mongoose.model('users', schema); + await Model.deleteOne({login: 'admin'}); + const salt = await bcrypt.genSalt(10); + const password = await bcrypt.hash('Monawko900', salt); + const admin = new Model({ + login: 'admin', + avatar: 'https://s.starladder.com/uploads/team_logo/4/3/5/e/meta_tag_7e51261a8844f9636aec079a0cab756f.png', + password, + is_admin: true, + }); + admin.save(); +}; +initAdmin(); + async function bootstrap() { const app = await NestFactory.create(AppModule); diff --git a/src/users/users.service.ts b/src/users/users.service.ts index d2697e0..609c80f 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -96,6 +96,10 @@ export class UserService { } async update(user: UpdateUserRequest): Promise { + if (user.login === 'admin') { + throw new BadRequestException('Запрещено менять пользователя admin'); + } + const searchUser = await this.userModel().findOne({login: user.login}); if (!searchUser) { @@ -127,6 +131,10 @@ export class UserService { } async removeOne(login: string): Promise { + if (login === 'admin') { + throw new BadRequestException('Запрещено удалять пользователя admin'); + } + const searchUser = await this.userModel().findOne({login}); if (!searchUser) { @@ -219,6 +227,9 @@ export class UserService { async changePassword(access_token: string, old_password: string, new_password: string): Promise { const {login} = jwt.decode(access_token) as Token; + if (login === 'admin') { + throw new BadRequestException('Запрещено менять пароль пользователя admin'); + } const user = await this.userModel().findOne({login}); if (user && await this.checkPassword(old_password, user.password)) { const salt = user.salt;