Bypass user .wgetrc config file use when ATOMS uses no proxy.
[scilab.git] / scilab / modules / atoms / macros / atomsGetConfig.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 // Copyright (C) 2021 - DIGITEO - Allan CORNET
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10 //
11 // Get the configuration of the atoms system
12 //
13 function result = atomsGetConfig(field)
14
15     rhs = argn(2);
16
17     // Check number of input arguments
18     // =========================================================================
19     if rhs > 1 then
20         error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"), "atomsGetConfig", 0, 1));
21     end
22
23     // Check input parameters type
24     // =========================================================================
25     if (rhs > 0) & (type(field) <> 10) then
26         error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"), "atomsGetConfig", 1));
27     end
28
29     // Check input parameters dimensions
30     // =========================================================================
31     if (rhs > 0) & (size(field, "*") <> 1) then
32         error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"), "atomsGetConfig", 1));
33     end
34
35
36     if rhs <> 0 then
37         supported_field = ["useProxy", "proxyHost", "proxyPort", ..
38         "proxyUser", "proxyPassword", "offline", ..
39         "autoload", "autoloadAddAfterInstall", ..
40         "verbose", "downloadTool", "downloadTimeout", "updateTime"];
41
42         if ~or(convstr(supported_field) == convstr(field)) then
43             error(msprintf(gettext("%s: Wrong value for input argument #%d.\n"),"atomsGetConfig", 1));
44         end
45     end
46
47     pref_attrs = ["useProxy", "proxyHost", "proxyPort", "proxyUser", "proxyPassword";
48     "enabled", "host", "port", "user", "password"];
49
50     // Load Atoms Internals lib if it's not already loaded
51     // =========================================================================
52     if ~ exists("atomsinternalslib") then
53         load("SCI/modules/atoms/macros/atoms_internals/lib");
54     end
55
56     // Define the default value of the result according to the number of input
57     // arguments
58     // =========================================================================
59
60     if rhs == 0 then
61         result = struct();
62     else
63         i = find(pref_attrs(1, :) == field);
64         if ~isempty(i) then
65             result = getPreferencesValue("//web/body/proxy", pref_attrs(2, i));
66             if result == "true" then
67                 result = "True";
68             elseif result == "false" then
69                 result = "False";
70             end
71             return;
72         end
73
74         result = "";
75     end
76
77     // Define the path of the file that will record the change
78     // =========================================================================
79     atoms_directory = atomsPath("system", "user");
80
81     // Does the SCIHOME/atoms/config exist, if yes load it
82     // =========================================================================
83
84     if fileinfo(atoms_directory + "config") <> [] then
85         config_lines = mgetl(atoms_directory + "config");
86     else
87         if (rhs == 0)
88             values = getPreferencesValue("//web/body/proxy", pref_attrs(2, :));
89             for i = 1:size(pref_attrs, "c")
90                 if ~isempty(values(i)) then
91                     if values(i) == "true" then
92                         values(i) = "True";
93                     elseif values(i) == "false" then
94                         values(i) = "False";
95                     end
96                     result(pref_attrs(1, i)) = values(i);
97                 end
98             end
99         end
100         return;
101     end
102
103     // Loop on each URL specified as input argument
104     // =========================================================================
105
106     for i=1:size(config_lines, "*")
107         if isempty( stripblanks(config_lines(i))) then
108             continue;
109         end
110
111         if regexp(config_lines(i),"/^[a-zA-Z0-9]*\s=\s/","o") == 1 then
112             // process field
113             current_field_length  = regexp(config_lines(i),"/\s=\s/","o")
114             current_field     = part(config_lines(i),1:current_field_length-1);
115             current_value     = part(config_lines(i),current_field_length+3:length(config_lines(i)));
116
117             if (rhs == 1) & (current_field == field) then
118                 result = current_value;
119                 return;
120             elseif(rhs == 0)
121                 result(current_field) = current_value;
122             end
123         else
124             error(msprintf(gettext("%s: The config file (''%s'') is not well formated at line %d\n"),"atomsGetConfig",atoms_directory+"config",i));
125         end
126     end
127
128     if (rhs == 0)
129         values = getPreferencesValue("//web/body/proxy", pref_attrs(2, :));
130         for i = 1:size(pref_attrs, "c")
131             if ~isempty(values(i)) then
132                 if values(i) == "true" then
133                     values(i) = "True";
134                 elseif values(i) == "false" then
135                     values(i) = "False";
136                 end
137                 result(pref_attrs(1, i)) = values(i);
138             end
139         end
140     end
141
142 endfunction