/** * 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"; } }