From bd3945f2ee944865ff38903d0305e8a674377c96 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:09:21 -0500 Subject: [PATCH 1/3] remove tuya auth --- src/app.module.ts | 2 - src/auth/auth.module.ts | 7 +- .../controllers/authentication.controller.ts | 16 --- src/auth/controllers/index.ts | 1 - src/auth/services/authentication.service.ts | 120 ------------------ src/auth/services/index.ts | 1 - 6 files changed, 2 insertions(+), 145 deletions(-) delete mode 100644 src/auth/controllers/authentication.controller.ts delete mode 100644 src/auth/services/authentication.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index 29d07ac..5c3a52c 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -2,7 +2,6 @@ import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import config from './config'; import { AuthenticationModule } from './auth/auth.module'; -import { AuthenticationController } from './auth/controllers/authentication.controller'; import { UserModule } from './users/user.module'; import { RoomModule } from './room/room.module'; import { GroupModule } from './group/group.module'; @@ -53,7 +52,6 @@ import { ScheduleModule } from './schedule/schedule.module'; VisitorPasswordModule, ScheduleModule, ], - controllers: [AuthenticationController], providers: [ { provide: APP_INTERCEPTOR, diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 012312d..66d335d 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,6 +1,4 @@ import { Module } from '@nestjs/common'; -import { AuthenticationController } from './controllers/authentication.controller'; -import { AuthenticationService } from './services/authentication.service'; import { ConfigModule } from '@nestjs/config'; import { UserRepositoryModule } from '@app/common/modules/user/user.repository.module'; import { CommonModule } from '../../libs/common/src'; @@ -16,9 +14,8 @@ import { RoleTypeRepository } from '@app/common/modules/role-type/repositories'; @Module({ imports: [ConfigModule, UserRepositoryModule, CommonModule], - controllers: [AuthenticationController, UserAuthController], + controllers: [UserAuthController], providers: [ - AuthenticationService, UserAuthService, UserRepository, UserSessionRepository, @@ -26,6 +23,6 @@ import { RoleTypeRepository } from '@app/common/modules/role-type/repositories'; UserRoleRepository, RoleTypeRepository, ], - exports: [AuthenticationService, UserAuthService], + exports: [UserAuthService], }) export class AuthenticationModule {} diff --git a/src/auth/controllers/authentication.controller.ts b/src/auth/controllers/authentication.controller.ts deleted file mode 100644 index ace6525..0000000 --- a/src/auth/controllers/authentication.controller.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Controller, Post } from '@nestjs/common'; -import { AuthenticationService } from '../services/authentication.service'; -import { ApiTags } from '@nestjs/swagger'; - -@Controller({ - version: '1', - path: 'authentication', -}) -@ApiTags('Tuya Auth') -export class AuthenticationController { - constructor(private readonly authenticationService: AuthenticationService) {} - @Post('auth2') - async Authentication() { - return await this.authenticationService.main(); - } -} diff --git a/src/auth/controllers/index.ts b/src/auth/controllers/index.ts index 2ce466d..f63ac56 100644 --- a/src/auth/controllers/index.ts +++ b/src/auth/controllers/index.ts @@ -1,2 +1 @@ -export * from './authentication.controller'; export * from './user-auth.controller'; diff --git a/src/auth/services/authentication.service.ts b/src/auth/services/authentication.service.ts deleted file mode 100644 index 1d5d580..0000000 --- a/src/auth/services/authentication.service.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import * as qs from 'qs'; -import * as crypto from 'crypto'; -import { ConfigService } from '@nestjs/config'; -import axios from 'axios'; -@Injectable() -export class AuthenticationService { - private token: string; - private deviceId: string; - private accessKey: string; - private secretKey: string; - - constructor(private readonly configService: ConfigService) { - (this.deviceId = this.configService.get('auth-config.DEVICE_ID')), - (this.accessKey = this.configService.get( - 'auth-config.ACCESS_KEY', - )), - (this.secretKey = this.configService.get( - 'auth-config.SECRET_KEY', - )); - } - - async main() { - await this.getToken(); - const data = await this.getDeviceInfo(this.deviceId); - console.log('fetch success: ', JSON.stringify(data)); - return JSON.stringify(data); - } - - async getToken() { - const method = 'GET'; - const timestamp = Date.now().toString(); - const signUrl = 'https://openapi.tuyaeu.com/v1.0/token?grant_type=1'; - const contentHash = crypto.createHash('sha256').update('').digest('hex'); - const stringToSign = [method, contentHash, '', signUrl].join('\n'); - const signStr = this.accessKey + timestamp + stringToSign; - - const headers = { - t: timestamp, - sign_method: 'HMAC-SHA256', - client_id: this.accessKey, - sign: await this.encryptStr(signStr, this.secretKey), - }; - - const { data: login } = await axios.get( - 'https://openapi.tuyaeu.com/v1.0/token', - { - params: { - grant_type: 1, - }, - headers, - }, - ); - - if (!login || !login.success) { - throw new Error(`fetch failed: ${login.msg}`); - } - this.token = login.result.access_token; - } - - async getDeviceInfo(deviceId: string) { - const query = {}; - const method = 'POST'; - const url = `https://openapi.tuyaeu.com/v1.0/devices/${deviceId}/commands`; - const reqHeaders: { [k: string]: string } = await this.getRequestSign( - url, - method, - {}, - query, - ); - - const { data } = await axios.post(url, {}, reqHeaders); - - if (!data || !data.success) { - throw new Error(`request api failed: ${data.msg}`); - } - - return data; - } - - async encryptStr(str: string, secret: string): Promise { - return crypto - .createHmac('sha256', secret) - .update(str, 'utf8') - .digest('hex') - .toUpperCase(); - } - - async getRequestSign( - path: string, - method: string, - query: { [k: string]: any } = {}, - body: { [k: string]: any } = {}, - ) { - const t = Date.now().toString(); - const [uri, pathQuery] = path.split('?'); - const queryMerged = Object.assign(query, qs.parse(pathQuery)); - const sortedQuery: { [k: string]: string } = {}; - Object.keys(queryMerged) - .sort() - .forEach((i) => (sortedQuery[i] = query[i])); - - const querystring = decodeURIComponent(qs.stringify(sortedQuery)); - const url = querystring ? `${uri}?${querystring}` : uri; - const contentHash = crypto - .createHash('sha256') - .update(JSON.stringify(body)) - .digest('hex'); - const stringToSign = [method, contentHash, '', url].join('\n'); - const signStr = this.accessKey + this.token + t + stringToSign; - return { - t, - path: url, - client_id: 'this.accessKey', - sign: await this.encryptStr(signStr, this.secretKey), - sign_method: 'HMAC-SHA256', - access_token: this.token, - }; - } -} diff --git a/src/auth/services/index.ts b/src/auth/services/index.ts index ac532d6..aa322a1 100644 --- a/src/auth/services/index.ts +++ b/src/auth/services/index.ts @@ -1,2 +1 @@ -export * from './authentication.service'; export * from './user-auth.service'; From 898791ae93b10e111572a65281114e0a07b1e521 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:13:00 -0500 Subject: [PATCH 2/3] remove rename from apis url --- src/building/controllers/building.controller.ts | 2 +- src/community/controllers/community.controller.ts | 2 +- src/floor/controllers/floor.controller.ts | 2 +- src/room/controllers/room.controller.ts | 2 +- src/unit/controllers/unit.controller.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/building/controllers/building.controller.ts b/src/building/controllers/building.controller.ts index a76d620..ad61cb3 100644 --- a/src/building/controllers/building.controller.ts +++ b/src/building/controllers/building.controller.ts @@ -134,7 +134,7 @@ export class BuildingController { @ApiBearerAuth() @UseGuards(JwtAuthGuard, BuildingPermissionGuard) - @Put('rename/:buildingUuid') + @Put(':buildingUuid') async renameBuildingByUuid( @Param('buildingUuid') buildingUuid: string, @Body() updateBuildingDto: UpdateBuildingNameDto, diff --git a/src/community/controllers/community.controller.ts b/src/community/controllers/community.controller.ts index 3c9a313..adc38b7 100644 --- a/src/community/controllers/community.controller.ts +++ b/src/community/controllers/community.controller.ts @@ -133,7 +133,7 @@ export class CommunityController { } @ApiBearerAuth() @UseGuards(JwtAuthGuard) - @Put('rename/:communityUuid') + @Put(':communityUuid') async renameCommunityByUuid( @Param('communityUuid') communityUuid: string, @Body() updateCommunityDto: UpdateCommunityNameDto, diff --git a/src/floor/controllers/floor.controller.ts b/src/floor/controllers/floor.controller.ts index b4940fe..be7d921 100644 --- a/src/floor/controllers/floor.controller.ts +++ b/src/floor/controllers/floor.controller.ts @@ -134,7 +134,7 @@ export class FloorController { @ApiBearerAuth() @UseGuards(JwtAuthGuard, FloorPermissionGuard) - @Put('rename/:floorUuid') + @Put(':floorUuid') async renameFloorByUuid( @Param('floorUuid') floorUuid: string, @Body() updateFloorNameDto: UpdateFloorNameDto, diff --git a/src/room/controllers/room.controller.ts b/src/room/controllers/room.controller.ts index 0a92e57..8564b0e 100644 --- a/src/room/controllers/room.controller.ts +++ b/src/room/controllers/room.controller.ts @@ -110,7 +110,7 @@ export class RoomController { @ApiBearerAuth() @UseGuards(JwtAuthGuard, RoomPermissionGuard) - @Put('rename/:roomUuid') + @Put(':roomUuid') async renameRoomByUuid( @Param('roomUuid') roomUuid: string, @Body() updateRoomNameDto: UpdateRoomNameDto, diff --git a/src/unit/controllers/unit.controller.ts b/src/unit/controllers/unit.controller.ts index 1d5cbd3..9f3e50b 100644 --- a/src/unit/controllers/unit.controller.ts +++ b/src/unit/controllers/unit.controller.ts @@ -132,7 +132,7 @@ export class UnitController { @ApiBearerAuth() @UseGuards(JwtAuthGuard, UnitPermissionGuard) - @Put('rename/:unitUuid') + @Put(':unitUuid') async renameUnitByUuid( @Param('unitUuid') unitUuid: string, @Body() updateUnitNameDto: UpdateUnitNameDto, From 88f35585898249432bb48ba0e4e95514b110a831 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:17:31 -0500 Subject: [PATCH 3/3] enhance the urls name --- src/auth/controllers/user-auth.controller.ts | 2 +- .../controllers/user-device-permission.controller.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/auth/controllers/user-auth.controller.ts b/src/auth/controllers/user-auth.controller.ts index 1eee19e..b83a016 100644 --- a/src/auth/controllers/user-auth.controller.ts +++ b/src/auth/controllers/user-auth.controller.ts @@ -83,7 +83,7 @@ export class UserAuthController { @ApiBearerAuth() @UseGuards(SuperAdminRoleGuard) - @Get('user/list') + @Get('user') async userList() { const userList = await this.userAuthService.userList(); return { diff --git a/src/user-device-permission/controllers/user-device-permission.controller.ts b/src/user-device-permission/controllers/user-device-permission.controller.ts index 2f68708..d54637e 100644 --- a/src/user-device-permission/controllers/user-device-permission.controller.ts +++ b/src/user-device-permission/controllers/user-device-permission.controller.ts @@ -28,7 +28,7 @@ export class UserDevicePermissionController { @ApiBearerAuth() @UseGuards(AdminRoleGuard) - @Post('add') + @Post() async addDevicePermission( @Body() userDevicePermissionDto: UserDevicePermissionAddDto, ) { @@ -52,7 +52,7 @@ export class UserDevicePermissionController { @ApiBearerAuth() @UseGuards(AdminRoleGuard) - @Put('edit/:devicePermissionUuid') + @Put(':devicePermissionUuid') async editDevicePermission( @Param('devicePermissionUuid') devicePermissionUuid: string, @Body() userDevicePermissionEditDto: UserDevicePermissionEditDto, @@ -76,7 +76,7 @@ export class UserDevicePermissionController { @ApiBearerAuth() @UseGuards(AdminRoleGuard) - @Get(':deviceUuid/list') + @Get(':deviceUuid') async fetchDevicePermission(@Param('deviceUuid') deviceUuid: string) { try { const deviceDetails =