second commit
Some checks failed
CI / main (push) Failing after 10s

This commit is contained in:
2026-04-07 17:52:18 +02:00
parent 23835e09b3
commit 23fb1ce7ad
12 changed files with 8834 additions and 27 deletions

View File

@@ -1,8 +1,14 @@
#
PORT=3002
#
KEYCLOAK_URL=http://localhost:8080
# Base URL del server
KEYCLOAK_BASE_URL=http://localhost:8080
# URL Auth derivata (concatenazione)
KEYCLOAK_URL_AUTH=${KEYCLOAK_BASE_URL}/auth
# altre configurazioni
KEYCLOAK_REALM=appweb
KEYCLOAK_CLIENT_ID=gw-negozi
KEYCLOAK_CLIENT_SECRET=Nf0WIneXN9bOleTpgrbj54ypI8AnIbd5
KEYCLOAK_CLIENT_ID=user-service
KEYCLOAK_CLIENT_SECRET=tCDsN56Y3Ii4h0SfqrT4o6SoV8fw2fe8
#

View File

@@ -0,0 +1,44 @@
import KeycloakAdminClient from '@keycloak/keycloak-admin-client';
import { Injectable, OnModuleInit, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { KeycloakConfigKeys } from '@appweb/shared';
@Injectable()
export class KeycloakService implements OnModuleInit {
private kcAdminClient: KeycloakAdminClient;
private readonly logger = new Logger(KeycloakService.name);
constructor(private readonly configService: ConfigService) {}
async onModuleInit() {
// Inizializzazione del client con i valori presi dal file .env
this.kcAdminClient = new KeycloakAdminClient({
baseUrl: this.configService.get<string>(KeycloakConfigKeys.BASE_URL),
realmName: this.configService.get<string>(KeycloakConfigKeys.REALM),
});
try {
// Autenticazione tramite Service Account
await this.kcAdminClient.auth({
grantType: 'client_credentials',
clientId: this.configService.get<string>(KeycloakConfigKeys.CLIENT_ID),
clientSecret: this.configService.get<string>(KeycloakConfigKeys.CLIENT_SECRET),
});
this.logger.log(
'Connessione a Keycloak Admin API stabilita con successo.',
);
} catch (error) {
this.logger.error("Errore durante l'autenticazione su Keycloak:", error);
}
}
// Esempio: Ottieni tutti i gruppi
async getGroups() {
return await this.kcAdminClient.groups.find();
}
// Esempio: Ottieni tutti gli utenti
async getUsers() {
return await this.kcAdminClient.users.find();
}
}

View File

@@ -0,0 +1,18 @@
import { Controller, Get, Post, Body } from '@nestjs/common';
import { AuthenticatedUser, Roles } from 'nest-keycloak-connect';
@Controller('user')
export class UserController {
@Post()
@Roles({ roles: ['shop'] }) // Solo chi ha il ruolo admin può creare
async createData(@Body() data: any, @AuthenticatedUser() user: any) {
// 'user' contiene i dati del JWT (sub, preferred_username, email)
const userId = user.sub;
const userName = user.preferred_username;
console.log(`L'utente ${userName} sta creando un record`);
// Qui chiamerai il tuo service passando userId per il database
return { message: 'Dati salvati', creatoDa: userId };
}
}