5252import com .djrapitops .plan .storage .database .sql .tables .JoinAddressTable ;
5353import com .djrapitops .plan .utilities .comparators .SessionStartComparator ;
5454import com .djrapitops .plan .utilities .dev .Untrusted ;
55+ import com .djrapitops .plan .utilities .java .Lists ;
5556import com .djrapitops .plan .utilities .java .Maps ;
5657
5758import javax .inject .Inject ;
5859import javax .inject .Singleton ;
5960import java .util .*;
6061import java .util .concurrent .TimeUnit ;
62+ import java .util .regex .Pattern ;
6163import java .util .stream .Collectors ;
6264
6365/**
@@ -159,13 +161,13 @@ public List<RetentionData> networkPlayerRetentionAsJSONMap() {
159161 return db .query (PlayerRetentionQueries .fetchRetentionData ());
160162 }
161163
162- private static void removeFiltered (Map <UUID , String > addressByPlayerUUID , List <String > filteredJoinAddresses ) {
163- if (filteredJoinAddresses .isEmpty () || filteredJoinAddresses .equals (List .of ("play.example.com" ))) return ;
164+ private static void removeFiltered (Map <UUID , String > addressByPlayerUUID , List <Pattern > filteredJoinAddresses ) {
165+ if (filteredJoinAddresses .isEmpty () || filteredJoinAddresses .equals (List .of (Pattern . compile ( "play\\ .example\\ .com" ) ))) return ;
164166
165167 Set <UUID > toRemove = new HashSet <>();
166168 // Remove filtered addresses from the data
167169 for (Map .Entry <UUID , String > entry : addressByPlayerUUID .entrySet ()) {
168- if (filteredJoinAddresses .contains ( entry .getValue ())) {
170+ if (filteredJoinAddresses .stream (). anyMatch ( pattern -> pattern . matcher ( entry .getValue ()). matches ())) {
169171 toRemove .add (entry .getKey ());
170172 }
171173 }
@@ -176,7 +178,7 @@ private static void removeFiltered(Map<UUID, String> addressByPlayerUUID, List<S
176178
177179 public PlayerJoinAddresses playerJoinAddresses (ServerUUID serverUUID , boolean includeByPlayerMap ) {
178180 Database db = dbSystem .getDatabase ();
179- List <String > filteredJoinAddresses = config .get (DataGatheringSettings .FILTER_JOIN_ADDRESSES );
181+ List <Pattern > filteredJoinAddresses = Lists . map ( config .get (DataGatheringSettings .FILTER_JOIN_ADDRESSES ), Pattern :: compile );
180182 if (includeByPlayerMap ) {
181183 Map <UUID , String > addresses = db .query (JoinAddressQueries .latestJoinAddressesOfPlayers (serverUUID ));
182184
@@ -188,16 +190,20 @@ public PlayerJoinAddresses playerJoinAddresses(ServerUUID serverUUID, boolean in
188190 );
189191 } else {
190192 List <String > addresses = db .query (JoinAddressQueries .uniqueJoinAddresses (serverUUID ));
191- addresses .removeAll (filteredJoinAddresses );
193+ addresses .removeIf (address ->
194+ filteredJoinAddresses .stream ().anyMatch (pattern -> pattern .matcher (address ).matches ())
195+ );
192196 return new PlayerJoinAddresses (addresses , null );
193197 }
194198 }
195199
196200 public PlayerJoinAddresses playerJoinAddresses (boolean includeByPlayerMap ) {
197201 Database db = dbSystem .getDatabase ();
198- List <String > filteredJoinAddresses = config .get (DataGatheringSettings .FILTER_JOIN_ADDRESSES );
202+ List <Pattern > filteredJoinAddresses = Lists . map ( config .get (DataGatheringSettings .FILTER_JOIN_ADDRESSES ), Pattern :: compile );
199203 List <String > unique = db .query (JoinAddressQueries .uniqueJoinAddresses ());
200- unique .removeAll (filteredJoinAddresses );
204+ unique .removeIf (address ->
205+ filteredJoinAddresses .stream ().anyMatch (pattern -> pattern .matcher (address ).matches ())
206+ );
201207 if (includeByPlayerMap ) {
202208 Map <UUID , String > latest = db .query (JoinAddressQueries .latestJoinAddressesOfPlayers ());
203209 removeFiltered (latest , filteredJoinAddresses );
0 commit comments