Skip to content

Commit

Permalink
SPARK-2341 Enable all providers and download a list
Browse files Browse the repository at this point in the history
  • Loading branch information
stokito committed Sep 12, 2024
1 parent 45ea7d8 commit 3715013
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 18 deletions.
89 changes: 71 additions & 18 deletions core/src/main/java/org/jivesoftware/XmppProviders.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,44 +17,97 @@

package org.jivesoftware;

import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.jivesoftware.spark.util.log.Log;

import javax.swing.*;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import static java.util.Arrays.asList;


public class XmppProviders {
/**
* <a href="https://data.xmpp.net/providers/v2/providers-A.json">Providers A</a>
* Disabled providers that requires a CAPTCHA
*/
private static final String[] providers = new String[]{
// "07f.de",
// "chalec.org",
// "chapril.org",
// "chatrix.one",
// "draugr.de",
// "hookipa.net",
"07f.de",
"chalec.org",
"chapril.org",
"chatrix.one",
"draugr.de",
"hookipa.net",
"jabber.fr",
// "macaw.me",
// "magicbroccoli.de",
// "nixnet.services",
// "projectsegfau.lt",
// "redlibre.es",
// "suchat.org",
// "sure.im",
// "trashserver.net",
"macaw.me",
"magicbroccoli.de",
"nixnet.services",
"projectsegfau.lt",
"redlibre.es",
"suchat.org",
"sure.im",
"trashserver.net",
"xmpp.earth",
"yax.im",
};

public static ComboBoxModel<String> getXmppProvidersModel() {
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
for (String provider : providers) {
List<String> providersList = downloadProvidersList();
if (providersList == null) {
// fallback to static list
providersList = asList(providers);
}
for (String provider : providersList) {
model.addElement(provider);
}
// Randomly pre-select a provider
int randomProviderIdx = new Random().nextInt(providers.length);
model.setSelectedItem(providers[randomProviderIdx]);
int randomProviderIdx = new Random().nextInt(providersList.size());
model.setSelectedItem(providersList.get(randomProviderIdx));
return model;
}

static List<String> downloadProvidersList() {
Log.debug("Download providers");
try (CloseableHttpClient httpClient = HttpClients.createSystem()) {
HttpGet request = new HttpGet("https://data.xmpp.net/providers/v2/providers-As.json");
CloseableHttpResponse httpResponse = httpClient.execute(request);
final int statusCode = httpResponse.getCode();
if (statusCode == 200) {
String json = EntityUtils.toString(httpResponse.getEntity(), StandardCharsets.UTF_8);
return parseProvidersJson(json);
}
Log.error("Download providers: bad status " + statusCode);
return null;
} catch (Exception e) {
Log.error("Download providers: error", e);
return null;
}
}

static List<String> parseProvidersJson(String json) {
// manually parse JSON array
json = json.trim();
if (json.charAt(0) != '[' || json.charAt(json.length() - 1) != ']') {
return null;
}
String[] lines = json.substring(1, json.length() - 1).split(",");
List<String> providers = new ArrayList<>(lines.length);
for (String line : lines) {
line = line.trim();
if (line.charAt(0) != '"' || line.charAt(line.length() - 1) != '"') {
continue;
}
String provider = line.substring(1, line.length() - 1);
providers.add(provider);
}
return providers;
}
}
22 changes: 22 additions & 0 deletions core/src/test/java/org/jivesoftware/XmppProvidersTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.jivesoftware;

import org.junit.Test;

import java.util.List;

import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;

public class XmppProvidersTest {

@Test
public void testParseProvidersJson() {
List<String> providers = XmppProviders.parseProvidersJson("[\n" +
" \"07f.de\",\n" +
" \"404.city\",\n" +
" \"5222.de\"" +
"]");
assertEquals(asList("07f.de", "404.city", "5222.de"), providers);
}

}

0 comments on commit 3715013

Please sign in to comment.