summaryrefslogtreecommitdiff
path: root/foreign/client_handling/lazagne/softwares/php/composer.py
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)