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';