Instantly share code, notes, and snippets.
Created
July 20, 2018 08:15
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save yuercl/62f486030bed556430bc001c8ae7b409 to your computer and use it in GitHub Desktop.
export navicat<ncx export file> into sequel pro
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.chinaway; | |
import com.alibaba.fastjson.JSONObject; | |
import com.google.common.collect.Lists; | |
import org.apache.commons.lang3.RandomUtils; | |
import org.w3c.dom.Document; | |
import org.w3c.dom.NamedNodeMap; | |
import org.w3c.dom.Node; | |
import org.w3c.dom.NodeList; | |
import javax.xml.parsers.DocumentBuilder; | |
import javax.xml.parsers.DocumentBuilderFactory; | |
import javax.xml.parsers.ParserConfigurationException; | |
import java.util.List; | |
/** | |
* @see https://github.com/DoubleLabyrinth/how-does-navicat-encrypt-password | |
*/ | |
public class ExportFromNavicatIntoSequelPro { | |
private static DocumentBuilder db = null; | |
static { | |
try { | |
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); | |
db = dbFactory.newDocumentBuilder(); | |
} catch (ParserConfigurationException e) { | |
e.printStackTrace(); | |
} | |
} | |
public static List<JSONObject> convert(String fileName) throws Exception { | |
Document document = db.parse(fileName); | |
NodeList connections = document.getElementsByTagName("Connection"); | |
StringBuilder sb = new StringBuilder(); | |
StringBuilder passwordTable = new StringBuilder(); | |
for (int i = 0; i < connections.getLength(); i++) { | |
Node node = connections.item(i); | |
NamedNodeMap namedNodeMap = node.getAttributes(); | |
String connectionName = namedNodeMap.getNamedItem("ConnectionName").getNodeValue(); | |
String host = namedNodeMap.getNamedItem("Host").getNodeValue(); | |
String port = namedNodeMap.getNamedItem("Port").getNodeValue(); | |
String userName = namedNodeMap.getNamedItem("UserName").getNodeValue(); | |
String password = namedNodeMap.getNamedItem("Password").getNodeValue(); | |
String originPassword = Navicat12Cipher.class.newInstance().DecryptStringForNCX(password); | |
String SSH_PrivateKey = namedNodeMap.getNamedItem("SSH_PrivateKey").getNodeValue(); | |
String SSH_UserName = namedNodeMap.getNamedItem("SSH_UserName").getNodeValue(); | |
String SSH_Host = namedNodeMap.getNamedItem("SSH_Host").getNodeValue(); | |
String SSH_Port = namedNodeMap.getNamedItem("SSH_Port").getNodeValue(); | |
String x = plist(connectionName, host, port, userName, originPassword, SSH_PrivateKey, SSH_UserName, SSH_Host, SSH_Port); | |
passwordTable.append(connectionName).append("\t").append(originPassword).append("\n"); | |
sb.append(x); | |
} | |
System.out.println(sb.toString()); | |
System.out.println(passwordTable.toString()); | |
return Lists.newArrayList(); | |
} | |
private static String plist(String connectionName, String host, String port, String userName, String originPassword, String SSH_PrivateKey, String SSH_UserName, String SSH_Host, String SSH_Port) { | |
String x = "<dict>\n" + | |
" <key>colorIndex</key>\n" + | |
" <integer>-1</integer>\n" + | |
" <key>database</key>\n" + | |
" <string></string>\n" + | |
" <key>host</key>\n" + | |
" <string>" + host + "</string>\n" + | |
" <key>id</key>\n" + | |
" <integer>" + RandomUtils.nextLong(0, Long.MAX_VALUE) + "</integer>\n" + | |
" <key>name</key>\n" + | |
" <string>" + connectionName + "</string>\n" + | |
" <key>port</key>\n" + | |
" <string>" + port + "</string>\n" + | |
" <key>socket</key>\n" + | |
" <string></string>\n" + | |
" <key>sshHost</key>\n" + | |
" <string>" + SSH_Host + "</string>\n" + | |
" <key>sshKeyLocation</key>\n" + | |
" <string>" + SSH_PrivateKey + "</string>\n" + | |
" <key>sshKeyLocationEnabled</key>\n" + | |
" <integer>0</integer>\n" + | |
" <key>sshPort</key>\n" + | |
" <string>" + SSH_Port + "</string>\n" + | |
" <key>sshUser</key>\n" + | |
" <string>" + SSH_UserName + "</string>\n" + | |
" <key>sslCACertFileLocation</key>\n" + | |
" <string></string>\n" + | |
" <key>sslCACertFileLocationEnabled</key>\n" + | |
" <integer>0</integer>\n" + | |
" <key>sslCertificateFileLocation</key>\n" + | |
" <string></string>\n" + | |
" <key>sslCertificateFileLocationEnabled</key>\n" + | |
" <integer>0</integer>\n" + | |
" <key>sslKeyFileLocation</key>\n" + | |
" <string></string>\n" + | |
" <key>sslKeyFileLocationEnabled</key>\n" + | |
" <integer>0</integer>\n" + | |
" <key>type</key>\n" + | |
" <integer>0</integer>\n" + | |
" <key>useSSL</key>\n" + | |
" <integer>0</integer>\n" + | |
" <key>user</key>\n" + | |
" <string>" + userName + "</string>\n" + | |
" </dict>"; | |
return x; | |
} | |
public static void main(String args[]) throws Exception { | |
String fileName = "/Users/.../Desktop/connections.ncx"; | |
List<JSONObject> list = ExportFromNavicatIntoSequelPro.convert(fileName); | |
for (JSONObject book : list) { | |
System.out.println(book.toJSONString()); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment