diff --git a/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java b/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java index ed2a7e1..7e0c3b4 100644 --- a/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java +++ b/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java @@ -15,11 +15,11 @@ import org.parabot.environment.api.utils.WebUtil; public class ServerProviderInfo { private Properties properties; - public ServerProviderInfo(URL providerInfo) { + public ServerProviderInfo(URL providerInfo, String username, String password) { this.properties = new Properties(); try { String line; - BufferedReader br = WebUtil.getReader(providerInfo); + BufferedReader br = WebUtil.getReader(providerInfo, username, password); while ((line = br.readLine()) != null) { if(line.contains(": ")) { properties.put(line.substring(0, line.indexOf(": ")), line.substring(line.indexOf(": ") + 2, line.length())); diff --git a/parabotv2/src/org/parabot/core/forum/AccountManager.java b/parabotv2/src/org/parabot/core/forum/AccountManager.java index 2729f7a..510c5cb 100644 --- a/parabotv2/src/org/parabot/core/forum/AccountManager.java +++ b/parabotv2/src/org/parabot/core/forum/AccountManager.java @@ -3,10 +3,13 @@ package org.parabot.core.forum; import org.parabot.core.Configuration; import org.parabot.core.Core; import org.parabot.core.parsers.scripts.SDNScripts; +import org.parabot.core.parsers.servers.PublicServers; import org.parabot.core.ui.LoginUI; import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.scripts.SDNScriptExecuter; +import org.parabot.environment.servers.PublicServerExecuter; +import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; @@ -38,6 +41,8 @@ public final class AccountManager { accessors.add(SDNScripts.MANAGER_FETCHER); accessors.add(LoginUI.MANAGER_FETCHER); accessors.add(SDNScriptExecuter.MANAGER_FETCHER); + accessors.add(PublicServers.MANAGER_FETCHER); + accessors.add(PublicServerExecuter.MANAGER_FETCHER); for (final AccountManagerAccess accessor : accessors) { accessor.setManager(instance); @@ -69,7 +74,11 @@ public final class AccountManager { } if (contents.equals("correct")) { - account = new Account(user, pass); + try { + account = new Account(URLEncoder.encode(user, "UTF-8"), URLEncoder.encode(pass, "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } return true; } return false; diff --git a/parabotv2/src/org/parabot/core/parsers/servers/PublicServers.java b/parabotv2/src/org/parabot/core/parsers/servers/PublicServers.java index 682fccd..3a6eeae 100644 --- a/parabotv2/src/org/parabot/core/parsers/servers/PublicServers.java +++ b/parabotv2/src/org/parabot/core/parsers/servers/PublicServers.java @@ -2,6 +2,8 @@ package org.parabot.core.parsers.servers; import org.parabot.core.Configuration; import org.parabot.core.desc.ServerDescription; +import org.parabot.core.forum.AccountManager; +import org.parabot.core.forum.AccountManagerAccess; import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.servers.PublicServerExecuter; @@ -14,12 +16,23 @@ import java.net.URL; * @author Everel */ public class PublicServers extends ServerParser { + + private static AccountManager manager; + + public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() { + + @Override + public final void setManager(AccountManager manager) { + PublicServers.manager = manager; + } + + }; @Override public void execute() { try { BufferedReader br = WebUtil.getReader(new URL( - Configuration.GET_SERVER_PROVIDERS)); + Configuration.GET_SERVER_PROVIDERS), manager.getAccount().getUsername(), manager.getAccount().getPassword()); int count = 0; String line; @@ -56,5 +69,4 @@ public class PublicServers extends ServerParser { e.printStackTrace(); } } - } diff --git a/parabotv2/src/org/parabot/environment/api/utils/WebUtil.java b/parabotv2/src/org/parabot/environment/api/utils/WebUtil.java index 74d1e2a..668a795 100644 --- a/parabotv2/src/org/parabot/environment/api/utils/WebUtil.java +++ b/parabotv2/src/org/parabot/environment/api/utils/WebUtil.java @@ -7,9 +7,11 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; +import java.net.URLEncoder; import org.parabot.core.io.ProgressListener; import org.parabot.core.io.SizeInputStream; @@ -153,6 +155,46 @@ public class WebUtil { } return null; } + + public static BufferedReader getReader(final URL url, String username, String password) { + try { + String data = URLEncoder.encode("username", "UTF-8") + "=" + username; + data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + password; + + URLConnection connection = url.openConnection(); + + connection.setDoOutput(true); + OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); + wr.write(data); + wr.flush(); + wr.close(); + + return new BufferedReader(new InputStreamReader(connection.getInputStream())); + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } + + public static URLConnection getConnection(final URL url, String username, String password) { + try { + String data = URLEncoder.encode("username", "UTF-8") + "=" + username; + data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + password; + + URLConnection connection = url.openConnection(); + + connection.setDoOutput(true); + OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); + wr.write(data); + wr.flush(); + wr.close(); + + return connection; + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } /** * Downloads a file on the internet @@ -186,6 +228,38 @@ public class WebUtil { } } + /** + * Downloads a file on the internet + * @param url + * @param destination + * @param listener + */ + public static void downloadFile(final URL url, final File destination, + final ProgressListener listener, String username, String password) { + try { + final URLConnection connection = getConnection(url, username, password); + int size = connection.getContentLength(); + SizeInputStream sizeInputStream = new SizeInputStream( + connection.getInputStream(), size, listener); + BufferedInputStream in = new BufferedInputStream(sizeInputStream); + FileOutputStream fileOut = new FileOutputStream(destination); + try { + byte data[] = new byte[1024]; + int count; + while ((count = in.read(data, 0, 1024)) != -1) { + fileOut.write(data, 0, count); + } + } finally { + if (in != null) + in.close(); + if (fileOut != null) + fileOut.close(); + } + } catch (Throwable t) { + t.printStackTrace(); + } + } + /** * Converts file format to url format * @param file diff --git a/parabotv2/src/org/parabot/environment/servers/PublicServerExecuter.java b/parabotv2/src/org/parabot/environment/servers/PublicServerExecuter.java index 1680c52..9453cbe 100644 --- a/parabotv2/src/org/parabot/environment/servers/PublicServerExecuter.java +++ b/parabotv2/src/org/parabot/environment/servers/PublicServerExecuter.java @@ -7,6 +7,8 @@ import org.parabot.core.Directories; import org.parabot.core.build.BuildPath; import org.parabot.core.classpath.ClassPath; import org.parabot.core.desc.ServerProviderInfo; +import org.parabot.core.forum.AccountManager; +import org.parabot.core.forum.AccountManagerAccess; import org.parabot.core.ui.components.VerboseLoader; import org.parabot.core.ui.utils.UILog; import org.parabot.environment.api.utils.WebUtil; @@ -28,6 +30,17 @@ import java.net.URL; public class PublicServerExecuter extends ServerExecuter { private String serverName; private String serverID; + + private static AccountManager manager; + + public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() { + + @Override + public final void setManager(AccountManager manager) { + PublicServerExecuter.manager = manager; + } + + }; public PublicServerExecuter(final String serverName, final String serverID) { this.serverName = serverName; @@ -48,7 +61,7 @@ public class PublicServerExecuter extends ServerExecuter { } ServerProviderInfo serverProviderInfo = new ServerProviderInfo(new URL(Configuration.GET_SERVER_PROVIDER_INFO - + this.serverID)); + + this.serverID), manager.getAccount().getUsername(), manager.getAccount().getPassword()); final File destination = new File(Directories.getCachePath(), serverProviderInfo.getCRC32() + ".jar"); @@ -62,7 +75,7 @@ public class PublicServerExecuter extends ServerExecuter { Core.verbose("Found cached server provider [CRC32: " + serverProviderInfo.getCRC32() + "]"); } else { WebUtil.downloadFile(new URL(jarUrl), destination, - VerboseLoader.get()); + VerboseLoader.get(), manager.getAccount().getUsername(), manager.getAccount().getPassword()); Core.verbose("Server provider downloaded..."); }