fix idp on started

This commit is contained in:
lendry
2026-06-24 17:34:55 +03:00
parent e60d55f6bd
commit b6987f4aea
10 changed files with 556 additions and 225 deletions

View File

@@ -41,6 +41,20 @@ export class SettingsService {
}
async upsert(command: UpsertSettingCommand) {
const trimmedValue = command.value?.trim() ?? '';
if (command.isSecret && trimmedValue === '') {
const existing = await this.prisma.systemSetting.findUnique({ where: { key: command.key } });
if (existing) {
return this.prisma.systemSetting.update({
where: { key: command.key },
data: {
description: command.description,
isSecret: command.isSecret ?? existing.isSecret
}
});
}
}
return this.prisma.systemSetting.upsert({
where: { key: command.key },
create: {

View File

@@ -40,22 +40,36 @@ export class MessagingService {
private async sendEmailCode(payload: VerificationPayload) {
const enabled = await this.settings.getBoolean('EMAIL_ENABLED', false);
const provider = (await this.settings.getValue('EMAIL_PROVIDER', 'smtp')).trim().toLowerCase();
const host = (await this.settings.getValue('EMAIL_SMTP_HOST', '')).trim();
const fromAddress = (await this.settings.getValue('EMAIL_FROM_ADDRESS', '')).trim();
const smtpConfigured = Boolean(host && fromAddress);
if (!enabled || provider === 'console') {
this.logConsoleFallback('email', payload);
if (provider === 'console') {
this.logConsoleFallback('email', payload, 'выбран режим «Только лог» (EMAIL_PROVIDER=console)');
return;
}
if (!enabled && !smtpConfigured) {
this.logConsoleFallback(
'email',
payload,
'EMAIL_ENABLED=false — включите Email в админке и нажмите «Сохранить»'
);
return;
}
if (!enabled && smtpConfigured) {
this.logger.warn('[EMAIL] EMAIL_ENABLED=false, но SMTP заполнен — отправляем письмо');
}
if (provider !== 'smtp') {
throw new BadRequestException(`Неизвестный email-провайдер: ${provider}`);
}
const host = (await this.settings.getValue('EMAIL_SMTP_HOST', '')).trim();
const port = await this.settings.getNumber('EMAIL_SMTP_PORT', 587);
const secure = await this.settings.getBoolean('EMAIL_SMTP_SECURE', false);
const user = (await this.settings.getValue('EMAIL_SMTP_USER', '')).trim();
const password = await this.settings.getValue('EMAIL_SMTP_PASSWORD', '');
const fromAddress = (await this.settings.getValue('EMAIL_FROM_ADDRESS', '')).trim();
const fromName = (await this.settings.getValue('EMAIL_FROM_NAME', '')).trim();
const projectName = await this.settings.getValue('PROJECT_NAME', 'MVK ID');
@@ -96,7 +110,13 @@ export class MessagingService {
const provider = (await this.settings.getValue('SMS_PROVIDER', 'smsru')).trim().toLowerCase();
if (!enabled || provider === 'console') {
this.logConsoleFallback('sms', payload);
this.logConsoleFallback(
'sms',
payload,
!enabled
? 'SMS_ENABLED=false — включите SMS в админке и нажмите «Сохранить»'
: 'выбран режим «Только лог» (SMS_PROVIDER=console)'
);
return;
}
@@ -196,10 +216,8 @@ export class MessagingService {
`.trim();
}
private logConsoleFallback(channel: MessagingChannel, payload: VerificationPayload) {
this.logger.warn(
`[${channel.toUpperCase()}] Код для ${payload.target}: ${payload.code} (провайдер отключён — включите EMAIL_ENABLED/SMS_ENABLED в админке)`
);
private logConsoleFallback(channel: MessagingChannel, payload: VerificationPayload, reason: string) {
this.logger.warn(`[${channel.toUpperCase()}] Код для ${payload.target}: ${payload.code} (${reason})`);
}
private maskTarget(target: string, channel: MessagingChannel) {