< Summary - Syki

Information
Class: Syki.Back.Features.Cross.SignIn.SignInService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Identity/SignIn/SignInService.cs
Tag: 56_26538939494
Line coverage
100%
Covered lines: 39
Uncovered lines: 0
Coverable lines: 39
Total lines: 59
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 Syki.Back.Auth.Claims;
 3using System.Security.Claims;
 4using Microsoft.IdentityModel.Tokens;
 5using System.IdentityModel.Tokens.Jwt;
 6using Syki.Back.Features.Identity.SignIn;
 7
 8namespace Syki.Back.Features.Cross.SignIn;
 9
 34410public class SignInService(
 34411    SykiDbContext ctx,
 34412    AuthSettings settings,
 34413    IHttpContextAccessor httpCtx) : ISykiService
 14{
 15    public async Task<SignInOut> SignIn(string email)
 16    {
 25217        var user = await ctx.Users.Where(u => u.Email == email).Select(x => new { x.Id, x.InstitutionId }).FirstAsync();
 25218        var role = await ctx.GetUserRole(user.Id, user.InstitutionId);
 25219        var permissions = role.Permissions.Serialize();
 20
 25221        var claims = new List<Claim>
 25222        {
 25223            new(SykiClaims.UserId, user.Id.ToString()),
 25224            new(SykiClaims.UserPermissions, permissions),
 25225            new(SykiClaims.Jti, Guid.NewGuid().ToString()),
 25226            new(SykiClaims.InstitutionId, user.InstitutionId.ToString()),
 25227        };
 28
 25229        var identityClaims = new ClaimsIdentity();
 25230        identityClaims.AddClaims(claims);
 31
 25232        var key = Encoding.ASCII.GetBytes(settings.SecurityKey);
 25233        var expirationTime = settings.ExpirationTimeInMinutes;
 25234        var signingCredentials = new SigningCredentials(
 25235            new SymmetricSecurityKey(key),
 25236            SecurityAlgorithms.HmacSha256Signature
 25237        );
 38
 25239        var tokenDescriptor = new SecurityTokenDescriptor
 25240        {
 25241            Issuer = settings.Issuer,
 25242            Subject = identityClaims,
 25243            Audience = settings.Audience,
 25244            SigningCredentials = signingCredentials,
 25245            Expires = DateTime.UtcNow.AddMinutes(expirationTime),
 25246        };
 47
 25248        var tokenHandler = new JwtSecurityTokenHandler();
 25249        var securityToken = tokenHandler.CreateToken(tokenDescriptor);
 50
 25251        httpCtx.HttpContext.Response.AppendJWTCookie(tokenHandler.WriteToken(securityToken), settings);
 52
 25253        return new SignInOut
 25254        {
 25255            UserId = user.Id,
 25256            InstitutionId = user.InstitutionId,
 25257        };
 25258    }
 59}