@@ -27,36 +27,32 @@ TESOBE (http://www.tesobe.com/)
2727
2828package code .api
2929
30- import java .net .URLDecoder
3130import code .api .Constant ._
3231import code .api .OAuthHandshake ._
33- import code .api .builder .AccountInformationServiceAISApi .APIMethods_AccountInformationServiceAISApi
34- import code .api .util .APIUtil .{getClass , _ }
32+ import code .api .util .APIUtil ._
3533import code .api .util .ErrorMessages .{InvalidDAuthHeaderToken , UserIsDeleted , UsernameHasBeenLocked , attemptedToOpenAnEmptyBox }
3634import code .api .util ._
37- import code .api .v3_0_0 .APIMethods300
38- import code .api .v3_1_0 .APIMethods310
39- import code .api .v4_0_0 .{APIMethods400 , OBPAPI4_0_0 }
35+ import code .api .v4_0_0 .OBPAPI4_0_0
4036import code .api .v5_0_0 .OBPAPI5_0_0
4137import code .api .v5_1_0 .OBPAPI5_1_0
38+ import code .api .v6_0_0 .OBPAPI6_0_0
4239import code .loginattempts .LoginAttempt
4340import code .model .dataAccess .AuthUser
4441import code .util .Helper .{MdcLoggable , ObpS }
4542import com .alibaba .ttl .TransmittableThreadLocal
4643import com .openbankproject .commons .model .ErrorMessage
4744import com .openbankproject .commons .util .{ApiVersion , ReflectUtils , ScannedApiVersion }
48- import net .liftweb .common .{ Box , Full , _ }
45+ import net .liftweb .common ._
4946import net .liftweb .http .rest .RestHelper
5047import net .liftweb .http .{JsonResponse , LiftResponse , LiftRules , Req , S , TransientRequestMemoize }
5148import net .liftweb .json .Extraction
5249import net .liftweb .json .JsonAST .JValue
53- import net .liftweb .util .{Helpers , NamedPF , Props , ThreadGlobal }
5450import net .liftweb .util .Helpers .tryo
51+ import net .liftweb .util .{Helpers , NamedPF , Props , ThreadGlobal }
5552
53+ import java .net .URLDecoder
5654import java .util .{Locale , ResourceBundle }
57- import scala .collection .immutable .List
5855import scala .collection .mutable .ArrayBuffer
59- import scala .math .Ordering
6056import scala .util .control .NoStackTrace
6157import scala .xml .{Node , NodeSeq }
6258
@@ -642,23 +638,40 @@ trait OBPRestHelper extends RestHelper with MdcLoggable {
642638 result
643639 }
644640
641+ def isAutoValidate (doc : ResourceDoc , autoValidateAll : Boolean ): Boolean = { // note: auto support v4.0.0 and later versions
642+ doc.isValidateEnabled || (autoValidateAll && ! doc.isValidateDisabled && {
643+ // Auto support v4.0.0 and all later versions
644+ val docVersion = doc.implementedInApiVersion
645+ // Check if the version is v4.0.0 or later by comparing the version string
646+ docVersion match {
647+ case v : ScannedApiVersion =>
648+ // Extract version numbers and compare
649+ val versionStr = v.apiShortVersion.replace(" v" , " " )
650+ val parts = versionStr.split(" \\ ." )
651+ if (parts.length >= 2 ) {
652+ val major = parts(0 ).toInt
653+ val minor = parts(1 ).toInt
654+ major > 4 || (major == 4 && minor >= 0 )
655+ } else {
656+ false
657+ }
658+ case _ => false
659+ }
660+ })
661+ }
662+
645663 protected def registerRoutes (routes : List [OBPEndpoint ],
646664 allResourceDocs : ArrayBuffer [ResourceDoc ],
647665 apiPrefix: OBPEndpoint => OBPEndpoint ,
648666 autoValidateAll : Boolean = false ): Unit = {
649-
650- def isAutoValidate (doc : ResourceDoc ): Boolean = { // note: only support v5.1.0, v5.0.0 and v4.0.0 at the moment.
651- doc.isValidateEnabled || (autoValidateAll && ! doc.isValidateDisabled && List (OBPAPI5_1_0 .version,OBPAPI5_0_0 .version,OBPAPI4_0_0 .version).contains(doc.implementedInApiVersion))
652- }
653-
654667 for (route <- routes) {
655668 // one endpoint can have multiple ResourceDocs, so here use filter instead of find, e.g APIMethods400.Implementations400.createTransactionRequest
656669 val resourceDocs = allResourceDocs.filter(_.partialFunction == route)
657670
658671 if (resourceDocs.isEmpty) {
659672 oauthServe(apiPrefix(route), None )
660673 } else {
661- val (autoValidateDocs, other) = resourceDocs.partition(isAutoValidate)
674+ val (autoValidateDocs, other) = resourceDocs.partition(isAutoValidate(_, autoValidateAll) )
662675 // autoValidateAll or doc isAutoValidate, just wrapped to auth check endpoint
663676 autoValidateDocs.foreach { doc =>
664677 val wrappedEndpoint = doc.wrappedWithAuthCheck(route)
0 commit comments