Fix login code delivery mode
This commit is contained in:
@@ -14,3 +14,4 @@ SMTP_SECURE=false
|
|||||||
SMTP_USER=
|
SMTP_USER=
|
||||||
SMTP_PASS=
|
SMTP_PASS=
|
||||||
SMTP_FROM=
|
SMTP_FROM=
|
||||||
|
AUTH_LOGIN_CODE_DELIVERY=email
|
||||||
|
|||||||
@@ -30,6 +30,16 @@ import { fetchTelegramConnectionProfile } from './telegram.js';
|
|||||||
|
|
||||||
const ACTIVE_ORDER_STATUSES = ['NEW', 'MANAGER_PROCESSING', 'WAITING_DOUBLE_CONFIRM', 'CONFIRMED', 'IN_PROGRESS'];
|
const ACTIVE_ORDER_STATUSES = ['NEW', 'MANAGER_PROCESSING', 'WAITING_DOUBLE_CONFIRM', 'CONFIRMED', 'IN_PROGRESS'];
|
||||||
|
|
||||||
|
function getLoginCodeDeliveryMode() {
|
||||||
|
const mode = String(process.env.AUTH_LOGIN_CODE_DELIVERY ?? 'email')
|
||||||
|
.trim()
|
||||||
|
.toLowerCase();
|
||||||
|
if (mode !== 'email' && mode !== 'static') {
|
||||||
|
throw new Error('AUTH_LOGIN_CODE_DELIVERY must be either "email" or "static".');
|
||||||
|
}
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
|
||||||
function toFloat(value) {
|
function toFloat(value) {
|
||||||
return value == null ? null : Number(value);
|
return value == null ? null : Number(value);
|
||||||
}
|
}
|
||||||
@@ -320,20 +330,6 @@ function invitationToken() {
|
|||||||
return crypto.randomBytes(24).toString('hex');
|
return crypto.randomBytes(24).toString('hex');
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildDefaultFullName(email) {
|
|
||||||
const localPart = email.split('@')[0]?.trim();
|
|
||||||
if (!localPart) {
|
|
||||||
return 'Новый пользователь';
|
|
||||||
}
|
|
||||||
|
|
||||||
return localPart
|
|
||||||
.replace(/[._-]+/g, ' ')
|
|
||||||
.split(' ')
|
|
||||||
.filter(Boolean)
|
|
||||||
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
||||||
.join(' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
function normalizeText(value) {
|
function normalizeText(value) {
|
||||||
return String(value ?? '').trim();
|
return String(value ?? '').trim();
|
||||||
}
|
}
|
||||||
@@ -1435,19 +1431,24 @@ export const resolvers = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
if (!user) {
|
||||||
|
throw new Error('User is not invited to the cabinet.');
|
||||||
|
}
|
||||||
|
|
||||||
const challenge = createLoginChallenge({
|
const challenge = createLoginChallenge({
|
||||||
userId: user?.id ?? null,
|
userId: user.id,
|
||||||
channel: input.channel,
|
channel: input.channel,
|
||||||
destination,
|
destination,
|
||||||
});
|
});
|
||||||
|
|
||||||
const code = getStaticAuthCode();
|
const code = getStaticAuthCode();
|
||||||
await sendLoginCodeEmail({
|
if (getLoginCodeDeliveryMode() === 'email') {
|
||||||
to: destination,
|
await sendLoginCodeEmail({
|
||||||
code,
|
to: destination,
|
||||||
expiresAt: challenge.expiresAt,
|
code,
|
||||||
});
|
expiresAt: challenge.expiresAt,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
challengeToken: challenge.challengeToken,
|
challengeToken: challenge.challengeToken,
|
||||||
@@ -1463,24 +1464,9 @@ export const resolvers = {
|
|||||||
code: input.code,
|
code: input.code,
|
||||||
});
|
});
|
||||||
|
|
||||||
let user = challenge.userId
|
const user = await context.prisma.user.findUnique({
|
||||||
? await context.prisma.user.findUnique({
|
where: { id: challenge.userId },
|
||||||
where: { id: challenge.userId },
|
});
|
||||||
})
|
|
||||||
: null;
|
|
||||||
|
|
||||||
if (!user && challenge.channel === 'EMAIL') {
|
|
||||||
const email = String(challenge.destination).trim().toLowerCase();
|
|
||||||
user = await context.prisma.user.upsert({
|
|
||||||
where: { email },
|
|
||||||
update: {},
|
|
||||||
create: {
|
|
||||||
email,
|
|
||||||
fullName: buildDefaultFullName(email),
|
|
||||||
role: 'CLIENT',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
throw new Error('User is not available for this login challenge.');
|
throw new Error('User is not available for this login challenge.');
|
||||||
|
|||||||
Reference in New Issue
Block a user