private async Task <AuthResult> AuthenticateAsync(TelegramUserDto dto)
        {
            telegramUserIdProvider.Set(dto.Id);
            var user = await GetOrCreateTelegramUser(dto);

            return(await CreateAndSaveSessionAsync(user));
        }
        private async Task <TelegramUser> GetOrCreateTelegramUser(TelegramUserDto dto)
        {
            var user = await hookrRepository
                       .ReadAsync((context, token) => context.TelegramUsers
                                  .AsNoTracking()
                                  .FirstOrDefaultAsync(x => x.Id == dto.Id, token),
                                  Token);

            if (user != null)
            {
                await UpdateTelegramUserAsync(hookrRepository.Context.Update(user).Entity, dto);

                return(user);
            }

            var createdUser = new TelegramUser
            {
                Id    = dto.Id,
                State = TelegramUserStates.Default
            };

            await UpdateTelegramUserAsync(hookrRepository.Context.Add(createdUser).Entity,
                                          dto);

            return(createdUser);
        }
 private async Task UpdateTelegramUserAsync(TelegramUser user,
                                            TelegramUserDto dto)
 {
     user.Username      = dto.Username;
     user.FirstName     = dto.FirstName;
     user.PhotoUrl      = dto.PhotoUrl;
     user.LastUpdatedAt = DateTime.UtcNow;
     await hookrRepository.SaveChangesAsync();
 }
예제 #4
0
        public async Task HandleAsync(IUpdateContext context, UpdateDelegate next, CancellationToken cancellationToken)
        {
            var user = context.Update.Message?.From ?? context.Update.ChannelPost?.From;

            if (user != null)
            {
                var telegramUserDto = new TelegramUserDto
                {
                    Id           = user.Id,
                    IsBot        = user.IsBot,
                    FirstName    = user.FirstName,
                    LastName     = user.LastName,
                    Username     = user.Username,
                    LanguageCode = user.LanguageCode,
                    IsActive     = false
                };

                await _telegramUserApplicationService.CreateIfDoesNotExist(telegramUserDto);
            }

            await next(context, cancellationToken);
        }