public async Task <IActionResult> Google([FromBody] GoogleAuthModel model) { Log.Information("userView = " + model.tokenId); GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(model.tokenId, new GoogleJsonWebSignature.ValidationSettings()); var authRequest = new AuthentificateRequestGoogle() { User = payload, GroupId = model.GroupId }; var authResult = await _userSerice.AuthentificateWithGoogle(authRequest, ipAddress()); if (authResult == null) { return(BadRequest("Group is not match user group!")); } setTokenCookie(authResult.RefreshToken); return(Ok(new AuthentificateDto { Id = authResult.Student.Id, Group = authResult.Student.Group.Group_Name, Username = authResult.Student.Username, FirstName = authResult.Student.FirstName, LastName = authResult.Student.LastName, Token = authResult.JwtToken, RefreshToken = authResult.RefreshToken })); }
public async Task <AuthenticateResponse> AuthentificateWithGoogle(AuthentificateRequestGoogle model, string ipAddress) { //Same as telegram logic var student = _context.Students .Include("Group") .Include("RefreshTokens") // HERE USERNAME IS EMAIL .SingleOrDefault(s => s.Username == model.User.Email); if (student == null) { student = new Student { Id = Guid.NewGuid(), Username = model.User.Email, FirstName = model.User.GivenName, LastName = model.User.FamilyName, GroupId = model.GroupId, }; await _context.Students.AddAsync(student); await _context.SaveChangesAsync(); } // if exists- auth if (student.GroupId != model.GroupId) { return(null); } var jwt = generateJwtToken(student); var refreshToken = generateRefreshToken(ipAddress); // save refresh token // TODO newly added user don`t have refresh tokens // student.RefreshTokens.Add(refreshToken); _context.Update(student); _context.SaveChanges(); return(new AuthenticateResponse { Student = student, JwtToken = jwt, RefreshToken = refreshToken.Token }); }