< Summary - Estud

Information
Class: Estud.Back.Features.Identity.GetTwoFactorKey.GetTwoFactorKeyService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Identity/GetTwoFactorKey/GetTwoFactorKeyService.cs
Tag: 114_29044117136
Line coverage
100%
Covered lines: 25
Uncovered lines: 0
Coverable lines: 25
Total lines: 45
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Get()100%22100%
GenerateQrCodeBase64(...)100%11100%

File(s)

/home/runner/work/syki/syki/Back/Features/Identity/GetTwoFactorKey/GetTwoFactorKeyService.cs

#LineLine coverage
 1using QRCoder;
 2using Estud.Back.Domain.Identity;
 3
 4namespace Estud.Back.Features.Identity.GetTwoFactorKey;
 5
 346public class GetTwoFactorKeyService(EstudDbContext ctx, UserManager<EstudUser> userManager) : IEstudService
 7{
 8    public async Task<GetTwoFactorKeyOut> Get()
 9    {
 3410        var userId = ctx.RequestUser.Id;
 3411        var key = await ctx.GetUserTwoFactorKeyAsync(userId);
 3412        var user = await ctx.Users.Where(u => u.Id == userId).Select(x => new { x.Email, x.TwoFactorEnabled }).FirstOrDe
 13
 3414        if (key == null)
 15        {
 2816            var estudUser = await userManager.Users.FirstAsync(u => u.Id == ctx.RequestUser.Id);
 2817            await userManager.ResetAuthenticatorKeyAsync(estudUser);
 2818            key = await userManager.GetAuthenticatorKeyAsync(estudUser);
 2819        }
 20
 3421        return new()
 3422        {
 3423            Key = key!,
 3424            TwoFactorEnabled = user.TwoFactorEnabled,
 3425            QrCodeBase64 = GenerateQrCodeBase64(key, user.Email)
 3426        };
 3427    }
 28
 29    private static string GenerateQrCodeBase64(string key, string email)
 30    {
 31        const string provider = "Estud";
 32
 3433        using var qrGenerator = new QRCodeGenerator();
 3434        using var qrCodeData = qrGenerator.CreateQrCode(
 3435            $"otpauth://totp/{provider}:{email}?secret={key}&issuer={provider}",
 3436            QRCodeGenerator.ECCLevel.Q
 3437        );
 38
 3439        var qrCode = new PngByteQRCode(qrCodeData);
 40
 3441        var bytes = qrCode.GetGraphic(20);
 42
 3443        return string.Format("data:image/png;base64,{0}", Convert.ToBase64String(bytes));
 3444    }
 45}