@@ -928,45 +928,59 @@ public List<Dataverse> findPermittedCollections(DataverseRequest request, Authen
928928
929929 public List <Dataverse > findPermittedCollections (DataverseRequest request , AuthenticatedUser user , int permissionBit ) {
930930 if (user != null ) {
931- // IP Group - Only check IP if a User is calling for themself
932- String ipRangeSQL = "FALSE" ;
933- if (request != null
934- && request .getAuthenticatedUser () != null
935- && !request .getAuthenticatedUser ().isSuperuser ()
936- && request .getSourceAddress () != null
937- && request .getAuthenticatedUser ().getUserIdentifier ().equalsIgnoreCase (user .getUserIdentifier ())) {
938- IpAddress ip = request .getSourceAddress ();
939- if (ip instanceof IPv4Address ) {
940- IPv4Address ipv4 = (IPv4Address ) ip ;
941- ipRangeSQL = ipv4 .toBigInteger () + " BETWEEN ipv4range.bottomaslong AND ipv4range.topaslong" ;
942- } else if (ip instanceof IPv6Address ) {
943- IPv6Address ipv6 = (IPv6Address ) ip ;
944- long [] vals = ipv6 .toLongArray ();
945- if (vals .length == 4 ) {
946- ipRangeSQL = """
947- (@0 BETWEEN ipv6range.bottoma AND ipv6range.topa
948- AND @1 BETWEEN ipv6range.bottomb AND ipv6range.topb
949- AND @2 BETWEEN ipv6range.bottomc AND ipv6range.topc
950- AND @3 BETWEEN ipv6range.bottomd AND ipv6range.topd)
951- """ ;
952- for (int i = 0 ; i < vals .length ; i ++) {
953- ipRangeSQL = ipRangeSQL .replace ("@" + i , String .valueOf (vals [i ]));
954- }
931+ var sqlCode = getSqlCode (request , user , permissionBit );
932+ return em .createNativeQuery (sqlCode , Dataverse .class ).getResultList ();
933+ }
934+ return null ;
935+ }
936+
937+ public boolean hasMultiplePermittedCollections (DataverseRequest request , AuthenticatedUser user , int permissionBit ) {
938+ if (user != null ) {
939+ var sqlCode = getSqlCode (request , user , permissionBit ) + " LIMIT 2" ;
940+ var resultList = em .createNativeQuery (sqlCode , Dataverse .class ).getResultList ();
941+ return resultList .size () > 1 ;
942+ }
943+ return false ;
944+ }
945+
946+ private String getSqlCode (DataverseRequest request , AuthenticatedUser user , int permissionBit ) {
947+ // IP Group - Only check IP if a User is calling for themself
948+ String ipRangeSQL = "FALSE" ;
949+ if (request != null
950+ && request .getAuthenticatedUser () != null
951+ && !request .getAuthenticatedUser ().isSuperuser ()
952+ && request .getSourceAddress () != null
953+ && request .getAuthenticatedUser ().getUserIdentifier ().equalsIgnoreCase (user .getUserIdentifier ())) {
954+ IpAddress ip = request .getSourceAddress ();
955+ if (ip instanceof IPv4Address ) {
956+ IPv4Address ipv4 = (IPv4Address ) ip ;
957+ ipRangeSQL = ipv4 .toBigInteger () + " BETWEEN ipv4range.bottomaslong AND ipv4range.topaslong" ;
958+ } else if (ip instanceof IPv6Address ) {
959+ IPv6Address ipv6 = (IPv6Address ) ip ;
960+ long [] vals = ipv6 .toLongArray ();
961+ if (vals .length == 4 ) {
962+ ipRangeSQL = """
963+ (@0 BETWEEN ipv6range.bottoma AND ipv6range.topa
964+ AND @1 BETWEEN ipv6range.bottomb AND ipv6range.topb
965+ AND @2 BETWEEN ipv6range.bottomc AND ipv6range.topc
966+ AND @3 BETWEEN ipv6range.bottomd AND ipv6range.topd)
967+ """ ;
968+ for (int i = 0 ; i < vals .length ; i ++) {
969+ ipRangeSQL = ipRangeSQL .replace ("@" + i , String .valueOf (vals [i ]));
955970 }
956971 }
957972 }
958- String sqlCode ;
959- if (user .isSuperuser ()) {
960- sqlCode = LIST_ALL_DATAVERSES_SUPERUSER_HAS_PERMISSION ;
961- } else {
962- sqlCode = LIST_ALL_DATAVERSES_USER_HAS_PERMISSION
963- .replace ("@USERID" , String .valueOf (user .getId ()))
964- .replace ("@PERMISSIONBIT" , String .valueOf (permissionBit ))
965- .replace ("@IPRANGESQL" , ipRangeSQL );
966- }
967- return em .createNativeQuery (sqlCode , Dataverse .class ).getResultList ();
968973 }
969- return null ;
974+ String sqlCode ;
975+ if (user .isSuperuser ()) {
976+ sqlCode = LIST_ALL_DATAVERSES_SUPERUSER_HAS_PERMISSION ;
977+ } else {
978+ sqlCode = LIST_ALL_DATAVERSES_USER_HAS_PERMISSION
979+ .replace ("@USERID" , String .valueOf (user .getId ()))
980+ .replace ("@PERMISSIONBIT" , String .valueOf (permissionBit ))
981+ .replace ("@IPRANGESQL" , ipRangeSQL );
982+ }
983+ return sqlCode ;
970984 }
971985
972986 /**
0 commit comments