Exemplo n.º 1
0
        public async void AddFcmToken(int userId, string fcmToken, int os)
        {
            await using var context = _contextFactory.CreateContext();
            if (string.IsNullOrEmpty(fcmToken))
            {
                return;
            }

            var userToFcmToken = await context.UserToFcmTokens.FindAsync(userId, fcmToken);

            if (userToFcmToken == null)
            {
                var user = context.Users.AsNoTracking().First(x => x.Id == userId);
                var newUserToFcmToken = new UserToFcmToken
                {
                    FcmToken   = fcmToken,
                    IsInApp    = true,
                    LastSignIn = user.CreatedDate + TimeSpan.FromMinutes(AuthOptions.LifeTimeMinutes) > DateTime.UtcNow ? user.CreatedDate : DateTime.UtcNow,
                    LastVisit  = DateTime.UtcNow,
                    UserId     = userId
                };
                await context.UserToFcmTokens.AddAsync(newUserToFcmToken);
            }
            else
            {
                userToFcmToken.LastVisit = DateTime.UtcNow;
            }
            await context.SaveChangesAsync();
        }
Exemplo n.º 2
0
        public async Task <UserAuthentication> CreateUserAuthenticationAsync(UserAuthentication userAuthentication, string fcmToken, int os)
        {
            if (userAuthentication == null)
            {
                throw new ArgumentNullException(nameof(userAuthentication));
            }

            using (var context = _contextFactory.CreateContext())
            {
                var userAuth = await context.UserAuthentications.AddAsync(userAuthentication);

                if (!string.IsNullOrEmpty(fcmToken))
                {
                    var userToFcmToken = new UserToFcmToken
                    {
                        UserId     = userAuthentication.UserId,
                        FcmToken   = fcmToken,
                        LastSignIn = DateTime.UtcNow,
                        LastVisit  = DateTime.UtcNow,
                        IsInApp    = true,
                        Os         = os
                    };
                    await context.UserToFcmTokens.AddAsync(userToFcmToken);
                }
                await context.SaveChangesAsync();

                return(userAuth.Entity);
            }
        }
Exemplo n.º 3
0
        public async Task <TokenResponse> ClassicLogin(UserCredential userCredential)
        {
            if (userCredential == null)
            {
                throw new ArgumentNullException(nameof(userCredential));
            }
            if (!IsValidPassword(userCredential.UserPassword))
            {
                throw new ValidationException(_stringLocalizer["PasswordIsNotValid"]);
            }
            if (!IsValidUserName(userCredential.Login))
            {
                throw new ValidationException(_stringLocalizer["LoginIsNotValid"]);
            }

            var user = await _userService.GetUserByLoginAsync(userCredential.Login);

            if (user == null)
            {
                throw new ValidationException(_stringLocalizer["PasswordOrLoginIsWrong"]);
            }

            var hashedPassword  = _passwordEncryptor.Encrypt(userCredential.UserPassword);
            var isValidPassword = await _authService.IsValidPasswordAsync(user.Id, hashedPassword);

            if (!isValidPassword)
            {
                throw new ValidationException(_stringLocalizer["PasswordOrLoginIsWrong"]);
            }

            var claimIdentity = _authService.GetIdentity(user);

            var jwtToken = _authService.GetJwtToken(claimIdentity);

            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwtToken);

            if (string.IsNullOrEmpty(userCredential.FcmToken))
            {
                return new TokenResponse {
                           Token = encodedJwt, Login = user.Login
                }
            }
            ;

            var userToFcmToken = new UserToFcmToken
            {
                UserId     = user.Id,
                FcmToken   = userCredential.FcmToken,
                LastSignIn = DateTime.UtcNow,
                LastVisit  = DateTime.UtcNow,
                IsInApp    = true,
                Os         = userCredential.Os
            };

            using (var context = _contextFactory.CreateContext())
            {
                var userToFcmTokenExist =
                    await context.UserToFcmTokens.FindAsync(userToFcmToken.UserId, userToFcmToken.FcmToken);

                if (userToFcmTokenExist == null)
                {
                    await context.UserToFcmTokens.AddAsync(userToFcmToken);
                }
                else
                {
                    userToFcmTokenExist.IsInApp    = true;
                    userToFcmTokenExist.LastSignIn = DateTime.UtcNow;
                    userToFcmTokenExist.LastVisit  = DateTime.UtcNow;
                }

                await context.SaveChangesAsync();
            }

            return(new TokenResponse {
                Token = encodedJwt, Login = user.Login
            });
        }