fase(9): auth module with casl rbac and session management
This commit is contained in:
41
dist/modules/auth/application/commands/CreateApiKeyCommand.js
vendored
Normal file
41
dist/modules/auth/application/commands/CreateApiKeyCommand.js
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.CreateApiKeyCommand = void 0;
|
||||
const Result_1 = require("../../../../shared/domain/Result");
|
||||
const ApiKey_1 = require("../../domain/entities/ApiKey");
|
||||
const crypto_1 = require("crypto");
|
||||
class CreateApiKeyCommand {
|
||||
constructor(apiKeyRepository, userRepository) {
|
||||
this.apiKeyRepository = apiKeyRepository;
|
||||
this.userRepository = userRepository;
|
||||
}
|
||||
async execute(request) {
|
||||
const user = await this.userRepository.findById(request.userId);
|
||||
if (!user) {
|
||||
return (0, Result_1.Err)('User not found');
|
||||
}
|
||||
if (!request.name.trim()) {
|
||||
return (0, Result_1.Err)('API key name is required');
|
||||
}
|
||||
const rawKey = `abe_${(0, crypto_1.randomBytes)(32).toString('hex')}`;
|
||||
const keyHash = (0, crypto_1.createHash)('sha256').update(rawKey).digest('hex');
|
||||
const keyPrefix = rawKey.substring(0, 12);
|
||||
const apiKey = ApiKey_1.ApiKey.create({
|
||||
userId: request.userId,
|
||||
orgId: request.orgId,
|
||||
name: request.name.trim(),
|
||||
keyHash,
|
||||
keyPrefix,
|
||||
permissions: request.permissions ?? ['member'],
|
||||
expiresAt: request.expiresAt,
|
||||
});
|
||||
await this.apiKeyRepository.save(apiKey);
|
||||
return (0, Result_1.Ok)({
|
||||
id: apiKey.id.toString(),
|
||||
key: rawKey,
|
||||
keyPrefix,
|
||||
name: apiKey.name,
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.CreateApiKeyCommand = CreateApiKeyCommand;
|
||||
Reference in New Issue
Block a user