Compare commits

...
7 Commits
Author SHA1 Message Date
Gabriel Amorim 08e66eeb1e Merge pull request #132 from dadosfera/fix/connections-migration
Fix: connections migration
2022-09-12 15:28:45 -03:00
Gabriel Rosa cf3fd90787 FIX: network_config migration 2022-09-12 15:27:54 -03:00
Gabriel Rosa bb1decb08f FIX: typo on dadosfera:connections-migration fixed 2022-09-12 13:01:54 -03:00
Gabriel Rosa 642cb0e70b FIX: connections migration 2022-09-12 13:01:11 -03:00
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
25 changed files with 391 additions and 128 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.2",
"@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.2",
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com:443/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.17.2.tgz",
"integrity": "sha512-N1hn7lIBWgc4JPEAdlQ3jt+++y61XYb9amDmgOUbfSt4803oSdAnCktrcxq3/0e/ZuSYm0qESOkKn0uNLDlGcg==",
"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.2",
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com:443/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.17.2.tgz",
"integrity": "sha512-N1hn7lIBWgc4JPEAdlQ3jt+++y61XYb9amDmgOUbfSt4803oSdAnCktrcxq3/0e/ZuSYm0qESOkKn0uNLDlGcg==",
"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.2",
"@grpc/grpc-js": "^1.6.7",
"@grpc/proto-loader": "^0.6.13",
"@nestjs/common": "^8.4.7",
+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-migration',
usage: PermissionUsages.INTERNAL,
name: {
'pt-br': 'connections-migration',
'en-us': 'connections-migration',
'es-es': 'connections-migration',
},
},
},
},
};
// 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 {
+181 -2
View File
@@ -8,13 +8,24 @@ import { ClientGrpc } from '@nestjs/microservices';
import { ConnectionManager } from '@dadosfera/protospack-v2';
import { lastValueFrom } from 'rxjs';
import {
ConnectionApiConnection,
ConnectionRes,
ConnectionsRes,
ConnectionToCatalogDto,
CreateConnectionDto,
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';
import { UsersService } from '../users/users.service';
import { ConnectorClientService } from '../connector/client.service';
import {
ConnectionsApiNetworkConfig,
NetworkConfigDto,
} from '../network-config/dto/network-config';
export class ConnectionClientService implements OnModuleInit {
private connectionServiceRead: ConnectionManager.ReadService.ConnectionManagerReadServices;
@@ -22,6 +33,8 @@ export class ConnectionClientService implements OnModuleInit {
constructor(
@Inject(ConnectionClientConfiguration.name)
private readonly grpcClient: ClientGrpc,
private usersService: UsersService,
private connectorService: ConnectorClientService,
) {}
onModuleInit() {
@@ -119,7 +132,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 +163,170 @@ export class ConnectionClientService implements OnModuleInit {
);
});
}
async INTERNAL_getAllConnections({
customer_name,
}: {
customer_name: string;
}): Promise<INTERNAL_GetAllConnectionsResponse> {
return lastValueFrom(
this.connectionServiceRead.INTERNAL_GetAllConnections({ customer_name }),
);
}
async catalogExistingConnection(data: {
connection?: ConnectionToCatalogDto;
networkConfig?: NetworkConfigDto;
}) {
return lastValueFrom(
this.connectionServiceRead.INTERNAL_CatalogExistingConnection({
data_str: JSON.stringify(data),
}),
);
}
async synchronizeConnections(apply: boolean) {
const connectors = await this.connectorService
.getAllConnectors({
search: undefined,
filters: undefined,
language: 'pt-br',
page: 1,
size: 500,
})
.then(({ connectors: connectorsStr }) =>
JSON.parse(connectorsStr).map((c) => c),
);
const { customers } = await this.usersService.findAllCustomers();
const promises: Promise<{
customer_name: string;
customer_id: string;
productConnections: Record<string, any>[];
platformConnections: ConnectionApiConnection[];
productNetworkConfigs: Record<string, any>[];
platformNetworkConfigs: ConnectionsApiNetworkConfig[];
}>[] = [];
customers.forEach((c) => {
const customer_name = c.name;
const customer_id = c.id;
promises.push(
this.INTERNAL_getAllConnections({ customer_name }).then((res) => ({
customer_name,
customer_id,
platformConnections: JSON.parse(res.platformConnections),
productConnections: JSON.parse(res.productConnections),
productNetworkConfigs: JSON.parse(res.productNetworkConfigs),
platformNetworkConfigs: JSON.parse(res.platformNetworkConfigs),
})),
);
});
const customer_connections = await Promise.all(promises);
const productConnectionsMissing: ConnectionApiConnection[] = [];
const productNetworkConfigsMissing: ConnectionsApiNetworkConfig[] = [];
const migrations = customer_connections.map((cc) => {
const {
customer_name,
productConnections,
platformConnections,
productNetworkConfigs,
platformNetworkConfigs,
customer_id,
} = cc;
platformConnections.forEach((plc) => {
const productConnection = productConnections.find(
(prc) => prc.id === plc.config_id,
);
if (!productConnection) productConnectionsMissing.push(plc);
});
platformNetworkConfigs.forEach((platNetConfig) => {
const productNetworkConfig = productNetworkConfigs.find(
(prodNetConfig) => prodNetConfig.id === platNetConfig.config_id,
);
if (!productNetworkConfig)
productNetworkConfigsMissing.push(platNetConfig);
});
const updatePromises: Promise<any>[] = [];
for (const network_config of productNetworkConfigsMissing) {
const networkConfigToCatalog = {
id: network_config.config_id,
created_at: network_config.created_at,
updated_at: network_config.updated_at,
customer_name: cc.customer_name,
customer_id: cc.customer_id,
user_id: '',
network_type_id: '',
network_type_name: network_config.type,
type: network_config.type,
plugin: network_config.plugin,
name: network_config.name,
description: network_config.description,
properties: undefined,
keywords: undefined,
tags: undefined,
};
if (apply) {
updatePromises.push(
this.catalogExistingConnection({
networkConfig: networkConfigToCatalog,
}),
);
}
}
for (const connection of productConnectionsMissing) {
const connector = connectors.find(
(c) => c._source.plugin === connection.plugin,
);
const connectionToCatalog = {
id: connection.config_id,
created_at: connection.created_at,
updated_at: new Date().toISOString(),
customer_id: customer_id,
user_id: '',
plugin: connection.plugin,
name: connection.name,
description: connection.description,
image_url: connector._source.image,
network_config_id: connection.network_config_id,
type: connection.type,
connector_id: connector._id,
connector_name: connector._source.name,
in_use: 1,
username: 'auto',
customer_name: customer_name,
};
if (apply) {
updatePromises.push(
this.catalogExistingConnection({ connection: connectionToCatalog }),
);
}
}
return {
customer: { ...cc },
updatePromises,
productConnectionsMissing,
productNetworkConfigsMissing,
};
});
const customersStatus: any[] = [];
for (const migration of migrations) {
let status: any[] = [];
if (apply) {
status = await Promise.all(migration.updatePromises);
}
customersStatus.push({
customer: migration.customer.customer_name,
status,
productConnectionsMissing: migration.productConnectionsMissing,
productNetworkConfigsMissing: migration.productNetworkConfigsMissing,
});
}
return { customersStatus };
}
}
@@ -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()
@@ -43,8 +44,14 @@ export class ConnectionController {
this.logger = dadosferaLogger.logger;
}
@Get('connections-migration')
@RequireAllPermissions(PERMISSIONS_GROUPS.DADOSFERA.permissions.ADMIN)
async synchronizeConnections(@Query('apply') apply: string) {
return this.clientService.synchronizeConnections(apply === 'true');
}
@Post()
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
@RequireAllPermissions(connectionPermissions.CREATE)
async createConnection(
@User() user: RequestUser,
@Body(new ValidationPipe()) body: CreateConnectionDto,
@@ -68,7 +75,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 +104,7 @@ export class ConnectionController {
}
@Delete('/:id')
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
@RequireAllPermissions(connectionPermissions.DELETE)
async deleteConnection(
@User() user: RequestUser,
@Param('id') id: string,
@@ -121,8 +128,7 @@ export class ConnectionController {
}
@Get()
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
async getAllConnection(
async getAllConnections(
@User() user: RequestUser,
@Headers('Dadosfera-Lang') language,
@Query() queries,
@@ -140,7 +146,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 +155,6 @@ export class ConnectionController {
}
@Get('/:id')
// @RequireAllPermissions(Permissions.CONNECTIONS.CREATE)
async getConnectionDetails(
@Headers('Dadosfera-Lang') language,
@User() user: RequestUser,
+7 -1
View File
@@ -4,13 +4,19 @@ import { ConnectionClientService } from './client.service';
import { ConnectionClientConfiguration } from './client.config';
import { ConnectionController } from './connection.controller';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
import { UsersModule } from '../users/users.module';
import { ConnectorModule } from '../connector/connector.module';
const client = new ConnectionClientConfiguration();
@Module({
imports: [
ClientsModule.register([client.providerOptions]),
UsersModule,
ConnectorModule,
],
controllers: [ConnectionController],
providers: [ConnectionClientService, DadosferaLogger],
imports: [ClientsModule.register([client.providerOptions])],
exports: [ConnectionClientService],
})
export class ConnectionModule {}
+29 -11
View File
@@ -13,7 +13,30 @@ import {
GetConnectionDetailsResponse,
GetConnectionResponse,
} from '@dadosfera/protospack-v2/dist/lib/ConnectionManager/interfaces/messages';
export type ConnectionTypes = 'database' | 'file' | 'application';
export type ConnectionCredentialsType =
| 'basic_auth'
| 'iam_user'
| 'role_name'
| 'oauth'
| 'api_key'
| 'service_account'
| 'headers_authF';
export interface ConnectionApiConnection {
config_id: string;
plugin: string;
secret_id: string;
created_at: string;
network_config_id: null;
type: ConnectionTypes;
credentials_type: ConnectionCredentialsType;
credentials: Record<string, any>;
sensitive_fields: string[];
name: string;
customer_name: string;
description: string;
updated_at: string;
}
export class ConnectionDto implements Connection {
// ---Automatically generated information will not be sent by the frontend--- //
@ApiProperty()
@@ -70,21 +93,17 @@ export class ConnectionDto implements Connection {
}
export class ConnectionToCatalogDto implements ConnectionToCatalog {
// ---Automatically generated information will not be sent by the frontend--- //
@ApiProperty()
// ---Automatically generated information - will not be sent by the frontend--- //
id: string;
@ApiProperty()
customer_id: string;
@ApiProperty()
updated_at: string;
@ApiProperty()
created_at: string;
// ---Information extracted from token--- //
user_id: string;
username: string;
customer_name: string;
// ---Information sent by the frontend--- //
@ApiProperty()
name: string;
@@ -98,7 +117,6 @@ export class ConnectionToCatalogDto implements ConnectionToCatalog {
network_config_id: string | null;
// ---Information sent by the frontend (Heirs of Connector)--- //
@ApiProperty()
connector_id: string;
+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)
);
}
})
@@ -2,7 +2,12 @@ import {
NetworkConfigEntity,
NetworkConfigToCatalog,
} from '@dadosfera/protospack-v2/dist/lib/NetworkConfig/interfaces/entities';
import { ApiProperty, ApiPropertyOptional, PickType } from '@nestjs/swagger';
import {
ApiProperty,
ApiPropertyOptional,
OmitType,
PickType,
} from '@nestjs/swagger';
export enum NetworkConfigTypesEnum {
vpn = 'vpn',
@@ -10,6 +15,24 @@ export enum NetworkConfigTypesEnum {
export enum NetworkConfigPluginsEnum {
openvpn = 'openvpn',
}
export interface ConnectionsApiNetworkConfig {
config_id: string;
created_at: string;
credentials: {
CERTIFICATE_FILE: string;
OVPN_CREDENTIALS: string;
TLS_AUTH_FILE: string;
OVPN_FILE: string;
};
customer_name: string;
description: string;
name: string;
plugin: string;
secret_id: string;
sensitive_fields: string[];
type: string;
updated_at: string;
}
export class NetworkConfigDto implements NetworkConfigEntity {
@ApiProperty()
id: string;
@@ -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 findAllCustomers() {
return await lastValueFrom(this.customersClientService.CustomerFindAll({}));
}
}
+1 -1
View File
File diff suppressed because one or more lines are too long