#pragma warning restore

        public async Task <int> SaveChangesAsync(
            ITelegramUserIdProvider telegramUserIdProvider,
            ILoaderProvider loaderProvider,
            CancellationToken token = default)
        {
            await OnPreSavingAsync(telegramUserIdProvider, loaderProvider);

            return(await base.SaveChangesAsync(token));
        }
Exemple #2
0
 public RefreshSessionQueryHandler(
     ITelegramUserIdProvider telegramUserIdProvider,
     IHookrRepository hookrRepository,
     ICacheProvider cacheProvider,
     IJwtConfig jwtConfig) : base(cacheProvider, jwtConfig)
 {
     this.telegramUserIdProvider = telegramUserIdProvider;
     this.hookrRepository        = hookrRepository;
 }
Exemple #3
0
 public HookrRepository(HookrContext context,
                        IPolicySet policySet,
                        ITelegramUserIdProvider telegramUserIdProvider,
                        ILoaderProvider loaderProvider)
 {
     PolicySet = policySet;
     this.telegramUserIdProvider = telegramUserIdProvider;
     this.loaderProvider         = loaderProvider;
     Context = context;
 }
Exemple #4
0
 public GrabbingCurrentTelegramUpdateFilterAttribute(IUserContextProvider userContextProvider,
                                                     ITelegramUsersNotifier telegramUsersNotifier,
                                                     ITelegramUserIdProvider telegramUserIdProvider,
                                                     ILoaderProvider loaderProvider)
 {
     this.userContextProvider    = userContextProvider;
     this.telegramUsersNotifier  = telegramUsersNotifier;
     this.telegramUserIdProvider = telegramUserIdProvider;
     this.loaderProvider         = loaderProvider;
 }
        private async Task OnPreSavingAsync(ITelegramUserIdProvider telegramUserIdProvider,
                                            ILoaderProvider loaderProvider)
        {
            var entries = ChangeTracker.Entries()
                          .ToArray();

            var user = await loaderProvider
                       .Get <int, TelegramUser>()
                       .GetOrLoadAsync(telegramUserIdProvider.ProvidedValue, true);

            var now = DateTime.Now;

            entries
            .ForEach(x =>
            {
                if (!(x.Entity is Entity entity))
                {
                    return;
                }

                switch (x.State)
                {
                case EntityState.Added:
                    entity.CreatedAt = now;
                    entity.CreatedBy = user;
                    break;

                case EntityState.Modified:
                    entity.UpdatedAt = now;
                    entity.UpdatedBy = user;
                    break;

                case EntityState.Deleted:
                    if (entity is ISoftDeletable softDeletable)
                    {
                        x.State = EntityState.Modified;
                        softDeletable.DeletedAt = now;
                        softDeletable.DeletedBy = user;
                        softDeletable.IsDeleted = true;
                    }

                    break;
                }
            });
            // todo optimize
            user.LastUpdatedAt = now;
            if (entries
                .Select(x => x.Entity)
                .OfType <TelegramUser>()
                .All(x => x.Id != user.Id))
            {
                Update(user);
            }
        }
        // ReSharper disable once UnusedMember.Global
        public async Task InvokeAsync(HttpContext httpContext,
                                      ILogger <JwtReaderMiddleware> logger,
                                      ICacheProvider cacheProvider,
                                      IUserContextAccessor userContextAccessor,
                                      ITelegramUserIdProvider telegramUserIdProvider
                                      )
        {
            var header = httpContext.Request.Headers["Authorization"]
                         .FirstOrDefault(x => x.StartsWith(Bearer));

            if (string.IsNullOrEmpty(header))
            {
                await next(httpContext);

                return;
            }

            var readResult = header
                             .Replace(Bearer, string.Empty)
                             .Trim()
                             .Map(new JwtSecurityTokenHandler().ReadJwtToken)
                             .Map(new JwtPayloadReader().Read);


            if (!readResult.Success)
            {
                httpContext.Response.StatusCode = 401;
                return;
            }

            var payload = readResult.Payload;

            telegramUserIdProvider.Set(payload.Id);

            var cachedSession = await cacheProvider
                                .UserLevel <Session>()
                                .GetAsync();

            if (cachedSession == null ||
                !cachedSession.Key.Equals(payload.Key) ||
                !cachedSession.Id.Equals(payload.Id) ||
                !cachedSession.State.Equals(payload.Role))
            {
                httpContext.Response.StatusCode = 401;
                return;
            }

            logger
            .LogInformation("Found valid session for {TelegramUserId} in caches", payload.Id);
            userContextAccessor
            .SetContext(cachedSession);
            await next(httpContext);
        }
 public CreateSessionQueryHandler(ITelegramConfig telegramConfig,
                                  ITelegramUserIdProvider telegramUserIdProvider,
                                  IJwtConfig jwtConfig,
                                  ICacheProvider cacheProvider,
                                  IHookrRepository hookrRepository)
     : base(cacheProvider,
            jwtConfig)
 {
     this.telegramConfig         = telegramConfig;
     this.telegramUserIdProvider = telegramUserIdProvider;
     this.hookrRepository        = hookrRepository;
 }
Exemple #8
0
 public TelegramHookrRepository(HookrContext context,
                                IPolicySet policySet,
                                ITelegramUserIdProvider telegramUserIdProvider,
                                IMemoryCache memoryCache,
                                ILoaderProvider loaderProvider)
     : base(context,
            policySet,
            telegramUserIdProvider,
            loaderProvider)
 {
     this.memoryCache = memoryCache;
 }
 public ProductCache(ITelegramUserIdProvider telegramUserIdProvider) : base(telegramUserIdProvider)
 {
 }
 public CurrentOrderCache(ITelegramUserIdProvider telegramUserIdProvider) : base(telegramUserIdProvider)
 {
 }
Exemple #11
0
 protected TelegramUserIdGrabbingFilter(ITelegramUserIdProvider telegramUserIdProvider)
 {
     this.telegramUserIdProvider = telegramUserIdProvider;
 }
Exemple #12
0
 public SessionsCache(ITelegramUserIdProvider telegramUserIdProvider) : base(telegramUserIdProvider)
 {
 }
Exemple #13
0
 public UserTemporaryStatusCache(ITelegramUserIdProvider telegramUserIdProvider) : base(telegramUserIdProvider)
 {
 }
 protected UserLevelCache(ITelegramUserIdProvider telegramUserIdProvider)
 {
     TelegramUserIdProvider = telegramUserIdProvider;
 }