Skip to content

Commit

Permalink
WIP: rate limiter
Browse files Browse the repository at this point in the history
  • Loading branch information
olovy committed Sep 7, 2023
1 parent 0946d7d commit 2317cd8
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 12 deletions.
26 changes: 14 additions & 12 deletions rest/src/main/groovy/whelk/rest/api/Crud.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,11 @@ class Crud extends HttpServlet {
measurement = metrics.measure('INDEX')
displayInfo(response)
} else if (siteSearch.isSearchResource(request.pathInfo)) {
if (!rateLimiters[RequestType.FIND].isOk(request.getRemoteAddr())) {
throw new RateLimitException('TODO')
}
rateLimit(request, RequestType.FIND)
measurement = metrics.measure('FIND')
handleQuery(request, response)
} else {
if (!rateLimiters[RequestType.FIND].isOk(request.getRemoteAddr())) {
throw new RateLimitException('TODO')
}
rateLimit(request, RequestType.READ)
measurement = metrics.measure('GET')
handleGetRequest(CrudGetRequest.parse(request), response)
}
Expand Down Expand Up @@ -535,9 +531,7 @@ class Crud extends HttpServlet {
if (!isSupportedContentType(request.getContentType())) {
throw new BadRequestException("Content-Type not supported.")
}
if (!rateLimiters[RequestType.WRITE].isOk(request.getRemoteAddr())) {
throw new RateLimitException('TODO')
}
rateLimit(request, RequestType.WRITE)

Map requestBody = getRequestBody(request)

Expand Down Expand Up @@ -624,9 +618,7 @@ class Crud extends HttpServlet {
if (!isSupportedContentType(request.getContentType())) {
throw new BadRequestException("Content-Type not supported.")
}
if (!rateLimiters[RequestType.WRITE].isOk(request.getRemoteAddr())) {
throw new RateLimitException('TODO')
}
rateLimit(request, RequestType.WRITE)

Map requestBody = getRequestBody(request)

Expand Down Expand Up @@ -859,6 +851,16 @@ class Crud extends HttpServlet {
response.setStatus(HttpServletResponse.SC_NO_CONTENT)
}
}

void rateLimit(HttpServletRequest request, RequestType requestType) {
if (!rateLimiters[requestType].isOk(request.getRemoteAddr())) {
throw new RateLimitException('TODO')
}
}

Optional getRemoteIp() {

}

static void sendError(HttpServletRequest request, HttpServletResponse response, Exception e) {
int code = mapError(e)
Expand Down
10 changes: 10 additions & 0 deletions rest/src/main/groovy/whelk/rest/api/HttpTools.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,16 @@ class HttpTools {
return baseUri
}

static Optional<String> getRemoteIp(HttpServletRequest request, List<String> proxyIps) {
List remoteIps = []
request.getHeaders('X-Forwarded-For').each {
it.split(',').each { ip -> remoteIps.add(it.trim()) }
}


return Optional.empty()
}

enum DisplayMode {
DOCUMENT, META, RAW
}
Expand Down

0 comments on commit 2317cd8

Please sign in to comment.