< Summary - Syki

Information
Class: Syki.Back.Features.Identity.GetTwoFactorKey.GetTwoFactorKeyService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Identity/GetTwoFactorKey/GetTwoFactorKeyService.cs
Tag: 56_26538939494
Line coverage
100%
Covered lines: 22
Uncovered lines: 0
Coverable lines: 22
Total lines: 44
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 Syki.Back.Domain.Identity;
 3
 4namespace Syki.Back.Features.Identity.GetTwoFactorKey;
 5
 346public class GetTwoFactorKeyService(SykiDbContext ctx, UserManager<SykiUser> userManager) : ISykiService
 7{
 8    public async Task<GetTwoFactorKeyOut> Get()
 9    {
 3410        var webUser = await userManager.Users.FirstAsync(u => u.Id == ctx.RequestUser.Id);
 11
 3412        var key = await userManager.GetAuthenticatorKeyAsync(webUser);
 13
 3414        if (key == null)
 15        {
 2816            await userManager.ResetAuthenticatorKeyAsync(webUser);
 2817            key = await userManager.GetAuthenticatorKeyAsync(webUser);
 18        }
 19
 3420        return new()
 3421        {
 3422            Key = key!,
 3423            TwoFactorEnabled = webUser.TwoFactorEnabled,
 3424            QrCodeBase64 = GenerateQrCodeBase64(key, webUser.Email)
 3425        };
 3426    }
 27
 28    private static string GenerateQrCodeBase64(string key, string email)
 29    {
 30        const string provider = "Exato";
 31
 3432        using var qrGenerator = new QRCodeGenerator();
 3433        using var qrCodeData = qrGenerator.CreateQrCode(
 3434            $"otpauth://totp/{provider}:{email}?secret={key}&issuer={provider}",
 3435            QRCodeGenerator.ECCLevel.Q
 3436        );
 37
 3438        var qrCode = new PngByteQRCode(qrCodeData);
 39
 3440        var bytes = qrCode.GetGraphic(20);
 41
 3442        return string.Format("data:image/png;base64,{0}", Convert.ToBase64String(bytes));
 3443    }
 44}