diff --git a/obp-api/src/main/resources/props/sample.props.template b/obp-api/src/main/resources/props/sample.props.template index 2190e6c321..9f1971d321 100644 --- a/obp-api/src/main/resources/props/sample.props.template +++ b/obp-api/src/main/resources/props/sample.props.template @@ -847,6 +847,13 @@ featured_apis=elasticSearchWarehouseV300 # redis_port=6379 # In case isn't defined default value is root # rate_limiting.exclude_endpoints=root +## Default rate limiting for a new consumer +# rate_limiting_per_second = -1 +# rate_limiting_per_minute = -1 +# rate_limiting_per_hour = -1 +# rate_limiting_per_day = -1 +# rate_limiting_per_week = -1 +# rate_limiting_per_month = -1 # ----------------------------------------------------- # -- Migration Scripts ---------------------------- diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala index 9e559dc906..5ba84c1406 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -3309,6 +3309,13 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ val reqHeaders = result._2.map(_.requestHeaders).getOrElse(Nil) // Berlin Group checks BerlinGroupCheck.validate(body, verb, url, reqHeaders, result) + } map { + result => + val excludeFunctions = getPropsValue("rate_limiting.exclude_endpoints", "root").split(",").toList + cc.resourceDocument.map(_.partialFunctionName) match { + case Some(functionName) if excludeFunctions.exists(_ == functionName) => result + case _ => RateLimitingUtil.underCallLimits(result) + } } map { result => result._1 match { case Empty if result._2.flatMap(_.consumer).isDefined => // There is no error and Consumer is defined diff --git a/obp-api/src/main/scala/code/api/util/Glossary.scala b/obp-api/src/main/scala/code/api/util/Glossary.scala index 8b1a84d39e..2a8397f791 100644 --- a/obp-api/src/main/scala/code/api/util/Glossary.scala +++ b/obp-api/src/main/scala/code/api/util/Glossary.scala @@ -305,6 +305,12 @@ object Glossary extends MdcLoggable { |""" ) + glossaryItems += GlossaryItem( + title = "Roles of Open Bank Project", + description = + s"""
    ${ApiRole.availableRoles.sorted.map(i => "
  1. " + i + "
  2. ").mkString}
""".stripMargin + ) + diff --git a/obp-api/src/main/scala/code/model/OAuth.scala b/obp-api/src/main/scala/code/model/OAuth.scala index c8016ecf89..3e8645befc 100644 --- a/obp-api/src/main/scala/code/model/OAuth.scala +++ b/obp-api/src/main/scala/code/model/OAuth.scala @@ -582,22 +582,22 @@ class Consumer extends LongKeyedMapper[Consumer] with CreatedUpdated{ object createdByUserId extends MappedString(this, 36) object perSecondCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_second", -1) } object perMinuteCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_minute", -1) } object perHourCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_hour", -1) } object perDayCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_day", -1) } object perWeekCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue : Long = APIUtil.getPropsAsLongValue("rate_limiting_per_week", -1) } object perMonthCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue : Long = APIUtil.getPropsAsLongValue("rate_limiting_per_month", -1) } object clientCertificate extends MappedString(this, 4000) object company extends MappedString(this, 100) { diff --git a/obp-api/src/main/scala/code/ratelimiting/MappedRateLimiting.scala b/obp-api/src/main/scala/code/ratelimiting/MappedRateLimiting.scala index 792426efc8..6ce5227d3b 100644 --- a/obp-api/src/main/scala/code/ratelimiting/MappedRateLimiting.scala +++ b/obp-api/src/main/scala/code/ratelimiting/MappedRateLimiting.scala @@ -1,13 +1,14 @@ package code.ratelimiting -import java.util.Date +import code.api.util.APIUtil +import java.util.Date import code.util.{MappedUUID, UUIDString} import net.liftweb.common.{Box, Full} import net.liftweb.mapper._ import net.liftweb.util.Helpers.tryo - import com.openbankproject.commons.ExecutionContext.Implicits.global + import scala.concurrent.Future object MappedRateLimitingProvider extends RateLimitingProviderTrait { @@ -180,22 +181,22 @@ class RateLimiting extends RateLimitingTrait with LongKeyedMapper[RateLimiting] object ConsumerId extends MappedString(this, 250) object BankId extends UUIDString(this) object PerSecondCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_second", -1) } object PerMinuteCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_minute", -1) } object PerHourCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_hour", -1) } object PerDayCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_day", -1) } object PerWeekCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_week", -1) } object PerMonthCallLimit extends MappedLong(this) { - override def defaultValue = -1 + override def defaultValue: Long = APIUtil.getPropsAsLongValue("rate_limiting_per_month", -1) } object FromDate extends MappedDateTime(this) object ToDate extends MappedDateTime(this)