diff --git a/obp-api/src/main/scala/code/api/OBPRestHelper.scala b/obp-api/src/main/scala/code/api/OBPRestHelper.scala index 42a18cd21..1a5853f75 100644 --- a/obp-api/src/main/scala/code/api/OBPRestHelper.scala +++ b/obp-api/src/main/scala/code/api/OBPRestHelper.scala @@ -41,7 +41,7 @@ import code.api.v5_0_0.OBPAPI5_0_0 import code.api.v5_1_0.OBPAPI5_1_0 import code.loginattempts.LoginAttempt import code.model.dataAccess.AuthUser -import code.util.Helper.MdcLoggable +import code.util.Helper.{MdcLoggable, ObpS} import com.alibaba.ttl.TransmittableThreadLocal import com.openbankproject.commons.model.ErrorMessage import com.openbankproject.commons.util.{ApiVersion, ReflectUtils, ScannedApiVersion} @@ -376,7 +376,7 @@ trait OBPRestHelper extends RestHelper with MdcLoggable { val body: Box[String] = getRequestBody(S.request) val implementedInVersion = S.request.openOrThrowException(attemptedToOpenAnEmptyBox).view val verb = S.request.openOrThrowException(attemptedToOpenAnEmptyBox).requestType.method - val url = URLDecoder.decode(S.uriAndQueryString.getOrElse(""),"UTF-8") + val url = URLDecoder.decode(ObpS.uriAndQueryString.getOrElse(""),"UTF-8") val correlationId = getCorrelationId() val reqHeaders = S.request.openOrThrowException(attemptedToOpenAnEmptyBox).request.headers val remoteIpAddress = getRemoteIpAddress() diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala index 75087a8b0..5764e4432 100644 --- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala +++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala @@ -250,7 +250,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString) CacheKeyFromArguments.buildCacheKey { Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getStaticResourceDocsTTL second) { - logger.debug(s"Generating OBP Resource Docs requestedApiVersion is $requestedApiVersionString") + logger.debug(s"Generating OBP-getStaticResourceDocsObpCached requestedApiVersion is $requestedApiVersionString") val requestedApiVersion = ApiVersionUtils.valueOf(requestedApiVersionString) val resourceDocJson = resourceDocsToResourceDocJson(getResourceDocsList(requestedApiVersion), resourceDocTags, partialFunctionNames, isVersion4OrHigher, locale) @@ -284,7 +284,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString) CacheKeyFromArguments.buildCacheKey { Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getStaticResourceDocsTTL second) { - logger.debug(s"Generating OBP Resource Docs requestedApiVersion is $requestedApiVersionString") + logger.debug(s"Generating getAllResourceDocsObpCached-Docs requestedApiVersion is $requestedApiVersionString") val requestedApiVersion = ApiVersionUtils.valueOf(requestedApiVersionString) val dynamicDocs = allDynamicResourceDocs @@ -723,7 +723,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString) CacheKeyFromArguments.buildCacheKey { Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getStaticResourceDocsTTL second) { - logger.debug(s"Generating Swagger requestedApiVersion is $requestedApiVersionString") + logger.debug(s"Generating Swagger-getResourceDocsSwaggerCached requestedApiVersion is $requestedApiVersionString") Box.tryo(ApiVersionUtils.valueOf(requestedApiVersionString)) match { case Full(requestedApiVersion) => 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 d871793e2..2268edfe7 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -419,7 +419,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ val implementedInVersion = S.request.openOrThrowException(attemptedToOpenAnEmptyBox).view //(GET, POST etc.) --S.request.get.requestType.method val verb = S.request.openOrThrowException(attemptedToOpenAnEmptyBox).requestType.method - val url = S.uriAndQueryString.getOrElse("") + val url = ObpS.uriAndQueryString.getOrElse("") val correlationId = getCorrelationId() //execute saveMetric in future, as we do not need to know result of operation @@ -899,6 +899,18 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ case _ => false } } + + + /** only A-Z, a-z, 0-9,-,_,. =, & and max length <= 2048 */ + def basicUriAndQueryStringValidation(urlString: String): Boolean = { + val regex = + """^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?""".r + val decodeUrlValue = URLDecoder.decode(urlString, "UTF-8").trim() + decodeUrlValue match { + case regex(_*) if (decodeUrlValue.length <= 2048) => true + case _ => false + } + } @@ -3001,7 +3013,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ val body: Box[String] = getRequestBody(S.request) val implementedInVersion = S.request.openOrThrowException(attemptedToOpenAnEmptyBox).view val verb = S.request.openOrThrowException(attemptedToOpenAnEmptyBox).requestType.method - val url = URLDecoder.decode(S.uriAndQueryString.getOrElse(""),"UTF-8") + val url = URLDecoder.decode(ObpS.uriAndQueryString.getOrElse(""),"UTF-8") val correlationId = getCorrelationId() val reqHeaders = S.request.openOrThrowException(attemptedToOpenAnEmptyBox).request.headers val remoteIpAddress = getRemoteIpAddress() diff --git a/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala b/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala index f7d5a387f..de919c28c 100644 --- a/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala +++ b/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala @@ -744,7 +744,7 @@ import net.liftweb.util.Helpers._ override def signupXhtml (user:AuthUser) = {