Compare commits

...
3 Commits
Author SHA1 Message Date
Gabriel Amorim 0acf759e84 FIX: treating undefined responses from OpenSearch
Merge pull request #131 from dadosfera/fix/connections-undefineds
2022-09-12 07:41:56 -03:00
Gabriel Rosa 7bbb87a54a FIX: removed fake customer_name 2022-09-11 13:08:00 -03:00
Gabriel Rosa 69af7ba626 FIX: new route for synchronizing connections with platform 2022-09-11 13:07:21 -03:00
26 changed files with 234 additions and 115 deletions
+7 -7
View File
@@ -12,7 +12,7 @@
"dependencies": {
"@aws-sdk/client-secrets-manager": "^3.112.0",
"@dadosfera/dadosfera-logs": "^1.0.0-beta.3",
"@dadosfera/protospack-v2": "3.15.3",
"@dadosfera/protospack-v2": "3.17.0",
"@grpc/grpc-js": "^1.6.7",
"@grpc/proto-loader": "^0.6.13",
"@nestjs/common": "^8.4.7",
@@ -1726,9 +1726,9 @@
}
},
"node_modules/@dadosfera/protospack-v2": {
"version": "3.15.3",
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com:443/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.15.3.tgz",
"integrity": "sha512-/TNTnjm8XIQ3DFiJc8nnSRFQE23lF8Dm+8wzL1VJIqivdQK2gUwkpEoYT0CA6PFVvVFhDrEWo/zGY55tBHXJBg==",
"version": "3.17.0",
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com:443/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.17.0.tgz",
"integrity": "sha512-NeS8cs+ZJrC7kW1mgnRWwmP5E70RTfjp+UlJkHN5RA0vsRhKVcF8dA5VmGQerPT4aDA3K1sMkWJbjzU3Wdt/jA==",
"dependencies": {
"@grpc/grpc-js": "^1.6.7",
"rxjs": "^7.5.5",
@@ -12305,9 +12305,9 @@
}
},
"@dadosfera/protospack-v2": {
"version": "3.15.3",
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com:443/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.15.3.tgz",
"integrity": "sha512-/TNTnjm8XIQ3DFiJc8nnSRFQE23lF8Dm+8wzL1VJIqivdQK2gUwkpEoYT0CA6PFVvVFhDrEWo/zGY55tBHXJBg==",
"version": "3.17.0",
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com:443/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.17.0.tgz",
"integrity": "sha512-NeS8cs+ZJrC7kW1mgnRWwmP5E70RTfjp+UlJkHN5RA0vsRhKVcF8dA5VmGQerPT4aDA3K1sMkWJbjzU3Wdt/jA==",
"requires": {
"@grpc/grpc-js": "^1.6.7",
"rxjs": "^7.5.5",
+1 -1
View File
@@ -27,7 +27,7 @@
"dependencies": {
"@aws-sdk/client-secrets-manager": "^3.112.0",
"@dadosfera/dadosfera-logs": "^1.0.0-beta.3",
"@dadosfera/protospack-v2": "3.15.3",
"@dadosfera/protospack-v2": "3.17.0",
"@grpc/grpc-js": "^1.6.7",
"@grpc/proto-loader": "^0.6.13",
"@nestjs/common": "^8.4.7",
+2
View File
@@ -23,6 +23,7 @@ import { HealthModule } from './modules/health/health.module';
import { CatalogModule } from './modules/catalog/catalog.module';
import { ConfigModule } from '@nestjs/config';
import { PipelinesV2Module } from './modules/pipelinesV2/pipelines.module';
import { ConnectionMigrationsModule } from './modules/connection-migrations/connection-migrations.module';
@Module({
controllers: [],
@@ -53,6 +54,7 @@ import { PipelinesV2Module } from './modules/pipelinesV2/pipelines.module';
InputsModule,
OauthModule,
PipelinesV2Module,
ConnectionMigrationsModule,
],
})
export class AppModule {}
+12 -12
View File
@@ -13,7 +13,7 @@ import {
RequireSomePermission,
} from './authentication.decorator';
import { AuthenticationGuard } from './authentication.guard';
import { PERMISSIONS } from './permissions.enum';
import { PERMISSIONS_GROUPS } from './permissions.enum';
import { AuthClientService } from '../modules/auth/auth.service';
import ErrorCodes from '../utils/errorCodes';
@@ -36,15 +36,15 @@ class NoClassAuthController {
}
@Get('required-permission')
@RequireSomePermission(PERMISSIONS.ZENDESK.permissions.OPEN)
@RequireSomePermission(PERMISSIONS_GROUPS.ZENDESK.permissions.OPEN)
async requiredPermission(@Body() body) {
return { body };
}
@Get('has-all-permissions')
@RequireAllPermissions(
PERMISSIONS.ZENDESK.permissions.OPEN,
PERMISSIONS.METABASE.permissions.OPEN,
PERMISSIONS_GROUPS.ZENDESK.permissions.OPEN,
PERMISSIONS_GROUPS.METABASE.permissions.OPEN,
)
async hasAllPermissions(@Body() body) {
return { body };
@@ -52,8 +52,8 @@ class NoClassAuthController {
@Get('has-some-permission')
@RequireSomePermission(
PERMISSIONS.ZENDESK.permissions.OPEN,
PERMISSIONS.METABASE.permissions.OPEN,
PERMISSIONS_GROUPS.ZENDESK.permissions.OPEN,
PERMISSIONS_GROUPS.METABASE.permissions.OPEN,
)
async hasSomePermission(@Body() body) {
return { body };
@@ -62,7 +62,7 @@ class NoClassAuthController {
@Controller('class-auth-condition')
@AuthenticateCondition((req) => req.get('x-on-class') === 'ok')
@RequireSomePermission(PERMISSIONS.METABASE.permissions.OPEN)
@RequireSomePermission(PERMISSIONS_GROUPS.METABASE.permissions.OPEN)
class ClassAuthConditionController {
@Get('body')
async getBody(@Body() body) {
@@ -77,7 +77,7 @@ class ClassAuthConditionController {
@Get('required-permission')
@AuthenticateCondition((req) => req.get('x-on-route') === 'ok')
@RequireSomePermission(PERMISSIONS.ZENDESK.permissions.OPEN)
@RequireSomePermission(PERMISSIONS_GROUPS.ZENDESK.permissions.OPEN)
async requiredPermission(@Body() body) {
return { body };
}
@@ -440,17 +440,17 @@ describe('authentication.guard', () => {
NoClassAuthTest(null, null);
ClassAuthConditionTest(null, null);
const tokenZ = CreateToken([PERMISSIONS.ZENDESK.permissions.OPEN]);
const tokenZ = CreateToken([PERMISSIONS_GROUPS.ZENDESK.permissions.OPEN]);
NoClassAuthTest(tokenZ, ['zendesk']);
ClassAuthConditionTest(tokenZ, ['zendesk']);
const tokenM = CreateToken([PERMISSIONS.METABASE.permissions.OPEN]);
const tokenM = CreateToken([PERMISSIONS_GROUPS.METABASE.permissions.OPEN]);
NoClassAuthTest(tokenM, ['metabase']);
ClassAuthConditionTest(tokenM, ['metabase']);
const tokenZM = CreateToken([
PERMISSIONS.ZENDESK.permissions.OPEN,
PERMISSIONS.METABASE.permissions.OPEN,
PERMISSIONS_GROUPS.ZENDESK.permissions.OPEN,
PERMISSIONS_GROUPS.METABASE.permissions.OPEN,
]);
NoClassAuthTest(tokenZM, ['zendesk', 'metabase']);
ClassAuthConditionTest(tokenZM, ['zendesk', 'metabase']);
+23 -4
View File
@@ -37,7 +37,7 @@ export interface PermissionsObjectGroup {
/*export const Permissions: {
[P in keyof any]: { [Q in keyof any]: Permission };
} = {*/
export const PERMISSIONS = {
export const PERMISSIONS_GROUPS = {
AUTH: {
title: {
'pt-br': 'Autenticação',
@@ -496,17 +496,36 @@ export const PERMISSIONS = {
},
},
},
DADOSFERA: {
title: {
'pt-br': 'Usuários',
'en-us': 'Users',
'es-es': 'Usuarios',
},
permissions: {
ADMIN: {
seqid: 40,
claim: 'dadosfera:connections-migation',
usage: PermissionUsages.INTERNAL,
name: {
'pt-br': 'connections-migation',
'en-us': 'connections-migation',
'es-es': 'connections-migation',
},
},
},
},
};
// traverses the object searching for duplicate seqids or claims (executes at runtime)
let nextAvailableSeqid = 0;
const seqids = Object.values(PERMISSIONS).flatMap((namespace) =>
const seqids = Object.values(PERMISSIONS_GROUPS).flatMap((namespace) =>
Object.values(namespace.permissions).map(({ seqid }) => seqid),
);
const claims = Object.values(PERMISSIONS).flatMap((namespace) =>
const claims = Object.values(PERMISSIONS_GROUPS).flatMap((namespace) =>
Object.values(namespace.permissions).map(({ claim }) => claim),
);
Object.values(PERMISSIONS).map((namespace) =>
Object.values(PERMISSIONS_GROUPS).map((namespace) =>
Object.values(namespace.permissions).map(({ seqid, claim }) => {
const seqidsCount = seqids.filter((x) => x === seqid).length;
assert(seqidsCount === 1, `seqid ${seqid} count is not 1`);
+2 -2
View File
@@ -11,7 +11,7 @@ import { AuthClientService } from '../modules/auth/auth.service';
import ErrorCodes from '../utils/errorCodes';
import { User } from './user.decorator';
import { PERMISSIONS } from './permissions.enum';
import { PERMISSIONS_GROUPS } from './permissions.enum';
const logger = {
info: (...args) => args,
@@ -49,7 +49,7 @@ describe('user.decorator', () => {
const fakeUserPayload = {
user_id: 'd50d33c7-6c2b-463c-861f-e21667e7c125',
username: 'super.admin',
permissions: [PERMISSIONS.METABASE.permissions.OPEN].map(
permissions: [PERMISSIONS_GROUPS.METABASE.permissions.OPEN].map(
({ seqid }) => seqid,
),
customer_id: '9d18e8ae-24b9-41a3-9e8f-a25ce57555b11',
+2 -2
View File
@@ -21,7 +21,7 @@ import {
AuthVerifyTotpMfaRequest,
} from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/messages';
import { PERMISSIONS } from 'src/authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum';
import { RequireAllPermissions } from 'src/authentication/authentication.decorator';
import { AuthClientService } from './auth.service';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
@@ -43,7 +43,7 @@ export class AuthController {
}
@Post('/sso/snowflake')
@RequireAllPermissions(PERMISSIONS.SNOWFLAKE.permissions.OPEN)
@RequireAllPermissions(PERMISSIONS_GROUPS.SNOWFLAKE.permissions.OPEN)
@HttpCode(HttpStatus.OK)
async snowflakeSignIn(
@User() user: RequestUser,
+2 -2
View File
@@ -10,7 +10,7 @@ import {
} from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { AuthenticateCondition } from '../../authentication/authentication.decorator';
import { PERMISSIONS } from '../../authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum';
import { CatalogService } from './catalog.service';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
@@ -33,7 +33,7 @@ import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
}
return user.permissions.includes(
PERMISSIONS.CATALOG.permissions[action].seqid,
PERMISSIONS_GROUPS.CATALOG.permissions[action].seqid,
);
})
export class CatalogController {
@@ -0,0 +1,16 @@
import { Controller, Get } from '@nestjs/common';
import { RequireAllPermissions } from 'src/authentication/authentication.decorator';
import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum';
import { ConnectionMigrationsService } from './connection-migrations.service';
@Controller('connection-migrations')
export class ConnectionMigrationsController {
constructor(
private connectionMigrationsService: ConnectionMigrationsService,
) {}
@Get()
@RequireAllPermissions(PERMISSIONS_GROUPS.DADOSFERA.permissions.ADMIN)
async getAllCustomersPlatformConnections() {
return this.connectionMigrationsService.synchronizeConnections();
}
}
@@ -0,0 +1,13 @@
import { Module } from '@nestjs/common';
import { ConnectionMigrationsService } from './connection-migrations.service';
import { ConnectionMigrationsController } from './connection-migrations.controller';
import { UsersModule } from '../users/users.module';
import { ConnectionModule } from '../connection/connection.module';
import { ConnectorModule } from '../connector/connector.module';
@Module({
imports: [UsersModule, ConnectionModule, ConnectorModule],
providers: [ConnectionMigrationsService],
controllers: [ConnectionMigrationsController],
})
export class ConnectionMigrationsModule {}
@@ -0,0 +1,44 @@
import { Injectable } from '@nestjs/common';
import { ConnectionClientService } from '../connection/client.service';
import { ConnectorClientService } from '../connector/client.service';
import { UsersService } from '../users/users.service';
@Injectable()
export class ConnectionMigrationsService {
constructor(
private usersService: UsersService,
private connectionsService: ConnectionClientService,
private connectorService: ConnectorClientService,
) {}
async synchronizeConnections() {
const { connectors } = await this.connectorService
.getAllConnectors({
search: undefined,
filters: undefined,
language: 'pt-br',
page: 1,
size: 500,
})
.then(({ connectors }) => ({ connectors: JSON.parse(connectors) }));
const { customers } = await this.usersService.findaAllCustomers();
const promises: Promise<{
customer_name: string;
productConnections: Record<string, any>;
platformConnections: Record<string, any>;
}>[] = [];
customers.forEach((c) => {
const customer_name = c.name;
promises.push(
this.connectionsService
.INTERNAL_getAllConnections({ customer_name })
.then((res) => ({
customer_name,
platformConnections: JSON.parse(res.platformConnections),
productConnections: JSON.parse(res.productConnections),
})),
);
});
const customer_connections = await Promise.all(promises);
return { customer_connections, connectors };
}
}
+15 -2
View File
@@ -14,7 +14,10 @@ import {
UpdateConnectionDto,
} from './dtos/connection';
import { ConnectionClientConfiguration } from './client.config';
import { GetConnectionDetailsResponse } from '@dadosfera/protospack-v2/dist/lib/ConnectionManager/interfaces/messages';
import {
GetConnectionDetailsResponse,
INTERNAL_GetAllConnectionsResponse,
} from '@dadosfera/protospack-v2/dist/lib/ConnectionManager/interfaces/messages';
export class ConnectionClientService implements OnModuleInit {
private connectionServiceRead: ConnectionManager.ReadService.ConnectionManagerReadServices;
@@ -119,7 +122,7 @@ export class ConnectionClientService implements OnModuleInit {
});
}
async getAllConnection({ body, metadata }): Promise<ConnectionsRes> {
async getAllConnections({ body, metadata }): Promise<ConnectionsRes> {
const { search, filters, size, page } = body;
return lastValueFrom(
@@ -150,4 +153,14 @@ export class ConnectionClientService implements OnModuleInit {
);
});
}
async INTERNAL_getAllConnections({
customer_name,
}: {
customer_name: string;
}): Promise<INTERNAL_GetAllConnectionsResponse> {
return lastValueFrom(
this.connectionServiceRead.INTERNAL_GetAllConnections({ customer_name }),
);
}
}
@@ -17,7 +17,7 @@ import {
Authenticated,
RequireAllPermissions,
} from 'src/authentication/authentication.decorator';
import { PERMISSIONS } from 'src/authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum';
import { RequestUser, User } from 'src/authentication/user.decorator';
import { ValidationPipe } from '../../pipes/object-validation.pipe';
import {
@@ -29,6 +29,7 @@ import {
import { CreateConnectionDto } from './dtos/connection';
import { PackTheMetadata } from 'src/utils/ PackTheMetadata';
const connectionPermissions = PERMISSIONS_GROUPS.CONNECTION.permissions;
@ApiTags('connections')
@ApiBearerAuth()
@Authenticated()
@@ -44,7 +45,7 @@ export class ConnectionController {
}
@Post()
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
@RequireAllPermissions(connectionPermissions.CREATE)
async createConnection(
@User() user: RequestUser,
@Body(new ValidationPipe()) body: CreateConnectionDto,
@@ -68,7 +69,7 @@ export class ConnectionController {
}
@Put('/:id')
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
@RequireAllPermissions(connectionPermissions.CREATE)
async updateConnection(
@User() user: RequestUser,
@Headers('Dadosfera-Lang') language: string,
@@ -97,7 +98,7 @@ export class ConnectionController {
}
@Delete('/:id')
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
@RequireAllPermissions(connectionPermissions.DELETE)
async deleteConnection(
@User() user: RequestUser,
@Param('id') id: string,
@@ -121,8 +122,7 @@ export class ConnectionController {
}
@Get()
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
async getAllConnection(
async getAllConnections(
@User() user: RequestUser,
@Headers('Dadosfera-Lang') language,
@Query() queries,
@@ -140,7 +140,7 @@ export class ConnectionController {
username,
});
const response = await this.clientService.getAllConnection({
const response = await this.clientService.getAllConnections({
body: { search, size, page, filters },
metadata,
});
@@ -149,7 +149,6 @@ export class ConnectionController {
}
@Get('/:id')
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
async getConnectionDetails(
@Headers('Dadosfera-Lang') language,
@User() user: RequestUser,
+28 -28
View File
@@ -30,7 +30,7 @@ import {
RequireAllPermissions,
RequireSomePermission,
} from 'src/authentication/authentication.decorator';
import { PERMISSIONS } from 'src/authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum';
@ApiTags('connectors')
@ApiBearerAuth()
@@ -47,7 +47,7 @@ export class ConnectorController {
}
@Post()
@RequireAllPermissions(PERMISSIONS.CONNECTORS.permissions.CREATE)
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.CREATE)
@ApiConsumes('multipart/form-data')
@UseInterceptors(FileInterceptor('file'))
async uploadConnector(
@@ -65,7 +65,7 @@ export class ConnectorController {
}
@Post('/uploads')
@RequireAllPermissions(PERMISSIONS.CONNECTORS.permissions.CREATE)
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.CREATE)
@ApiConsumes('multipart/form-data')
@UseInterceptors(FilesInterceptor('files'))
async uploadFile(@UploadedFiles() files) {
@@ -82,7 +82,7 @@ export class ConnectorController {
}
@Post('/multiple-connectors-upload')
@RequireAllPermissions(PERMISSIONS.CONNECTORS.permissions.CREATE)
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.CREATE)
@ApiConsumes('multipart/form-data')
@UseInterceptors(FileInterceptor('file'))
async uploadConnectorsFile(@UploadedFile() file: UploadConnectorsFileDto) {
@@ -97,11 +97,11 @@ export class ConnectorController {
@Get()
@RequireSomePermission(
PERMISSIONS.CONNECTORS.permissions.GET,
PERMISSIONS.PIPELINE.permissions.CREATE,
PERMISSIONS.PIPELINE.permissions.GET,
PERMISSIONS.PIPELINE.permissions.UPDATE,
PERMISSIONS.PIPELINE.permissions.DELETE,
PERMISSIONS_GROUPS.CONNECTORS.permissions.GET,
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE,
PERMISSIONS_GROUPS.PIPELINE.permissions.GET,
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE,
PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE,
)
async getAllConnectors(
@Headers('dadosfera-lang') language,
@@ -130,11 +130,11 @@ export class ConnectorController {
@Get('/tags')
@RequireSomePermission(
PERMISSIONS.CONNECTORS.permissions.GET,
PERMISSIONS.PIPELINE.permissions.CREATE,
PERMISSIONS.PIPELINE.permissions.GET,
PERMISSIONS.PIPELINE.permissions.UPDATE,
PERMISSIONS.PIPELINE.permissions.DELETE,
PERMISSIONS_GROUPS.CONNECTORS.permissions.GET,
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE,
PERMISSIONS_GROUPS.PIPELINE.permissions.GET,
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE,
PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE,
)
async getConnectorsTags() {
return await this.connectorClientService.getConnectorsTags();
@@ -142,11 +142,11 @@ export class ConnectorController {
@Get('/:plugin')
@RequireSomePermission(
PERMISSIONS.CONNECTORS.permissions.GET,
PERMISSIONS.PIPELINE.permissions.CREATE,
PERMISSIONS.PIPELINE.permissions.GET,
PERMISSIONS.PIPELINE.permissions.UPDATE,
PERMISSIONS.PIPELINE.permissions.DELETE,
PERMISSIONS_GROUPS.CONNECTORS.permissions.GET,
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE,
PERMISSIONS_GROUPS.PIPELINE.permissions.GET,
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE,
PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE,
)
async getConnector(
@Headers('dadosfera-lang') language,
@@ -171,11 +171,11 @@ export class ConnectorController {
@Get('/:plugin/details')
@RequireSomePermission(
PERMISSIONS.CONNECTORS.permissions.GET,
PERMISSIONS.PIPELINE.permissions.CREATE,
PERMISSIONS.PIPELINE.permissions.GET,
PERMISSIONS.PIPELINE.permissions.UPDATE,
PERMISSIONS.PIPELINE.permissions.DELETE,
PERMISSIONS_GROUPS.CONNECTORS.permissions.GET,
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE,
PERMISSIONS_GROUPS.PIPELINE.permissions.GET,
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE,
PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE,
)
async getConnectorDetails(
@Headers('dadosfera-lang') language,
@@ -199,7 +199,7 @@ export class ConnectorController {
}
@Put('/:plugin')
@RequireAllPermissions(PERMISSIONS.CONNECTORS.permissions.UPDATE)
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE)
@ApiConsumes('multipart/form-data')
async updateConnector(
@Param('plugin') plugin: string,
@@ -221,7 +221,7 @@ export class ConnectorController {
}
@Put('/:plugin/add-tag')
@RequireAllPermissions(PERMISSIONS.CONNECTORS.permissions.UPDATE)
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE)
async addTagOnConnector(
@Param('plugin') plugin: string,
@Body() body: AddTagDto,
@@ -248,7 +248,7 @@ export class ConnectorController {
}
@Put('/:plugin/remove-tag')
@RequireAllPermissions(PERMISSIONS.CONNECTORS.permissions.UPDATE)
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE)
async removeTagOnConnector(
@Param('plugin') plugin: string,
@Body() body: RemoveTagDto,
@@ -276,7 +276,7 @@ export class ConnectorController {
}
@Delete('/:plugin')
@RequireAllPermissions(PERMISSIONS.CONNECTORS.permissions.DELETE)
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.DELETE)
async deleteConnector(
@Param('plugin') plugin: string,
@Body() { version }: DeleteConnectorDto,
@@ -11,5 +11,6 @@ const client = new ConnectorClientConfiguration();
controllers: [ConnectorController],
providers: [ConnectorClientService, DadosferaLogger],
imports: [ClientsModule.register([client.providerOptions])],
exports: [ConnectorClientService],
})
export class ConnectorModule {}
+6 -6
View File
@@ -10,7 +10,7 @@ import {
} from '@nestjs/common';
import { InputsService } from './inputs.service';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
import { PERMISSIONS } from '../../authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum';
import { AuthenticateCondition } from 'src/authentication/authentication.decorator';
import { ApiOkResponse, ApiTags } from '@nestjs/swagger';
import {
@@ -36,20 +36,20 @@ import { Info } from '@dadosfera/protospack-v2/dist/lib/Input/interfaces/entitie
case 'PATCH':
return (
user.permissions.includes(
PERMISSIONS.PIPELINE.permissions.CREATE.seqid,
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE.seqid,
) ||
user.permissions.includes(PERMISSIONS.PIPELINE.permissions.UPDATE.seqid)
user.permissions.includes(PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE.seqid)
);
default:
return (
user.permissions.includes(
PERMISSIONS.PIPELINE.permissions.CREATE.seqid,
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE.seqid,
) ||
user.permissions.includes(
PERMISSIONS.PIPELINE.permissions.UPDATE.seqid,
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE.seqid,
) ||
user.permissions.includes(PERMISSIONS.PIPELINE.permissions.GET.seqid)
user.permissions.includes(PERMISSIONS_GROUPS.PIPELINE.permissions.GET.seqid)
);
}
})
@@ -6,7 +6,7 @@ import {
RequireAllPermissions,
} from 'src/authentication/authentication.decorator';
import {
PERMISSIONS,
PERMISSIONS_GROUPS,
PermissionUsages,
} from 'src/authentication/permissions.enum';
import { RequestUser, User } from 'src/authentication/user.decorator';
@@ -36,7 +36,7 @@ export class PermissionsController {
@Get()
@ApiOkResponse({ type: GetPublicPermissionsRes })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
getPublicPermissions(
@User() user: RequestUser,
@Headers('dadosfera-lang') language,
@@ -12,7 +12,7 @@ import { PermissionsProtoService as PermissionsServiceInterface } from '@dadosfe
import { InjectPermissionsRequest } from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/messages';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
import {
PERMISSIONS,
PERMISSIONS_GROUPS,
PermissionUsages,
PermissionsObjectGroup,
PermissionsObjectPermissionTranslated,
@@ -48,7 +48,7 @@ export class PermissionsService
async onApplicationBootstrap() {
this.logger.info('sending permissions to DUC...');
const permissions = Object.values(PERMISSIONS).flatMap((namespace) =>
const permissions = Object.values(PERMISSIONS_GROUPS).flatMap((namespace) =>
Object.values(namespace.permissions),
);
@@ -80,8 +80,8 @@ export class PermissionsService
language: LanguageEnum = LanguageEnum.ptbr,
): PermissionGroup[] {
const groups: PermissionGroup[] = [];
for (const key in PERMISSIONS) {
const permissionGroup: PermissionsObjectGroup = PERMISSIONS[key];
for (const key in PERMISSIONS_GROUPS) {
const permissionGroup: PermissionsObjectGroup = PERMISSIONS_GROUPS[key];
const title = permissionGroup.title[language];
const permissions: PermissionGroupPermission[] = Object.values(
permissionGroup.permissions,
@@ -100,8 +100,8 @@ export class PermissionsService
}
getAllPermissions(language: LanguageEnum = LanguageEnum.ptbr) {
let permissions: PermissionsObjectPermissionTranslated[] = [];
for (const key in PERMISSIONS) {
const permissionGroup: PermissionsObjectGroup = PERMISSIONS[key];
for (const key in PERMISSIONS_GROUPS) {
const permissionGroup: PermissionsObjectGroup = PERMISSIONS_GROUPS[key];
const permissionGroupPermissions: PermissionsObjectPermissionTranslated[] =
Object.values(permissionGroup.permissions).map((p) => ({
...p,
@@ -10,7 +10,7 @@ import {
} from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { AuthenticateCondition } from 'src/authentication/authentication.decorator';
import { PERMISSIONS } from '../../authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum';
import { PipelinesService } from './pipelines.service';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
import { RequestUser, User } from 'src/authentication/user.decorator';
@@ -34,7 +34,7 @@ import { RequestUser, User } from 'src/authentication/user.decorator';
}
return user.permissions.includes(
PERMISSIONS.PIPELINE.permissions[action].seqid,
PERMISSIONS_GROUPS.PIPELINE.permissions[action].seqid,
);
})
export class PipelinesController {
@@ -12,7 +12,7 @@ import {
} from '@nestjs/common';
import { ApiCreatedResponse, ApiTags } from '@nestjs/swagger';
import { AuthenticateCondition } from 'src/authentication/authentication.decorator';
import { PERMISSIONS } from '../../authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum';
import { PipelinesService } from './pipelines.service';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
import { Messages } from '@dadosfera/protospack-v2/dist/lib/PipelineV2';
@@ -40,7 +40,7 @@ import { ICreatePipelineV2Req, IPipelineV2 } from './interfaces';
}
return user.permissions.includes(
PERMISSIONS.PIPELINE.permissions[action].seqid,
PERMISSIONS_GROUPS.PIPELINE.permissions[action].seqid,
);
})
export class PipelinesController {
+10 -10
View File
@@ -39,7 +39,7 @@ import {
SetRoleUsersReq,
} from './dto/entities';
import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter';
import { PERMISSIONS } from 'src/authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum';
import {
Authenticated,
RequireAllPermissions,
@@ -69,7 +69,7 @@ export class RolesController {
@Get()
@ApiOkResponse({ type: GetRolesByCustomerRes })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async searchRoles(
@User() user: RequestUser,
@Query() filters: GetRolesByCustomerReq,
@@ -82,7 +82,7 @@ export class RolesController {
@Post()
@ApiCreatedResponse({ type: CreateRoleRes })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async createRole(
@User() user: RequestUser,
@Body() body: CreateRoleReq,
@@ -95,7 +95,7 @@ export class RolesController {
@Put('permissions')
@ApiOkResponse({ type: GrantPermissionsToRoleRes })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async grantPermissionsToRole(
@User() user: RequestUser,
@Body() body: GrantPermissionsToRoleReq,
@@ -108,7 +108,7 @@ export class RolesController {
@Delete('permissions')
@ApiOkResponse({ type: RevokePermissionsFromRoleRes })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async revokePermissionsFromRole(
@User() user: RequestUser,
@Body() body: RevokePermissionsFromRoleReq,
@@ -121,7 +121,7 @@ export class RolesController {
@Patch('permissions')
@ApiOkResponse({ type: SetRolePermissionsRes })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async setRolePermissions(
@User() user: RequestUser,
@Body() body: SetRolePermissionsReq,
@@ -134,7 +134,7 @@ export class RolesController {
@Patch('users')
@ApiOkResponse({ type: SetRoleUsersRes })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async setRoleUsers(
@User() user: RequestUser,
@Body() body: SetRoleUsersReq,
@@ -147,7 +147,7 @@ export class RolesController {
@Get(':id')
@ApiOkResponse({ type: RoleDto })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async getRoleById(
@User() user: RequestUser,
@Param('id') id: string,
@@ -159,7 +159,7 @@ export class RolesController {
}
@Delete(':id')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async deleteRole(
@User() user: RequestUser,
@Param('id') id: string,
@@ -172,7 +172,7 @@ export class RolesController {
@Patch(':id')
@ApiOkResponse({ type: UpdateRoleRes })
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async updateRole(
@User() user: RequestUser,
@Param('id') id: string,
@@ -12,7 +12,7 @@ import { ApiTags } from '@nestjs/swagger';
import { TransformationsClientService } from './client.service';
import { IIdRequest } from './interfaces';
import { AuthenticateCondition } from 'src/authentication/authentication.decorator';
import { PERMISSIONS } from '../../authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum';
import { TransformationsService } from './transformations.service';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
import { RequestUser, User } from 'src/authentication/user.decorator';
@@ -36,7 +36,7 @@ import { RequestUser, User } from 'src/authentication/user.decorator';
}
return user.permissions.includes(
PERMISSIONS.TRANSFORMATIONS.permissions[action].seqid,
PERMISSIONS_GROUPS.TRANSFORMATIONS.permissions[action].seqid,
);
})
export class TransformationsController {
+14 -14
View File
@@ -22,7 +22,7 @@ import {
} from '@nestjs/swagger';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
import { RequireAllPermissions } from 'src/authentication/authentication.decorator';
import { PERMISSIONS } from 'src/authentication/permissions.enum';
import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum';
import { RequestUser, User } from 'src/authentication/user.decorator';
import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter';
import { LanguageEnum } from 'src/utils/languages.enum';
@@ -68,7 +68,7 @@ export class UsersController {
}
@Get()
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiOkResponse({
type: GetAllUsersByCustomerIdRes,
description: 'List of users of a customer',
@@ -83,7 +83,7 @@ export class UsersController {
}
@Get('hierarchies')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiOkResponse({ type: GetAllHierarchiesRes })
async getAllHierarchies(
@User() user: RequestUser,
@@ -95,7 +95,7 @@ export class UsersController {
}
@Get('departments')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiOkResponse({ type: GetAllDepartmentsRes })
async getAllDepartments(
@User() user: RequestUser,
@@ -107,7 +107,7 @@ export class UsersController {
}
@Get('jobTitles')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiOkResponse({ type: GetAllDepartmentsRes })
async getAllJobTitles(
@User() user: RequestUser,
@@ -119,7 +119,7 @@ export class UsersController {
}
@Get(':id')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiOkResponse({
type: UserByCustomer,
})
@@ -134,7 +134,7 @@ export class UsersController {
}
@Post()
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiCreatedResponse({ type: CreateUserRes })
async createUser(
@User() user: RequestUser,
@@ -147,7 +147,7 @@ export class UsersController {
}
@Post('batch')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiCreatedResponse({ type: BatchCreateUserRes })
async batchCreateUser(
@User() user: RequestUser,
@@ -160,7 +160,7 @@ export class UsersController {
}
@Post(':id/resend-invite')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@HttpCode(HttpStatus.OK)
async resendInvite(
@User() user: RequestUser,
@@ -173,7 +173,7 @@ export class UsersController {
}
@Delete('role')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async unassignRoleToUser(
@User() user: RequestUser,
@Query() request: UnassignRoleToUserReq,
@@ -185,7 +185,7 @@ export class UsersController {
}
@Delete(':id')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiOkResponse({ type: DeleteUserRes })
async deleteUser(
@User() user: RequestUser,
@@ -198,7 +198,7 @@ export class UsersController {
}
@Patch('roles')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiOkResponse({ type: SetUserRolesRes })
async setUserRoles(
@User() user: RequestUser,
@@ -211,7 +211,7 @@ export class UsersController {
}
@Put('role')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
async assignRoleToUser(
@User() user: RequestUser,
@Body() body: AssignRoleToUserReq,
@@ -223,7 +223,7 @@ export class UsersController {
}
@Patch(':id')
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
@ApiOkResponse({ type: UpdateUserRes })
async updateUser(
@User() user: RequestUser,
+1
View File
@@ -17,5 +17,6 @@ const client = new DucClient();
],
controllers: [UsersController],
providers: [UsersService, DadosferaLogger],
exports: [UsersService],
})
export class UsersModule {}
+13 -2
View File
@@ -3,7 +3,10 @@ import { ClientGrpc } from '@nestjs/microservices';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
import { ProtoServices } from '@dadosfera/protospack-v2/dist/lib/Duc';
import { UsersProtoService } from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/write-service';
import {
CustomersProtoService,
UsersProtoService,
} from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/write-service';
import {
AssignRoleToUserRequest,
IdRequest,
@@ -31,6 +34,7 @@ export class UsersService implements OnModuleInit {
language: LanguageEnum = LanguageEnum.ptbr;
private usersClientService: UsersProtoService;
private customersClientService: CustomersProtoService;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@@ -41,9 +45,12 @@ export class UsersService implements OnModuleInit {
}
onModuleInit() {
this.usersClientService = this.grpcClient.getService<UsersProtoService>(
this.usersClientService = this.grpcClient.getService(
ProtoServices.UsersProtoService,
);
this.customersClientService = this.grpcClient.getService(
ProtoServices.CustomersProtoService,
);
}
setLanguage(l: LanguageEnum = LanguageEnum.ptbr) {
@@ -200,4 +207,8 @@ export class UsersService implements OnModuleInit {
};
});
}
async findaAllCustomers() {
return await lastValueFrom(this.customersClientService.CustomerFindAll({}));
}
}
+1 -1
View File
File diff suppressed because one or more lines are too long