mirror of
https://github.com/dadosfera/maestro.git
synced 2026-10-27 19:39:08 +00:00
FEATURE: Reset and block users
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
@dadosfera:registry=https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/
|
||||
//dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/:_authToken=eyJ2ZXIiOjEsImlzdSI6MTc0MTg3NzIzOCwiZW5jIjoiQTEyOEdDTSIsInRhZyI6IncwNUd6UTY3U2dhRDVRMl9NVmV2ZmciLCJleHAiOjE3NDE5MjA0MzgsImFsZyI6IkExMjhHQ01LVyIsIml2IjoiZVM5eWZVV29mbzd6OWQ0MiJ9.FL8EypfBaed4cHjH0zTsIw.xUqEdl9CBrFjToq2.5c6cSunN579sjnlOx-dkEcQBdkKEJV7dW2Nipn7Km6UD36S6Ed_Q5wuWkNI_1auv4vYoh_L1QbBLeg84I2XYNiXrtUivR99lQB9yxcqGZpZnml9mUpHRoPDB7EefVtkP5ohcYVga-pnsxike9ZJu1c68_arrM0QM3pZ5uWtYX2tR7ZG7KHbNoHj03y0hczgmaOIEoQVOnTT585sxrPo7Adsx2m6Y9KGlEsMdC1tM9ijdPIVy3rHYxqDOAPrTtKeH8vbqRAnigMDakANZ_k85u6p7u1Xd5VC3ulpbJkgPSG-zL0TjFrinXbPRALuaRxJbSfIhOiUhvCqpMmOHds67rs8MsGTFqauuXDwyMvTxARmUCfrSahDzD8UzGGuHPsJ7lS1-tLBY9MqUgNHyJOx04U4vPXMiG35DJqOAZjnL5GE1X32JSGvxxJF1ZkZFXsaxPGJ4CmDa4rUr_3lRDbZnEAlhpJIvumbTKYdchHwfjwq94W91vV2MZHf9d4oZImTtTT5c068lyyl29-y_RD8QRhoC2FbDVggKt4V8rWiP3KHIsIaqg493q6qoJT2giJYLj5-5Kil2rkXZl3mGgTLv6c5S2jKtxTQld4JTv1RgHYns6qsbAvS54tXBhBwKzWRICxwLPUpXNkfG3KiIg69_aUrzzivGKhJugxT-fOSt1quzs_0U4rumNoIb9GYk1YPIp9v3T46PdlBvoc6P0dqg40sbMYiAEMEu-EvJTWSOIR9t37j5wNWbKu4WQ3vRmtZIKloaJcyZSf5KeZKfkJcbA2SOKOBaLB0biZrU5GACVY0fTqI_RULNA1UOpO1L4u_rIHrCP089aZWCnysAFG27HoLLIgXEOpt1q4QQ3vzOTbU4ppuLcY0fjUzV6PgXcT5-aFibGovg1rQ3dLqAZH1IIEymDi7FN0ZzFbupYzXoAcCFrmd5ibhoWq7Vx-T1kCbcnc84SdEwtVH_HaiaXp28PD5XmBNPR5IgcKp6NKzjIl4y.qMEU5A6Qo1TgwlECA80UwA
|
||||
+127
-2
@@ -542,6 +542,123 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"/auth/users/block": {
|
||||
"post": {
|
||||
"operationId": "AuthController_blockUsers",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "dadosfera-lang",
|
||||
"in": "header",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"enum": [
|
||||
"pt-br",
|
||||
"en-us"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
"Auth"
|
||||
],
|
||||
"security": [
|
||||
{
|
||||
"access-token": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/auth/users/unblock": {
|
||||
"post": {
|
||||
"operationId": "AuthController_unblockUsers",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "dadosfera-lang",
|
||||
"in": "header",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"enum": [
|
||||
"pt-br",
|
||||
"en-us"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
"Auth"
|
||||
],
|
||||
"security": [
|
||||
{
|
||||
"access-token": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/auth/users/reset": {
|
||||
"post": {
|
||||
"operationId": "AuthController_resetUsers",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "dadosfera-lang",
|
||||
"in": "header",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"enum": [
|
||||
"pt-br",
|
||||
"en-us"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
"Auth"
|
||||
],
|
||||
"security": [
|
||||
{
|
||||
"access-token": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/connections": {
|
||||
"post": {
|
||||
"operationId": "ConnectionController_createConnection",
|
||||
@@ -5508,6 +5625,12 @@
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"displayName": {
|
||||
"type": "string"
|
||||
},
|
||||
"themeEnabled": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
@@ -5516,7 +5639,9 @@
|
||||
"name",
|
||||
"tier",
|
||||
"scheduleLimit",
|
||||
"links"
|
||||
"links",
|
||||
"displayName",
|
||||
"themeEnabled"
|
||||
]
|
||||
},
|
||||
"AuthUser": {
|
||||
@@ -8238,4 +8363,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Generated
+1710
-1410
File diff suppressed because it is too large
Load Diff
+4
-4
@@ -30,7 +30,7 @@
|
||||
"@aws-sdk/client-secrets-manager": "^3.414.0",
|
||||
"@dadosfera/dadosfera-logs": "^1.0.0-beta.4",
|
||||
"@dadosfera/protospack": "2.5.3",
|
||||
"@dadosfera/protospack-v2": "3.34.0",
|
||||
"@dadosfera/protospack-v2": "^3.37.0-beta.13",
|
||||
"@grpc/grpc-js": "^1.9.3",
|
||||
"@grpc/proto-loader": "^0.7.9",
|
||||
"@nestjs/cli": "^9.5.0",
|
||||
@@ -50,11 +50,14 @@
|
||||
"cron-parser": "^4.9.0",
|
||||
"dotenv": "^14.3.2",
|
||||
"elastic-apm-node": "^3.50.0",
|
||||
"fs.realpath": "^1.0.0",
|
||||
"helmet": "^5.1.1",
|
||||
"is-extglob": "^2.1.1",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"jwk-to-pem": "^2.0.5",
|
||||
"mixpanel": "^0.17.0",
|
||||
"ms": "^3.0.0-canary.1",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"passport": "^0.6.0",
|
||||
"passport-facebook": "^3.0.0",
|
||||
"passport-forcedotcom": "^0.2.0",
|
||||
@@ -66,9 +69,6 @@
|
||||
"rxjs": "^7.5.5",
|
||||
"swagger-ui-express": "^4.6.3"
|
||||
},
|
||||
"overrides": {
|
||||
"multer": "1.4.5-lts.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.17",
|
||||
"@types/jest": "27.0.2",
|
||||
|
||||
@@ -52,6 +52,9 @@ import jwt from 'jsonwebtoken';
|
||||
import { LanguageEnum } from 'src/utils/languages.enum';
|
||||
import { Language } from 'src/decorators/language.decorator';
|
||||
import { ApiInternalOnlyEndpoint } from 'src/decorators/swagger.decorator';
|
||||
import { Metadata } from '@grpc/grpc-js';
|
||||
import { lastValueFrom } from 'rxjs';
|
||||
import { UserOneResponse } from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/messages';
|
||||
|
||||
@ApiTags('Auth')
|
||||
@ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }])
|
||||
@@ -61,6 +64,7 @@ export class AuthController {
|
||||
logger: DadosferaLogger;
|
||||
redirectUrl: string;
|
||||
|
||||
|
||||
constructor(
|
||||
@Inject(DadosferaLogger)
|
||||
dadosferaLogger: DadosferaLogger,
|
||||
@@ -344,4 +348,79 @@ export class AuthController {
|
||||
|
||||
return { token, email, url, language };
|
||||
}
|
||||
|
||||
@ApiInternalOnlyEndpoint()
|
||||
@Post('users/block')
|
||||
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
||||
@HttpCode(HttpStatus.OK)
|
||||
async blockUsers(
|
||||
@Body() body: { userIds: string[] },
|
||||
@Language() language: LanguageEnum,
|
||||
@User() user: RequestUser,
|
||||
) {
|
||||
this.logger.info('blockUsers - Starting request', { userIds: body.userIds });
|
||||
|
||||
try {
|
||||
const metadata = PackTheMetadata({
|
||||
access_token: user.access_token,
|
||||
language,
|
||||
});
|
||||
|
||||
this.logger.debug('Calling blockUsers service', {
|
||||
userIds: body.userIds,
|
||||
metadata: {
|
||||
access_token: metadata.get('access_token'),
|
||||
language: metadata.get('language')
|
||||
}
|
||||
});
|
||||
|
||||
const result = await this.authClient.blockUsers(body.userIds, metadata);
|
||||
this.logger.info('blockUsers - Success', { result });
|
||||
return result;
|
||||
} catch (error) {
|
||||
this.logger.error('blockUsers - Error', {
|
||||
error: error.message,
|
||||
stack: error.stack,
|
||||
userIds: body.userIds
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
@ApiInternalOnlyEndpoint()
|
||||
@Post('users/unblock')
|
||||
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
||||
@HttpCode(HttpStatus.OK)
|
||||
async unblockUsers(
|
||||
@Body() body: { userIds: string[] },
|
||||
@Language() language: LanguageEnum,
|
||||
@User() user: RequestUser,
|
||||
) {
|
||||
this.logger.info('unblockUsers');
|
||||
const metadata = PackTheMetadata({
|
||||
access_token: user.access_token,
|
||||
language,
|
||||
});
|
||||
|
||||
return this.authClient.unblockUsers(body.userIds, metadata);
|
||||
}
|
||||
|
||||
@ApiInternalOnlyEndpoint()
|
||||
@Post('users/reset')
|
||||
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
||||
@HttpCode(HttpStatus.OK)
|
||||
async resetUsers(
|
||||
@Body() body: { userIds: string[] },
|
||||
@Language() language: LanguageEnum,
|
||||
@User() user: RequestUser,
|
||||
) {
|
||||
this.logger.info('resetUsers');
|
||||
const metadata = PackTheMetadata({
|
||||
access_token: user.access_token,
|
||||
language,
|
||||
});
|
||||
|
||||
const defaultPassword = 'SenhaPadrão123';
|
||||
return this.authClient.resetUsers(body.userIds, metadata, defaultPassword);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import {
|
||||
} from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/messages';
|
||||
import { DucClient } from '../duc/client.config';
|
||||
import { Metadata } from '@grpc/grpc-js';
|
||||
import { UserActionRequest, UserActionResponse } from './dtos/login';
|
||||
|
||||
@Injectable()
|
||||
export class AuthClientService implements OnModuleInit {
|
||||
@@ -168,4 +169,70 @@ export class AuthClientService implements OnModuleInit {
|
||||
this.authService.AuthOauthSignIn({ token, username, refreshToken: '' }),
|
||||
);
|
||||
}
|
||||
|
||||
async blockUsers(userIds: string[], metadata: Metadata): Promise<UserActionResponse> {
|
||||
this.logger.info('blockUsers - Service starting', { userIds });
|
||||
|
||||
try {
|
||||
this.logger.debug('Calling BlockUser gRPC method', {
|
||||
request: { users: { userIds } },
|
||||
metadata: {
|
||||
access_token: metadata.get('access_token'),
|
||||
language: metadata.get('language')
|
||||
}
|
||||
});
|
||||
|
||||
const response = await lastValueFrom<UserActionResponse>(
|
||||
(this.authService as any).BlockUser({ users: { userIds } }, metadata),
|
||||
);
|
||||
|
||||
this.logger.info('blockUsers - Service success', { response });
|
||||
return response;
|
||||
} catch (error) {
|
||||
this.logger.error('blockUsers - Service error', {
|
||||
error: error.message,
|
||||
stack: error.stack,
|
||||
request: { users: { userIds } }
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async unblockUsers(userIds: string[], metadata: Metadata): Promise<UserActionResponse> {
|
||||
this.logger.info('unblockUsers');
|
||||
return lastValueFrom(
|
||||
(this.authService as any).UnblockUser({ users: { userIds } }, metadata),
|
||||
);
|
||||
}
|
||||
|
||||
async resetUsers(userIds: string[], metadata: Metadata, defaultPassword: string): Promise<UserActionResponse> {
|
||||
this.logger.info('resetUsers');
|
||||
|
||||
try {
|
||||
this.logger.debug('Calling ResetUser gRPC method', {
|
||||
request: { users: { userIds }, defaultPassword },
|
||||
metadata: {
|
||||
access_token: metadata.get('access_token'),
|
||||
language: metadata.get('language')
|
||||
}
|
||||
});
|
||||
|
||||
const response = await lastValueFrom<UserActionResponse>(
|
||||
(this.authService as any).ResetUser({
|
||||
users: { userIds },
|
||||
defaultPassword
|
||||
}, metadata)
|
||||
);
|
||||
|
||||
this.logger.info('resetUsers - Success', { response });
|
||||
return response;
|
||||
} catch (error) {
|
||||
this.logger.error('resetUsers - Error', {
|
||||
error: error.message,
|
||||
stack: error.stack,
|
||||
request: { users: { userIds }, defaultPassword }
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,16 +67,27 @@ export class AuthUser {
|
||||
export class AuthCustomer {
|
||||
@ApiProperty()
|
||||
modules: string[];
|
||||
|
||||
@ApiProperty()
|
||||
id: string;
|
||||
|
||||
@ApiProperty()
|
||||
name: string;
|
||||
|
||||
@ApiProperty()
|
||||
tier: string;
|
||||
|
||||
@ApiProperty()
|
||||
scheduleLimit: string;
|
||||
|
||||
@ApiProperty()
|
||||
links: Link[];
|
||||
|
||||
@ApiProperty()
|
||||
displayName: string;
|
||||
|
||||
@ApiProperty()
|
||||
themeEnabled: boolean;
|
||||
}
|
||||
|
||||
export class AuthSignInReq implements AuthSignInRequest {
|
||||
@@ -118,3 +129,16 @@ export class AuthRefreshAccessTokenRes {
|
||||
@ApiProperty()
|
||||
accessToken: string;
|
||||
}
|
||||
|
||||
export interface UserActionRequest {
|
||||
users: {
|
||||
userIds: string[];
|
||||
};
|
||||
defaultPassword?: string;
|
||||
}
|
||||
|
||||
export interface UserActionResponse {
|
||||
message: string;
|
||||
successfulUsers: string[];
|
||||
failedUsers: string[];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user