diff options
Diffstat (limited to 'update/plugin')
5 files changed, 219 insertions, 1 deletions
| diff --git a/update/plugin/svn/trunk/manifest.mf b/update/plugin/svn/trunk/manifest.mf new file mode 100644 index 0000000..0f8d5d3 --- /dev/null +++ b/update/plugin/svn/trunk/manifest.mf | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | Manifest-Version: 1.0 | ||
| 2 | X-COMMENT: Main-Class will be added automatically by build \ No newline at end of file | ||
| diff --git a/update/plugin/svn/trunk/nbproject/project.dtd b/update/plugin/svn/trunk/nbproject/project.dtd new file mode 100644 index 0000000..7b77177 --- /dev/null +++ b/update/plugin/svn/trunk/nbproject/project.dtd | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | <?xml version='1.0' encoding='UTF-8'?> | ||
| 2 | |||
| 3 | <!-- | ||
| 4 | TODO define vocabulary identification | ||
| 5 | PUBLIC ID: -//vendor//vocabulary//EN | ||
| 6 | SYSTEM ID: http://server/path/project.dtd | ||
| 7 | |||
| 8 | --><!-- | ||
| 9 | An example how to use this DTD from your XML document: | ||
| 10 | |||
| 11 | <?xml version="1.0"?> | ||
| 12 | |||
| 13 | <!DOCTYPE project SYSTEM "project.dtd"> | ||
| 14 | |||
| 15 | <project> | ||
| 16 | ... | ||
| 17 | </project> | ||
| 18 | --> | ||
| 19 | |||
| 20 | <!--- Put your DTDDoc comment here. --> | ||
| 21 | <!ELEMENT project (configuration|type)*> | ||
| 22 | <!ATTLIST project | ||
| 23 | xmlns CDATA #IMPLIED | ||
| 24 | > | ||
| 25 | |||
| 26 | <!--- Put your DTDDoc comment here. --> | ||
| 27 | <!ELEMENT type (#PCDATA)> | ||
| 28 | |||
| 29 | <!--- Put your DTDDoc comment here. --> | ||
| 30 | <!ELEMENT configuration (data)*> | ||
| 31 | |||
| 32 | <!--- Put your DTDDoc comment here. --> | ||
| 33 | <!ELEMENT data (test-roots|source-roots|minimum-ant-version|name)*> | ||
| 34 | <!ATTLIST data | ||
| 35 | xmlns CDATA #IMPLIED | ||
| 36 | > | ||
| 37 | |||
| 38 | <!--- Put your DTDDoc comment here. --> | ||
| 39 | <!ELEMENT name (#PCDATA)> | ||
| 40 | |||
| 41 | <!--- Put your DTDDoc comment here. --> | ||
| 42 | <!ELEMENT minimum-ant-version (#PCDATA)> | ||
| 43 | |||
| 44 | <!--- Put your DTDDoc comment here. --> | ||
| 45 | <!ELEMENT source-roots (root)*> | ||
| 46 | |||
| 47 | <!--- Put your DTDDoc comment here. --> | ||
| 48 | <!ELEMENT root EMPTY> | ||
| 49 | <!ATTLIST root | ||
| 50 | id CDATA #IMPLIED | ||
| 51 | > | ||
| 52 | |||
| 53 | <!--- Put your DTDDoc comment here. --> | ||
| 54 | <!ELEMENT test-roots (root)*> | ||
| diff --git a/update/plugin/svn/trunk/nbproject/project.properties b/update/plugin/svn/trunk/nbproject/project.properties index 77bb3db..97cccc2 100644 --- a/update/plugin/svn/trunk/nbproject/project.properties +++ b/update/plugin/svn/trunk/nbproject/project.properties | |||
| @@ -1,3 +1,5 @@ | |||
| 1 | application.title=InstaDiscUpdateSVN | ||
| 2 | application.vendor=hatkirby | ||
| 1 | build.classes.dir=${build.dir}/classes | 3 | build.classes.dir=${build.dir}/classes |
| 2 | build.classes.excludes=**/*.java,**/*.form | 4 | build.classes.excludes=**/*.java,**/*.form |
| 3 | # This directory is removed when the project is cleaned: | 5 | # This directory is removed when the project is cleaned: |
| @@ -18,7 +20,8 @@ dist.javadoc.dir=${dist.dir}/javadoc | |||
| 18 | excludes= | 20 | excludes= |
| 19 | includes=** | 21 | includes=** |
| 20 | jar.compress=false | 22 | jar.compress=false |
| 21 | javac.classpath= | 23 | javac.classpath=\ |
| 24 | ${libs.XML-RPC2.classpath} | ||
| 22 | # Space-separated list of extra javac options | 25 | # Space-separated list of extra javac options |
| 23 | javac.compilerargs= | 26 | javac.compilerargs= |
| 24 | javac.deprecation=false | 27 | javac.deprecation=false |
| @@ -40,6 +43,14 @@ javadoc.splitindex=true | |||
| 40 | javadoc.use=true | 43 | javadoc.use=true |
| 41 | javadoc.version=false | 44 | javadoc.version=false |
| 42 | javadoc.windowtitle= | 45 | javadoc.windowtitle= |
| 46 | jnlp.codebase.type=local | ||
| 47 | jnlp.codebase.url=file:/home/hatkirby/NetBeansProjects/InstaDiscUpdateSVN/dist/ | ||
| 48 | jnlp.enabled=false | ||
| 49 | jnlp.offline-allowed=false | ||
| 50 | jnlp.signed=false | ||
| 51 | # Property libs.XML-RPC2.classpath is set here just to make sharing of project simpler. | ||
| 52 | # The library definition has always preference over this property. | ||
| 53 | libs.XML-RPC2.classpath=lib/commons-logging-1.1.jar:lib/ws-commons-util-1.0.2.jar:lib/xmlrpc-client-3.1.jar:lib/xmlrpc-common-3.1.jar:lib/xmlrpc-server-3.1.jar | ||
| 43 | main.class=com.fourisland.instadisc.update.svn.Main | 54 | main.class=com.fourisland.instadisc.update.svn.Main |
| 44 | manifest.file=manifest.mf | 55 | manifest.file=manifest.mf |
| 45 | meta.inf.dir=${src.dir}/META-INF | 56 | meta.inf.dir=${src.dir}/META-INF |
| diff --git a/update/plugin/svn/trunk/src/com/fourisland/instadisc/update/svn/MD5.java b/update/plugin/svn/trunk/src/com/fourisland/instadisc/update/svn/MD5.java new file mode 100644 index 0000000..0929022 --- /dev/null +++ b/update/plugin/svn/trunk/src/com/fourisland/instadisc/update/svn/MD5.java | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | /* | ||
| 2 | * To change this template, choose Tools | Templates | ||
| 3 | * and open the template in the editor. | ||
| 4 | */ | ||
| 5 | package com.fourisland.instadisc.update.svn; | ||
| 6 | |||
| 7 | import java.security.MessageDigest; | ||
| 8 | import java.util.logging.Level; | ||
| 9 | import java.util.logging.Logger; | ||
| 10 | |||
| 11 | /** | ||
| 12 | * | ||
| 13 | * @author hatkirby | ||
| 14 | */ | ||
| 15 | public class MD5 { | ||
| 16 | |||
| 17 | String ver; | ||
| 18 | |||
| 19 | public MD5(String ver) { | ||
| 20 | this.ver = ver; | ||
| 21 | } | ||
| 22 | |||
| 23 | public MD5(char[] password) { | ||
| 24 | int i=0; | ||
| 25 | ver=""; | ||
| 26 | for (i=0;i<password.length;i++) | ||
| 27 | { | ||
| 28 | ver += password[i]; | ||
| 29 | password[i] = 0; | ||
| 30 | } | ||
| 31 | } | ||
| 32 | |||
| 33 | public String hash() | ||
| 34 | { | ||
| 35 | StringBuilder verify = new StringBuilder(); | ||
| 36 | try { | ||
| 37 | MessageDigest md5 = MessageDigest.getInstance("MD5"); | ||
| 38 | int i = 0; | ||
| 39 | byte[] create = new byte[ver.length()]; | ||
| 40 | for (i = 0; i < ver.length(); i++) { | ||
| 41 | create[i] = (byte) ver.charAt(i); | ||
| 42 | } | ||
| 43 | byte buffer[] = md5.digest(create); | ||
| 44 | for (i = 0; i < buffer.length; i++) { | ||
| 45 | String hex = Integer.toHexString(buffer[i]); | ||
| 46 | verify.append(pad(hex.substring(max(hex.length() - 2, 0)),"0",2)); | ||
| 47 | } | ||
| 48 | } catch (Exception ex) { | ||
| 49 | Logger.getLogger(MD5.class.getName()).log(Level.SEVERE, null, ex); | ||
| 50 | } | ||
| 51 | ver = ""; | ||
| 52 | return verify.toString(); | ||
| 53 | } | ||
| 54 | |||
| 55 | private int max(int x, int y) | ||
| 56 | { | ||
| 57 | return (x > y ? x : y); | ||
| 58 | } | ||
| 59 | |||
| 60 | private String pad(String in, String pad, int len) | ||
| 61 | { | ||
| 62 | while (in.length() < len) | ||
| 63 | { | ||
| 64 | in = pad + in; | ||
| 65 | } | ||
| 66 | return in; | ||
| 67 | } | ||
| 68 | } | ||
| diff --git a/update/plugin/svn/trunk/src/com/fourisland/instadisc/update/svn/Main.java b/update/plugin/svn/trunk/src/com/fourisland/instadisc/update/svn/Main.java index e69de29..1bc9a07 100644 --- a/update/plugin/svn/trunk/src/com/fourisland/instadisc/update/svn/Main.java +++ b/update/plugin/svn/trunk/src/com/fourisland/instadisc/update/svn/Main.java | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | package com.fourisland.instadisc.update.svn; | ||
| 2 | |||
| 3 | import java.io.IOException; | ||
| 4 | import java.net.MalformedURLException; | ||
| 5 | import java.net.URL; | ||
| 6 | import java.util.Random; | ||
| 7 | import java.util.logging.Level; | ||
| 8 | import java.util.logging.Logger; | ||
| 9 | import org.apache.xmlrpc.XmlRpcException; | ||
| 10 | import org.apache.xmlrpc.client.XmlRpcClient; | ||
| 11 | import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; | ||
| 12 | |||
| 13 | public class Main { | ||
| 14 | |||
| 15 | public static void main(String[] args) { | ||
| 16 | try | ||
| 17 | { | ||
| 18 | String username = getArg(0, args); | ||
| 19 | String password = getArg(1, args); | ||
| 20 | String centralServer = getArg(2, args); | ||
| 21 | String pathScheme = getArg(3, args); | ||
| 22 | String author = getArg(4, args); | ||
| 23 | String subscription = getArg(5, args); | ||
| 24 | String revision = getArg(6, args); | ||
| 25 | |||
| 26 | StringBuilder messBuilder = new StringBuilder(); | ||
| 27 | byte rs = 0; | ||
| 28 | |||
| 29 | while (rs != -1) | ||
| 30 | { | ||
| 31 | try | ||
| 32 | { | ||
| 33 | rs = (byte) System.in.read(); | ||
| 34 | if (rs != -1) | ||
| 35 | { | ||
| 36 | messBuilder.append(new String(new byte[]{rs})); | ||
| 37 | } | ||
| 38 | } catch (IOException ex) | ||
| 39 | { | ||
| 40 | Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); | ||
| 41 | } | ||
| 42 | } | ||
| 43 | |||
| 44 | String message = messBuilder.toString(); | ||
| 45 | message = message.substring(0, message.indexOf("\n")); | ||
| 46 | |||
| 47 | Random r = new Random(); | ||
| 48 | int verID = r.nextInt(Integer.MAX_VALUE); | ||
| 49 | |||
| 50 | String path = pathScheme.replace("__REV__", revision); | ||
| 51 | |||
| 52 | XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); | ||
| 53 | config.setServerURL(new URL(centralServer)); | ||
| 54 | XmlRpcClient client = new XmlRpcClient(); | ||
| 55 | client.setConfig(config); | ||
| 56 | client.execute("InstaDisc.sendFromUpdate", new Object[]{username, | ||
| 57 | (new MD5(username + ":" + (new MD5(password)).hash() + ":" + verID)).hash(), | ||
| 58 | verID, | ||
| 59 | subscription, | ||
| 60 | message, | ||
| 61 | author, | ||
| 62 | path, | ||
| 63 | "a:0:{}" | ||
| 64 | }); | ||
| 65 | } catch (XmlRpcException ex) | ||
| 66 | { | ||
| 67 | Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); | ||
| 68 | } catch (MalformedURLException ex) | ||
| 69 | { | ||
| 70 | Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); | ||
| 71 | } | ||
| 72 | } | ||
| 73 | |||
| 74 | public static String getArg(int arg, String[] args) { | ||
| 75 | if (args.length < (arg+1)) | ||
| 76 | { | ||
| 77 | System.out.println("Program requires 7 arguments and you only provided " + arg); | ||
| 78 | System.exit(1); | ||
| 79 | } | ||
| 80 | |||
| 81 | return args[arg]; | ||
| 82 | } | ||
| 83 | } | ||
