Beispiel #1
0
        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
            }));
        }
Beispiel #2
0
        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
            });
        }