aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java
diff options
context:
space:
mode:
authorsyeyoung <42869671+cyoung06@users.noreply.github.com>2020-12-08 14:54:17 +0900
committersyeyoung <42869671+cyoung06@users.noreply.github.com>2020-12-08 14:54:17 +0900
commit87e89fd42ca44400a3d3d3d5477cd1525b24d91a (patch)
tree02023a2650c2a9e4fd2d47f64cb91ec614a28556 /src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java
parent055520e1d8313a302f58babc6526d95bf22b471f (diff)
downloadSkyblock-Dungeons-Guide-87e89fd42ca44400a3d3d3d5477cd1525b24d91a.tar.gz
Skyblock-Dungeons-Guide-87e89fd42ca44400a3d3d3d5477cd1525b24d91a.tar.bz2
Skyblock-Dungeons-Guide-87e89fd42ca44400a3d3d3d5477cd1525b24d91a.zip
authentication stuff and network loading
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java')
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java b/src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java
new file mode 100644
index 00000000..564eeb11
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java
@@ -0,0 +1,57 @@
+package kr.syeyoung.dungeonsguide;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+public class NetworkClassLoader extends ClassLoader {
+ Authenticator authenticator;
+
+ public NetworkClassLoader(Authenticator authenticator) {
+ super();
+ this.authenticator = authenticator;
+ }
+
+ @Override
+ public Class findClass(String name) throws ClassNotFoundException {
+ byte[] b = new byte[0];
+ try {
+ b = loadClassFromFile(name);
+ return defineClass(name, b, 0, b.length);
+ } catch (BadPaddingException e) {
+ e.printStackTrace();
+ } catch (InvalidAlgorithmParameterException e) {
+ e.printStackTrace();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (IllegalBlockSizeException e) {
+ e.printStackTrace();
+ } catch (NoSuchPaddingException e) {
+ e.printStackTrace();
+ } catch (InvalidKeyException e) {
+ e.printStackTrace();
+ }
+ throw new ClassNotFoundException();
+ }
+
+ private byte[] loadClassFromFile(String fileName) throws BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IOException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException {
+ byte[] buffer;
+ InputStream inputStream = authenticator.getInputStream(fileName.replace('.', '/')+ ".class");
+ ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+ int nextValue = 0;
+ while ( (nextValue = inputStream.read()) != -1 ) {
+ byteStream.write(nextValue);
+ }
+ buffer = byteStream.toByteArray();
+ return buffer;
+ }
+}