This is an important message to let you know that you have exceeded your daily Public API usage limit with your integration:
-Client Name: ${clientName}
-Client ID: ${clientId}
+ <@emailMacros.msg "email.common.dear" /> ${emailName}, +<@emailMacros.msg "papi.rate.limit.important.msg" /><@emailMacros.space /><@emailMacros.msg "papi.rate.limit.daily.usage.limit" /><@emailMacros.space /><@emailMacros.msg "papi.rate.limit.your.integration" />
+<@emailMacros.msg "papi.rate.limit.client.name" /><@emailMacros.space /> ${clientName}
+<@emailMacros.msg "papi.rate.limit.client.id" /><@emailMacros.space />${clientId}
Please remember that the ORCID Public API is free for non-commercial use by individuals as stated in the Public APIs Terms of Service. By "non-commercial" we mean that you may not charge any re-use fees for the Public API, and you may not make use of the Public API in connection with any revenue-generating product or service.
-Based on your API usage, we highly recommend you consider becoming an ORCID member for access to our Member API. Not only will it allow you to access a higher Rate Limits and an unrestricted Usage Quota, but you will be able to access Trusted Party data in ORCID records and contribute data to ORCID records from your institutional systems.
-To minimize any disruption to your ORCID integration in the future, we would recommend that you reach out to our Engagement Team by replying to this email to discuss our ORCID membership options. +
<@emailMacros.msg "papi.rate.limit.please.remember" /><@emailMacros.space /><@emailMacros.msg "papi.rate.limit.public.api.terms" />.<@emailMacros.space /><@emailMacros.msg "papi.rate.limit.by.non.commercial" />
+<@emailMacros.msg "papi.rate.limit.based.on.your" /><@emailMacros.space /><@emailMacros.msg "papi.rate.limit.member.api" />.<@emailMacros.space /><@emailMacros.msg "papi.rate.limit.not.only" />
+<@emailMacros.msg "papi.rate.limit.to.minimize" />
<#include "email_footer_html.ftl"/>
diff --git a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java index 16cf9e5ff8..6878d6c0a2 100644 --- a/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java +++ b/orcid-pub-web/src/main/java/org/orcid/api/filters/ApiRateLimitFilter.java @@ -23,7 +23,9 @@ import org.orcid.core.manager.v3.EmailManager; import org.orcid.core.manager.v3.RecordNameManager; import org.orcid.core.oauth.service.OrcidTokenStore; +import org.orcid.persistence.dao.ProfileDao; import org.orcid.persistence.jpa.entities.ClientDetailsEntity; +import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.utils.email.MailGunManager; import org.orcid.utils.panoply.PanoplyPapiDailyRateExceededItem; import org.orcid.utils.panoply.PanoplyRedshiftClient; @@ -38,6 +40,7 @@ import org.springframework.web.filter.OncePerRequestFilter; import org.orcid.core.togglz.Features; +import org.orcid.jaxb.model.common.AvailableLocales; @Component public class ApiRateLimitFilter extends OncePerRequestFilter { @@ -45,6 +48,9 @@ public class ApiRateLimitFilter extends OncePerRequestFilter { @Autowired private ClientDetailsEntityCacheManager clientDetailsEntityCacheManager; + + @Autowired + private ProfileDao profileDao; @Autowired private MailGunManager mailGunManager; @@ -103,7 +109,7 @@ public class ApiRateLimitFilter extends OncePerRequestFilter { + "You can increase your daily quota by registering for and using Public API client credentials " + "(https://info.orcid.org/documentation/integration-guide/registering-a-public-api-client/)"; - private static final String SUBJECT = "[ORCID-API] WARNING! You have exceeded the daily Public API Usage Limit - ({ORCID-ID})"; + private static final String SUBJECT = "[ORCID-API] WARNING! You have exceeded the daily Public API Usage Limit - ({0})"; @Value("${org.orcid.papi.rate.limit.fromEmail:apiusage@orcid.org}") private String FROM_ADDRESS; @@ -152,6 +158,7 @@ public void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletR } else { if (!isClientIdWhiteListed(clientId)) { + //Get the locale for the clientID LOG.info("ApiRateLimitFilter client request with clientId: " + clientId); this.rateLimitClientRequest(clientId, today); } @@ -213,29 +220,33 @@ private void rateLimitClientRequest(String clientId, LocalDate today) throws JSO } - private Map