Compare commits

..
Author SHA1 Message Date
Marcos Rodrigues Silva 60214f0e57 Merge pull request #272 from dadosfera/feature/block_and_reset_users
Feature/block and reset users
2025-03-24 16:27:35 -03:00
Marcos Rodrigues Silva 1e5fe59d9c Merge pull request #271 from dadosfera/feature/new-mixpanel-properties
Add new mixpanel properties
2025-03-14 15:20:42 -03:00
Jonathan Witkosky 1a2b9617fe Add new mixpanel properties 2025-03-14 13:57:31 -03:00
Marcos Rodrigues Silva 9bc42a4af0 Merge pull request #269 from dadosfera/fix/private-route
FIX: cors list
2025-02-26 17:15:03 -03:00
Marcos Rodrigues Silva 9ae14ab04a Merge pull request #268 from dadosfera/fix/private-route
FIX: correct ip
2025-02-26 16:00:20 -03:00
Marcos Rodrigues Silva 5e8dea7255 Merge pull request #267 from dadosfera/fix/private-route
FIX: add ip range and domain list to route /open-data
2025-02-26 08:49:40 -03:00
Marcos Rodrigues Silva 80d7ac6ff9 Merge pull request #264 from dadosfera/fix/white-label
Fix/white label
2025-02-24 09:35:37 -03:00
6 changed files with 38 additions and 30 deletions
+4 -4
View File
@@ -12,7 +12,7 @@
"@aws-sdk/client-secrets-manager": "^3.414.0",
"@dadosfera/dadosfera-logs": "^1.0.0-beta.4",
"@dadosfera/protospack": "2.5.3",
"@dadosfera/protospack-v2": "3.37.0-alpha.19",
"@dadosfera/protospack-v2": "3.37.0-alpha.18",
"@grpc/grpc-js": "^1.9.3",
"@grpc/proto-loader": "^0.7.9",
"@nestjs/cli": "^9.5.0",
@@ -1397,9 +1397,9 @@
}
},
"node_modules/@dadosfera/protospack-v2": {
"version": "3.37.0-alpha.19",
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.37.0-alpha.19.tgz",
"integrity": "sha512-+F2sMJszfXRqWuN5ae+v7MqHhJyg7TgVvnuFBKUOwHvBoWCfAUnIm9XGEA/YjPpRUa1gM0nnKL8SpBFf43Q1aA==",
"version": "3.37.0-alpha.18",
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.37.0-alpha.18.tgz",
"integrity": "sha512-hhcskw1DT9jtmJcQXrFwgUnTti6ZALZM04YevJgqQNR6yS+C6040UZf3c/6vcjRm5/9h9OMiJJApzivPTBK46g==",
"license": "ISC",
"dependencies": {
"@grpc/grpc-js": "^1.9.3",
+1 -1
View File
@@ -30,7 +30,7 @@
"@aws-sdk/client-secrets-manager": "^3.414.0",
"@dadosfera/dadosfera-logs": "^1.0.0-beta.4",
"@dadosfera/protospack": "2.5.3",
"@dadosfera/protospack-v2": "3.37.0-alpha.19",
"@dadosfera/protospack-v2": "3.37.0-alpha.18",
"@grpc/grpc-js": "^1.9.3",
"@grpc/proto-loader": "^0.7.9",
"@nestjs/cli": "^9.5.0",
+7 -10
View File
@@ -43,7 +43,6 @@ import {
AuthRefreshAccessTokenRes,
AuthSignInReq,
AuthSignInRes,
BulkEditRequest,
} from './dtos/login';
import { PackTheMetadata } from 'src/utils/ PackTheMetadata';
import { AuthGuard } from '@nestjs/passport';
@@ -53,7 +52,9 @@ import jwt from 'jsonwebtoken';
import { LanguageEnum } from 'src/utils/languages.enum';
import { Language } from 'src/decorators/language.decorator';
import { ApiInternalOnlyEndpoint } from 'src/decorators/swagger.decorator';
import { Metadata } from '@grpc/grpc-js';
import { lastValueFrom } from 'rxjs';
import { UserOneResponse } from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/messages';
@ApiTags('Auth')
@ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }])
@@ -355,10 +356,9 @@ export class AuthController {
async blockUsers(
@Language() language: LanguageEnum,
@User() user: RequestUser,
@Body() body: BulkEditRequest
) {
this.logger.info('blockUsers - Starting request');
try {
const metadata = PackTheMetadata({
customer_id: user.customer_id,
@@ -372,7 +372,7 @@ export class AuthController {
}
});
const result = await this.authClient.blockUsers(body.users, metadata);
const result = await this.authClient.blockUsers(metadata);
this.logger.info('blockUsers - Success', { result });
return result;
} catch (error) {
@@ -391,7 +391,6 @@ export class AuthController {
async unblockUsers(
@Language() language: LanguageEnum,
@User() user: RequestUser,
@Body() body: BulkEditRequest
) {
this.logger.info('unblockUsers');
const metadata = PackTheMetadata({
@@ -399,7 +398,7 @@ export class AuthController {
language,
});
return this.authClient.unblockUsers(body.users, metadata);
return this.authClient.unblockUsers(metadata);
}
@ApiInternalOnlyEndpoint()
@@ -409,15 +408,13 @@ export class AuthController {
async resetUsers(
@Language() language: LanguageEnum,
@User() user: RequestUser,
@Body() body: BulkEditRequest
) {
this.logger.info('resetUsers');
const metadata = PackTheMetadata({
access_token: user.access_token,
customer_id: user.customer_id,
language,
});
return this.authClient.resetUsers(body.users, metadata);
return this.authClient.resetUsers( metadata);
}
}
+9 -9
View File
@@ -20,7 +20,7 @@ import {
} from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/messages';
import { DucClient } from '../duc/client.config';
import { Metadata } from '@grpc/grpc-js';
import { BulkEditResponse } from './dtos/login';
import { UserActionRequest, UserActionResponse } from './dtos/login';
@Injectable()
export class AuthClientService implements OnModuleInit {
@@ -170,7 +170,7 @@ export class AuthClientService implements OnModuleInit {
);
}
async blockUsers(users: string[],metadata: Metadata): Promise<BulkEditResponse> {
async blockUsers(metadata: Metadata): Promise<UserActionResponse> {
this.logger.info('blockUsers - Service starting');
try {
@@ -181,8 +181,8 @@ export class AuthClientService implements OnModuleInit {
}
});
const response = await lastValueFrom<BulkEditResponse>(
this.authService.BlockUser({ users }, metadata),
const response = await lastValueFrom<UserActionResponse>(
this.authService.BlockUser({}, metadata),
);
this.logger.info('blockUsers - Service success', { response });
@@ -196,14 +196,14 @@ export class AuthClientService implements OnModuleInit {
}
}
async unblockUsers(users: string[],metadata: Metadata): Promise<BulkEditResponse> {
async unblockUsers(metadata: Metadata): Promise<UserActionResponse> {
this.logger.info('unblockUsers');
return await lastValueFrom(
this.authService.UnblockUser({ users }, metadata),
this.authService.UnblockUser({}, metadata),
);
}
async resetUsers(users: string[], metadata: Metadata): Promise<BulkEditResponse> {
async resetUsers(metadata: Metadata): Promise<UserActionResponse> {
this.logger.info('resetUsers');
try {
@@ -214,8 +214,8 @@ export class AuthClientService implements OnModuleInit {
}
});
const response = await lastValueFrom<BulkEditResponse>(
this.authService.ResetUser({ users }, metadata)
const response = await lastValueFrom<UserActionResponse>(
this.authService.ResetUser({}, metadata)
);
this.logger.info('resetUsers - Success', { response });
+6 -3
View File
@@ -129,11 +129,14 @@ export class AuthRefreshAccessTokenRes {
accessToken: string;
}
export interface BulkEditRequest {
users: string[];
export interface UserActionRequest {
users: {
userIds: string[];
};
defaultPassword?: string;
}
export interface BulkEditResponse {
export interface UserActionResponse {
message: string;
successfulUsers: string[];
failedUsers: string[];
+11 -3
View File
@@ -1,4 +1,4 @@
import { Body, Controller, Inject, Param, Post } from '@nestjs/common';
import { Body, Controller, Inject, Param, Post, Req } from '@nestjs/common';
import { init } from 'mixpanel';
import { Authenticated } from 'src/decorators/authentication.decorator';
import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator';
@@ -13,7 +13,12 @@ export class MixpanelController {
private readonly mixpanelToken: string,
) {}
@Post(':id')
async trackEvent(@Param('id') id, @Body() body, @User() user: RequestUser) {
async trackEvent(
@Param('id') id,
@Body() body,
@User() user: RequestUser,
@Req() request
) {
delete body.info;
const mixpanel = init(this.mixpanelToken);
@@ -66,13 +71,16 @@ export class MixpanelController {
$email: user.username.includes('@')
? user.username
: user.username + '@dadosfera.ai',
customer_name: user.customer_name,
customer_name: user.customer_name
});
await mixpanel.track(id, {
distinct_id: user.username,
customer: user.customer_name,
env: process.env.ENV,
$ip: request.ip,
$os: request.headers['sec-ch-ua-platform'] || '',
$browser: request.headers['user-agent'],
...body,
});