This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 6060571d02ab1885f2766f75580d54c7e1848a19 Author: Benoit Tellier <[email protected]> AuthorDate: Fri Jan 28 11:49:06 2022 +0700 JAMES-3683 Guice injections for the Redis Rate limiter implementation --- .../apache/james/rate/limiter/redis/RedisRateLimiter.scala | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala b/server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala index e0ecaa3..698d275 100644 --- a/server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala +++ b/server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala @@ -19,17 +19,29 @@ package org.apache.james.rate.limiter.redis +import com.google.inject.AbstractModule import es.moki.ratelimitj.core.limiter.request.{AbstractRequestRateLimiterFactory, ReactiveRequestRateLimiter, RequestLimitRule} import es.moki.ratelimitj.redis.request.{RedisClusterRateLimiterFactory, RedisSlidingWindowRequestRateLimiter, RedisRateLimiterFactory => RedisSingleInstanceRateLimitjFactory} import io.lettuce.core.RedisClient import io.lettuce.core.cluster.RedisClusterClient import org.apache.james.rate.limiter.api.Increment.Increment -import org.apache.james.rate.limiter.api.{AcceptableRate, RateExceeded, RateLimiter, RateLimiterFactory, RateLimitingKey, RateLimitingResult, Rule, Rules} +import org.apache.james.rate.limiter.api.{AcceptableRate, RateExceeded, RateLimiter, RateLimiterFactory, RateLimiterFactoryProvider, RateLimitingKey, RateLimitingResult, Rule, Rules} +import org.apache.mailet.MailetConfig import org.reactivestreams.Publisher import reactor.core.scala.publisher.SMono import scala.jdk.CollectionConverters._ +class RedisRateLimiterModule() extends AbstractModule { + override def configure(): Unit = + bind(classOf[RateLimiterFactoryProvider]) + .to(classOf[RedisRateLimiterFactoryProvider]) +} + +class RedisRateLimiterFactoryProvider extends RateLimiterFactoryProvider { + override def create(mailetConfig: MailetConfig): RateLimiterFactory = new RedisRateLimiterFactory(RedisRateLimiterConfiguration.from(mailetConfig)) +} + class RedisRateLimiterFactory(redisConfiguration: RedisRateLimiterConfiguration) extends RateLimiterFactory { val rateLimitjFactory: AbstractRequestRateLimiterFactory[RedisSlidingWindowRequestRateLimiter] = if (redisConfiguration.redisURI.value.size > 1) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
