< Summary - Estud

Information
Class: Estud.Back.Features.Cross.SignIn.SignInService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Identity/SignIn/SignInService.cs
Tag: 114_29044117136
Line coverage
100%
Covered lines: 40
Uncovered lines: 0
Coverable lines: 40
Total lines: 60
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
SignIn()100%11100%

File(s)

/home/runner/work/syki/syki/Back/Features/Identity/SignIn/SignInService.cs

#LineLine coverage
 1using System.Text;
 2using Estud.Back.Auth.Claims;
 3using System.Security.Claims;
 4using Microsoft.IdentityModel.Tokens;
 5using System.IdentityModel.Tokens.Jwt;
 6using Estud.Back.Features.Identity.SignIn;
 7
 8namespace Estud.Back.Features.Cross.SignIn;
 9
 94610public class SignInService(
 94611    EstudDbContext ctx,
 94612    AuthSettings settings,
 94613    IHttpContextAccessor httpCtx) : IEstudService
 14{
 15    public async Task<SignInOut> SignIn(string email)
 16    {
 85417        var user = await ctx.Users.Where(u => u.Email == email).Select(x => new { x.Id, x.InstitutionId }).FirstAsync();
 85418        var role = await ctx.GetUserRole(user.Id, user.InstitutionId);
 85419        var permissions = role.Permissions.Serialize();
 20
 85421        var claims = new List<Claim>
 85422        {
 85423            new(EstudClaims.UserId, user.Id.ToString()),
 85424            new(EstudClaims.UserPermissions, permissions),
 85425            new(EstudClaims.Jti, Guid.NewGuid().ToString()),
 85426            new(EstudClaims.UserType, role.BaseType.ToInt().ToString()),
 85427            new(EstudClaims.UserInstitutionId, user.InstitutionId.ToString()),
 85428        };
 29
 85430        var identityClaims = new ClaimsIdentity();
 85431        identityClaims.AddClaims(claims);
 32
 85433        var key = Encoding.ASCII.GetBytes(settings.SecurityKey);
 85434        var expirationTime = settings.ExpirationTimeInMinutes;
 85435        var signingCredentials = new SigningCredentials(
 85436            new SymmetricSecurityKey(key),
 85437            SecurityAlgorithms.HmacSha256Signature
 85438        );
 39
 85440        var tokenDescriptor = new SecurityTokenDescriptor
 85441        {
 85442            Issuer = settings.Issuer,
 85443            Subject = identityClaims,
 85444            Audience = settings.Audience,
 85445            SigningCredentials = signingCredentials,
 85446            Expires = DateTime.UtcNow.AddMinutes(expirationTime),
 85447        };
 48
 85449        var tokenHandler = new JwtSecurityTokenHandler();
 85450        var securityToken = tokenHandler.CreateToken(tokenDescriptor);
 51
 85452        httpCtx.HttpContext.Response.AppendJWTCookie(tokenHandler.WriteToken(securityToken), settings);
 53
 85454        return new SignInOut
 85455        {
 85456            UserId = user.Id,
 85457            InstitutionId = user.InstitutionId,
 85458        };
 85459    }
 60}