/**
* Copyright (c) 2013 LEAP Encryption Access Project and contributers
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package se.leap.bitmaskclient.eip;
import android.content.SharedPreferences;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Iterator;
import se.leap.bitmaskclient.Provider;
public class VpnConfigGenerator {
private JSONObject general_configuration;
private JSONObject gateway;
private JSONObject secrets;
public final static String TAG = VpnConfigGenerator.class.getSimpleName();
private final String new_line = System.getProperty("line.separator"); // Platform new line
public VpnConfigGenerator(JSONObject general_configuration, JSONObject secrets, JSONObject gateway) {
this.general_configuration = general_configuration;
this.gateway = gateway;
this.secrets = secrets;
}
public String generate() {
return
generalConfiguration()
+ new_line
+ gatewayConfiguration()
+ new_line
+ secretsConfiguration()
+ new_line
+ androidCustomizations();
}
private String generalConfiguration() {
String common_options = "";
try {
Iterator keys = general_configuration.keys();
while ( keys.hasNext() ){
String key = keys.next().toString();
common_options += key + " ";
for ( String word : general_configuration.getString(key).split(" ") )
common_options += word + " ";
common_options += new_line;
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
common_options += "client";
return common_options;
}
private String gatewayConfiguration() {
String remotes = "";
String ip_address_keyword = "ip_address";
String remote_keyword = "remote";
String ports_keyword = "ports";
String protocol_keyword = "protocols";
String capabilities_keyword = "capabilities";
String udp = "udp";
try {
String ip_address = gateway.getString(ip_address_keyword);
JSONObject capabilities = gateway.getJSONObject(capabilities_keyword);
JSONArray ports = capabilities.getJSONArray(ports_keyword);
for (int i=0; i";
String key =
""
+ new_line
+ secrets.getString(Constants.PRIVATE_KEY)
+ new_line
+ "";
String openvpn_cert =
""
+ new_line
+ secrets.getString(Constants.CERTIFICATE)
+ new_line
+ "";
return ca + new_line + key + new_line + openvpn_cert;
} catch(JSONException e) {
e.printStackTrace();
return "";
}
}
private String androidCustomizations() {
return
"remote-cert-tls server"
+ new_line
+ "persist-tun"
+ new_line
+ "auth-retry nointeract";
}
}