Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ export const customAgentRepositoryExtension = {
return 'MONGODB-TEST-AGENT-TOKEN';
case ConnectionTypeTestEnum.elasticsearch:
return 'ELASTICSEARCH-TEST-AGENT-TOKEN';
case ConnectionTypeTestEnum.agent_cassandra:
return 'CASSANDRA-TEST-AGENT-TOKEN';
}
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export class CreateConnectionDs {
cert: string;
azure_encryption: boolean;
authSource: string;
dataCenter: string;
};
creation_info: {
authorId: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ export class FoundDirectConnectionsDs {
@ApiProperty({ required: false })
authSource?: string;

@ApiProperty({ required: false })
dataCenter?: string;

@ApiProperty()
isTestConnection: boolean;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export class UpdateConnectionDs {
cert: string;
azure_encryption: boolean;
authSource: string;
dataCenter: string;
};
update_info: {
authorId: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,9 @@ export class CreateConnectionDto {
@IsString()
@ApiProperty({ required: false })
authSource?: string;

@IsOptional()
@IsString()
@ApiProperty({ required: false })
dataCenter?: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ export class CreatedConnectionDTO {
@ApiProperty()
authSource: string;

@ApiProperty()
dataCenter: string | null;

@ApiProperty()
master_hash: string;

Expand Down
4 changes: 4 additions & 0 deletions backend/src/entities/connection/connection.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ export class ConnectionController {
type: createConnectionDto.type,
username: createConnectionDto.username,
authSource: createConnectionDto.authSource,
dataCenter: createConnectionDto.dataCenter,
},
creation_info: {
authorId: userId,
Expand Down Expand Up @@ -324,6 +325,7 @@ export class ConnectionController {
type: updateConnectionDto.type,
username: updateConnectionDto.username,
authSource: updateConnectionDto.authSource,
dataCenter: updateConnectionDto.dataCenter,
},
update_info: {
authorId: userId,
Expand Down Expand Up @@ -531,6 +533,7 @@ export class ConnectionController {
type: testConnectionData.type,
username: testConnectionData.username,
authSource: testConnectionData.authSource,
dataCenter: testConnectionData.dataCenter,
},
update_info: {
authorId: userId,
Expand Down Expand Up @@ -618,6 +621,7 @@ export class ConnectionController {
cert: restoreConnectionData.cert,
azure_encryption: restoreConnectionData.azure_encryption,
authSource: restoreConnectionData.authSource,
dataCenter: restoreConnectionData.dataCenter,
},
update_info: {
connectionId: connectionId,
Expand Down
3 changes: 3 additions & 0 deletions backend/src/entities/connection/connection.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,9 @@ export class ConnectionEntity {
@Column({ default: null })
authSource?: string | null;

@Column({ default: null })
dataCenter?: string | null;

@Column({ default: null })
master_hash?: string | null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export async function buildConnectionEntity(
type,
password,
authSource,
dataCenter,
},
creation_info: { masterPwd },
} = createConnectionData;
Expand All @@ -54,6 +55,7 @@ export async function buildConnectionEntity(
connection.cert = cert;
connection.schema = schema;
connection.authSource = authSource;
connection.dataCenter = dataCenter;

if (connection.masterEncryption && masterPwd && !isConnectionTypeAgent(connection.type)) {
connection = Encryptor.encryptConnectionCredentials(connection, masterPwd);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export function buildCreatedConnectionDs(
updatedAt: connection.updatedAt,
username: connection.username,
authSource: connection.authSource,
dataCenter: connection.dataCenter,
master_hash: connection.master_hash,
isFrozen: connection.is_frozen,
groups: connection.groups?.map((group) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,6 @@ export function buildFoundConnectionDs(
connection_properties: connection.connection_properties,
isFrozen: connection.is_frozen,
authSource: connection.authSource ? connection.authSource : undefined,
dataCenter: connection.dataCenter ? connection.dataCenter : undefined,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ export class TableSettingsController {
HttpStatus.BAD_REQUEST,
);
}
return await this.createTableSettingsUseCase.execute(inputData, InTransactionEnum.ON);
return await this.createTableSettingsUseCase.execute(inputData, InTransactionEnum.OFF);
}

@ApiOperation({ summary: 'Update table settings' })
Expand Down
44 changes: 22 additions & 22 deletions backend/src/entities/table/use-cases/get-table-rows.use.case.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,32 @@
import { BadRequestException, HttpException, HttpStatus, Inject, Injectable } from '@nestjs/common';
import { getDataAccessObject } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/create-data-access-object.js';
import { ForeignKeyWithAutocompleteColumnsDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/foreign-key-with-autocomplete-columns.ds.js';
import { ForeignKeyDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/foreign-key.ds.js';
import { TableSettingsDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/table-settings.ds.js';
import { IDataAccessObjectAgent } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/interfaces/data-access-object-agent.interface.js';
import { IDataAccessObject } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/interfaces/data-access-object.interface.js';
import { FoundRowsDS } from '@rocketadmin/shared-code/src/data-access-layer/shared/data-structures/found-rows.ds.js';
import Sentry from '@sentry/minimal';
import JSON5 from 'json5';
import AbstractUseCase from '../../../common/abstract-use.case.js';
import { IGlobalDatabaseContext } from '../../../common/application/global-database-context.interface.js';
import { BaseType } from '../../../common/data-injection.tokens.js';
import { getDataAccessObject } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/create-data-access-object.js';
import {
AmplitudeEventTypeEnum,
LogOperationTypeEnum,
OperationResultStatusEnum,
WidgetTypeEnum,
} from '../../../enums/index.js';
import { ExceptionOperations } from '../../../exceptions/custom-exceptions/exception-operation.js';
import { NonAvailableInFreePlanException } from '../../../exceptions/custom-exceptions/non-available-in-free-plan-exception.js';
import { UnknownSQLException } from '../../../exceptions/custom-exceptions/unknown-sql-exception.js';
import { Messages } from '../../../exceptions/text/messages.js';
import { hexToBinary, isBinary } from '../../../helpers/binary-to-hex.js';
import { Constants } from '../../../helpers/constants/constants.js';
import { isConnectionTypeAgent, isObjectEmpty } from '../../../helpers/index.js';
import { AmplitudeService } from '../../amplitude/amplitude.service.js';
import { buildActionEventDto } from '../../table-actions/table-action-rules-module/utils/build-found-action-event-dto.util.js';
import { buildCreatedTableFilterRO } from '../../table-filters/utils/build-created-table-filters-response-object.util.js';
import { TableLogsService } from '../../table-logs/table-logs.service.js';
import { TableSettingsEntity } from '../../table-settings/table-settings.entity.js';
import { FoundTableRowsDs } from '../application/data-structures/found-table-rows.ds.js';
Expand All @@ -24,21 +37,9 @@ import { findFilteringFieldsUtil, parseFilteringFieldsFromBodyData } from '../ut
import { findOrderingFieldUtil } from '../utils/find-ordering-field.util.js';
import { formFullTableStructure } from '../utils/form-full-table-structure.js';
import { isHexString } from '../utils/is-hex-string.js';
import { IGetTableRows } from './table-use-cases.interface.js';
import { IDataAccessObjectAgent } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/interfaces/data-access-object-agent.interface.js';
import { IDataAccessObject } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/interfaces/data-access-object.interface.js';
import { ForeignKeyWithAutocompleteColumnsDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/foreign-key-with-autocomplete-columns.ds.js';
import { ForeignKeyDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/foreign-key.ds.js';
import { FoundRowsDS } from '@rocketadmin/shared-code/src/data-access-layer/shared/data-structures/found-rows.ds.js';
import { UnknownSQLException } from '../../../exceptions/custom-exceptions/unknown-sql-exception.js';
import { ExceptionOperations } from '../../../exceptions/custom-exceptions/exception-operation.js';
import Sentry from '@sentry/minimal';
import { processRowsUtil } from '../utils/process-found-rows-util.js';
import JSON5 from 'json5';
import { buildActionEventDto } from '../../table-actions/table-action-rules-module/utils/build-found-action-event-dto.util.js';
import { TableSettingsDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/table-settings.ds.js';
import { NonAvailableInFreePlanException } from '../../../exceptions/custom-exceptions/non-available-in-free-plan-exception.js';
import { buildCreatedTableFilterRO } from '../../table-filters/utils/build-created-table-filters-response-object.util.js';
import { IGetTableRows } from './table-use-cases.interface.js';
import { ConnectionTypesEnum } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/enums/connection-types-enum.js';

@Injectable()
export class GetTableRowsUseCase extends AbstractUseCase<GetTableRowsDs, FoundTableRowsDs> implements IGetTableRows {
Expand Down Expand Up @@ -111,11 +112,6 @@ export class GetTableRowsUseCase extends AbstractUseCase<GetTableRowsDs, FoundTa
? findFilteringFieldsUtil(query, tableStructure)
: parseFilteringFieldsFromBodyData(filters, tableStructure);

// if (!filteringFields.length && savedTableFilters) {
// const parsedSavedTableFilters = parseFilteringFieldsFromBodyData(savedTableFilters.filters, tableStructure);
// filteringFields.push(...parsedSavedTableFilters);
// }

const orderingField = findOrderingFieldUtil(query, tableStructure, tableSettings);

const configured = !!tableSettings;
Expand All @@ -125,7 +121,6 @@ export class GetTableRowsUseCase extends AbstractUseCase<GetTableRowsDs, FoundTa

//todo rework in daos
tableSettings = tableSettings ? tableSettings : ({} as TableSettingsEntity);

const { autocomplete, referencedColumn } = query;

const autocompleteFields =
Expand All @@ -137,7 +132,12 @@ export class GetTableRowsUseCase extends AbstractUseCase<GetTableRowsDs, FoundTa
tableSettings.ordering_field = orderingField.field;
tableSettings.ordering = orderingField.value;
}
if (isHexString(searchingFieldValue)) {
if (
isHexString(searchingFieldValue) &&
(tableStructure.some((field) => isBinary(field.data_type)) ||
connection.type === ConnectionTypesEnum.mongodb ||
connection.type === ConnectionTypesEnum.agent_mongodb)
) {
searchingFieldValue = hexToBinary(searchingFieldValue) as any;
tableSettings.search_fields = tableStructure
.filter((field) => isBinary(field.data_type))
Expand Down
2 changes: 2 additions & 0 deletions backend/src/enums/connection-type.enum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ export enum ConnectionTypeTestEnum {
mongodb = 'mongodb',
dynamodb = 'dynamodb',
elasticsearch = 'elasticsearch',
cassandra = 'cassandra',
agent_postgres = 'agent_postgres',
agent_mysql = 'agent_mysql',
agent_oracledb = 'agent_oracledb',
agent_mssql = 'agent_mssql',
agent_ibmdb2 = 'agent_ibmdb2',
agent_mongodb = 'agent_mongodb',
agent_elasticsearch = 'agent_elasticsearch',
agent_cassandra = 'agent_cassandra',
}
8 changes: 4 additions & 4 deletions backend/src/helpers/cache/cacher.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { ForeignKeyDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/foreign-key.ds.js';
import { PrimaryKeyDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/primary-key.ds.js';
import { TableStructureDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/table-structure.ds.js';
import { Knex } from 'knex';
import { LRUCache } from 'lru-cache';
import { ConnectionEntity } from '../../entities/connection/connection.entity.js';
import { Constants } from '../constants/constants.js';
import { TableStructureDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/table-structure.ds.js';
import { PrimaryKeyDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/primary-key.ds.js';
import { ForeignKeyDS } from '@rocketadmin/shared-code/dist/src/data-access-layer/shared/data-structures/foreign-key.ds.js';
import { isSaaS } from '../app/is-saas.js';
import { Constants } from '../constants/constants.js';

const knexCache = new LRUCache(Constants.DEFAULT_CONNECTION_CACHE_OPTIONS);
const tunnelCache = new LRUCache(Constants.DEFAULT_TUNNEL_CACHE_OPTIONS);
Expand Down
4 changes: 3 additions & 1 deletion backend/src/helpers/is-connection-entity-agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ export function isConnectionEntityAgent(connection: ConnectionEntity | CreateCon
ConnectionTypesEnum.agent_oracledb,
ConnectionTypesEnum.agent_mssql,
ConnectionTypesEnum.agent_ibmdb2,
ConnectionTypesEnum.agent_mongodb
ConnectionTypesEnum.agent_mongodb,
ConnectionTypeTestEnum.agent_cassandra,
];

return agentTypes.includes(connection.type as ConnectionTypesEnum);
Expand All @@ -24,6 +25,7 @@ export function isConnectionTypeAgent(type: ConnectionTypesEnum | string): boole
ConnectionTypeTestEnum.agent_mssql,
ConnectionTypeTestEnum.agent_ibmdb2,
ConnectionTypeTestEnum.agent_mongodb,
ConnectionTypeTestEnum.agent_cassandra,
];

return connectionTypes.includes(type as ConnectionTypeTestEnum);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from 'typeorm';

export class AddDataCenterInConnectionEntity1750931986538 implements MigrationInterface {
name = 'AddDataCenterInConnectionEntity1750931986538';

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "connection" ADD "dataCenter" character varying`);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "connection" DROP COLUMN "dataCenter"`);
}
}
Loading