]> WPIA git - gigi.git/blob - src/org/cacert/gigi/DevelLauncher.java
e83ae4145f3d47d955c5b087a9e23b27479eb882
[gigi.git] / src / org / cacert / gigi / DevelLauncher.java
1 package org.cacert.gigi;
2
3 import java.io.BufferedReader;
4 import java.io.ByteArrayInputStream;
5 import java.io.ByteArrayOutputStream;
6 import java.io.DataOutputStream;
7 import java.io.File;
8 import java.io.FileInputStream;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.io.InputStreamReader;
12 import java.io.OutputStream;
13 import java.nio.file.Files;
14 import java.nio.file.Paths;
15 import java.util.Properties;
16
17 import org.kamranzafar.jtar.TarEntry;
18 import org.kamranzafar.jtar.TarHeader;
19 import org.kamranzafar.jtar.TarOutputStream;
20
21 public class DevelLauncher {
22
23     public static final boolean DEVEL = true;
24
25     public static void main(String[] args) throws Exception {
26         Properties mainProps = new Properties();
27         mainProps.load(new FileInputStream("config/gigi.properties"));
28         for (int i = 0; i < args.length; i++) {
29             if (args[i].equals("--port")) {
30                 mainProps.setProperty("port", args[i + 1]);
31             }
32             i++;
33         }
34
35         ByteArrayOutputStream chunkConfig = new ByteArrayOutputStream();
36         DataOutputStream dos = new DataOutputStream(chunkConfig);
37         byte[] cacerts = Files.readAllBytes(Paths.get("config/cacerts.jks"));
38         byte[] keystore = Files.readAllBytes(Paths.get("config/keystore.pkcs12"));
39
40         DevelLauncher.writeGigiConfig(dos, "changeit".getBytes(), "changeit".getBytes(), mainProps, cacerts, keystore);
41         dos.flush();
42         InputStream oldin = System.in;
43         System.setIn(new ByteArrayInputStream(chunkConfig.toByteArray()));
44         Launcher.main(args);
45         System.setIn(oldin);
46         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
47         System.out.println("Cacert-gigi system sucessfully started.");
48         System.out.println("Press enter to shutdown.");
49         br.readLine();
50         System.exit(0);
51     }
52
53     public static void writeGigiConfig(OutputStream target, byte[] keystorepw, byte[] truststorepw, Properties mainprop, byte[] cacerts, byte[] keystore) throws IOException {
54         TarOutputStream tos = new TarOutputStream(target);
55         ByteArrayOutputStream baos = new ByteArrayOutputStream();
56         mainprop.store(baos, "");
57
58         putTarEntry(baos.toByteArray(), tos, "gigi.properties");
59         putTarEntry(keystorepw, tos, "keystorepw");
60         putTarEntry(truststorepw, tos, "truststorepw");
61         putTarEntry(keystore, tos, "keystore.pkcs12");
62         putTarEntry(cacerts, tos, "cacerts.jks");
63         tos.close();
64
65     }
66
67     private static void putTarEntry(byte[] data, TarOutputStream tos, String name) throws IOException {
68         TarHeader th = new TarHeader();
69         th.name = new StringBuffer(name);
70         th.size = data.length;
71         tos.putNextEntry(new TarEntry(th));
72         tos.write(data);
73     }
74
75     public static void writeChunk(DataOutputStream dos, byte[] chunk) throws IOException {
76         dos.writeInt(chunk.length);
77         dos.write(chunk);
78     }
79
80     public static void launch(Properties props, File cacerts, File keystore) throws IOException {
81         ByteArrayOutputStream config = new ByteArrayOutputStream();
82         props.store(config, "");
83     }
84 }