Skip to content

Commit 9ff78b2

Browse files
Revert "feature/Rate Limiting endpoint tweaks 4"
This reverts commit 0e5a0b4.
1 parent 5fd3d51 commit 9ff78b2

File tree

2 files changed

+108
-340
lines changed

2 files changed

+108
-340
lines changed

obp-api/src/main/scala/code/api/util/AfterApiAuth.scala

Lines changed: 30 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ object AfterApiAuth extends MdcLoggable{
9696
* Please note that first source is the table RateLimiting and second is the table Consumer
9797
*/
9898
def checkRateLimiting(userIsLockedOrDeleted: Future[(Box[User], Option[CallContext])]): Future[(Box[User], Option[CallContext])] = {
99-
def getActiveLimits(consumerId: String): Future[List[RateLimiting]] = {
99+
def getRateLimiting(consumerId: String, version: String, name: String): Future[Box[RateLimiting]] = {
100100
RateLimitingUtil.useConsumerLimits match {
101-
case true => RateLimitingDI.rateLimiting.vend.getActiveCallLimitsByConsumerIdAtDate(consumerId, new Date())
102-
case false => Future(List.empty)
101+
case true => RateLimitingDI.rateLimiting.vend.getByConsumerId(consumerId, version, name, Some(new Date()))
102+
case false => Future(Empty)
103103
}
104104
}
105105
for {
@@ -111,48 +111,34 @@ object AfterApiAuth extends MdcLoggable{
111111
name = cc.flatMap(_.resourceDocument.map(_.partialFunctionName)) // 1st try: function name at resource doc
112112
.orElse(operationId) // 2nd try: In case of Dynamic Endpoint we can only use operationId
113113
.getOrElse("None") // Not found any unique identifier
114-
activeLimits <- getActiveLimits(consumer.map(_.consumerId.get).getOrElse(""))
114+
rateLimiting <- getRateLimiting(consumer.map(_.consumerId.get).getOrElse(""), version, name)
115115
} yield {
116-
// Find the most specific rate limiting record for this request
117-
def findBestMatch(limits: List[RateLimiting], version: String, name: String): Option[RateLimiting] = {
118-
limits.find(rl => rl.apiVersion.contains(version) && rl.apiName.contains(name)) // 1st try: exact match
119-
.orElse(limits.find(rl => rl.apiName.contains(name))) // 2nd try: match by name only
120-
.orElse(limits.find(rl => rl.apiVersion.contains(version))) // 3rd try: match by version only
121-
.orElse(limits.find(rl => rl.apiName.isEmpty && rl.apiVersion.isEmpty)) // 4th try: general consumer limit
122-
.orElse(limits.headOption) // 5th try: any limit
123-
}
124-
125-
val limit: Option[CallLimit] = if (activeLimits.nonEmpty) {
126-
findBestMatch(activeLimits, version, name) match {
127-
case Some(rl) => Some(CallLimit(
128-
Some(rl.rateLimitingId),
129-
rl.consumerId,
130-
rl.apiName,
131-
rl.apiVersion,
132-
rl.bankId,
133-
rl.perSecondCallLimit,
134-
rl.perMinuteCallLimit,
135-
rl.perHourCallLimit,
136-
rl.perDayCallLimit,
137-
rl.perWeekCallLimit,
138-
rl.perMonthCallLimit))
139-
case None => None
140-
}
141-
} else {
142-
// Fallback to consumer limits if no database records found
143-
consumer.map(c => CallLimit(
144-
None,
145-
c.consumerId.get,
146-
None,
147-
None,
148-
None,
149-
c.perSecondCallLimit.get,
150-
c.perMinuteCallLimit.get,
151-
c.perHourCallLimit.get,
152-
c.perDayCallLimit.get,
153-
c.perWeekCallLimit.get,
154-
c.perMonthCallLimit.get
155-
))
116+
val limit: Option[CallLimit] = rateLimiting match {
117+
case Full(rl) => Some(CallLimit(
118+
rl.consumerId,
119+
rl.apiName,
120+
rl.apiVersion,
121+
rl.bankId,
122+
rl.perSecondCallLimit,
123+
rl.perMinuteCallLimit,
124+
rl.perHourCallLimit,
125+
rl.perDayCallLimit,
126+
rl.perWeekCallLimit,
127+
rl.perMonthCallLimit))
128+
case Empty =>
129+
Some(CallLimit(
130+
consumer.map(_.consumerId.get).getOrElse(""),
131+
None,
132+
None,
133+
None,
134+
consumer.map(_.perSecondCallLimit.get).getOrElse(-1),
135+
consumer.map(_.perMinuteCallLimit.get).getOrElse(-1),
136+
consumer.map(_.perHourCallLimit.get).getOrElse(-1),
137+
consumer.map(_.perDayCallLimit.get).getOrElse(-1),
138+
consumer.map(_.perWeekCallLimit.get).getOrElse(-1),
139+
consumer.map(_.perMonthCallLimit.get).getOrElse(-1)
140+
))
141+
case _ => None
156142
}
157143
(user, cc.map(_.copy(rateLimiting = limit)))
158144
}

0 commit comments

Comments
 (0)