Files
tiku-backend.net/Tiku.Infrastructure/Auth/SmsLogin/SmsLoginService.cs
xiong 33375a38d7
Some checks failed
ci / release-gate (push) Has been cancelled
refactor(architecture): harden module boundaries
2026-08-04 12:10:36 +08:00

69 lines
2.1 KiB
C#

using Microsoft.EntityFrameworkCore;
using Tiku.Application.Auth;
using Tiku.Domain.Tenancy;
namespace Tiku.Infrastructure.Auth;
internal sealed class SmsLoginService(AuthServiceDependencies dependencies)
: AuthServiceBase(dependencies), ISmsLoginService
{
public async Task<AuthenticationResult> LoginWithSmsAsync(
SmsLoginRequest request,
CancellationToken cancellationToken = default)
{
var phone = SmsCodeHashing.NormalizePhone(request.Phone);
var user = await identityPersistence.Users
.SingleOrDefaultAsync(entity => entity.Phone == phone, cancellationToken);
try
{
if (!request.TenantId.HasValue) throw new InvalidCredentialsException("tenant_required_for_sms");
await smsVerificationService.VerifyCodeAsync(
request.TenantId.Value,
phone,
SmsPurpose.Login,
request.Code,
cancellationToken);
}
catch (InvalidCredentialsException exception)
{
await AddLoginEventAsync(
request.TenantId,
user?.Id,
SmsProvider,
phone,
AuthLoginResult.Failed,
exception.Code,
request.IpAddress,
request.UserAgent,
cancellationToken);
throw;
}
if (user is null)
{
await AddLoginEventAsync(
request.TenantId,
null,
SmsProvider,
phone,
AuthLoginResult.Failed,
"user_not_found",
request.IpAddress,
request.UserAgent,
cancellationToken);
throw new InvalidCredentialsException();
}
return await CompleteSuccessfulLoginAsync(
request.Realm,
request.TenantId,
user,
SmsProvider,
phone,
request.IpAddress,
request.UserAgent,
cancellationToken);
}
}