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 => "- " + i + "
").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)