]> git.sur5r.net Git - bacula/bacula/blob - gui/baculum/protected/API/Pages/Panel/APIInstallWizard.page
bc0e7f4f9dad2432a3bab289a7002bc1ad4f2b77
[bacula/bacula] / gui / baculum / protected / API / Pages / Panel / APIInstallWizard.page
1 <%@ MasterClass="Application.API.Layouts.Wizard" Theme="Baculum-v1"%>
2 <com:TContent ID="Wizard">
3         <com:TClientScript ScriptUrl=<%~ ../../JavaScript/misc.js %> />
4         <com:TWizard ID="InstallWizard"
5                 CssClass="wizard"
6                 StepStyle.CssClass="steps"
7                 HeaderStyle.CssClass="header"
8                 NavigationStyle.CssClass="navigation"
9                 UseDefaultLayout="false"
10                 ShowSideBar="false"
11                 OnCancelButtonClick="wizardStop"
12                 OnCompleteButtonClick="wizardCompleted"
13                 >
14                 <prop:HeaderTemplate>
15                         <div>
16                                 <div class="step step-<%=($this->Parent->ActiveStepIndex === 0) ? 'first-active' : (($this->Parent->ActiveStepIndex === 1) ? 'first-next-active' : 'first')%>">
17                                         <div><com:TTranslate Text="Language" /></div>
18                                 </div>
19                                 <div class="step step-<%=($this->Parent->ActiveStepIndex === 1) ? 'active' : (($this->Parent->ActiveStepIndex === 2) ? 'prev-active' : 'normal')%>">
20                                         <div><com:TTranslate Text="Catalog API" /></div>
21                                 </div>
22                                  <div class="step step-<%=($this->Parent->ActiveStepIndex === 2) ? 'active' : (($this->Parent->ActiveStepIndex === 3) ? 'prev-active' : 'normal')%>">
23                                         <div><com:TTranslate Text="Console API" /></div>
24                                 </div>
25                                 <div class="step step-<%=($this->Parent->ActiveStepIndex === 3) ? 'active' : (($this->Parent->ActiveStepIndex === 4) ? 'prev-active' : 'normal')%>">
26                                         <div><com:TTranslate Text="Config API" /></div>
27                                 </div>
28                                 <div class="step step-<%=($this->Parent->ActiveStepIndex === 4) ? 'active' : (($this->Parent->ActiveStepIndex === 5) ? 'prev-active' : 'normal')%>">
29                                         <div><com:TTranslate Text="Authorization" /></div>
30                                 </div>
31                                 <div class="step step-<%=($this->Parent->ActiveStepIndex === 5) ? 'last-active' : (($this->Parent->ActiveStepIndex === 6) ? 'last-prev-active' : 'last')%>">
32                                         <div><com:TTranslate Text="Finish" /></div>
33                                 </div>
34                                 <div id="title"><%=$this->Parent->ActiveStep->Title%><div>
35                         </div>
36                 </prop:HeaderTemplate>
37                 <prop:StartNavigationTemplate>
38                                 <com:TPanel CssClass="button-cancel" Visible="<%=$this->getPage()->first_run === false%>"><com:BButton CommandName="Cancel" Text="<%[ Cancel ]%>" /></com:TPanel>
39                                 <div <%=$this->getPage()->first_run === false ? 'class="button-prev-next"' : ''%>><com:BButton CommandName="NextStep" Text="<%[ Next &raquo; ]%>" /></div>
40                 </prop:StartNavigationTemplate>
41
42                 <prop:StepNavigationTemplate>
43                         <com:TPanel CssClass="button-cancel" Visible="<%=$this->getPage()->first_run === false%>"><com:BButton CommandName="Cancel" Text="<%[ Cancel ]%>" /></com:TPanel>
44                         <div <%=$this->getPage()->first_run === false ? 'class="button-prev-next"' : ''%>>
45                                 <com:BButton CausesValidation="False" CssClass="bbutton" CommandName="PreviousStep" Text="<%[ &laquo; Previous ]%>" />
46                                 <com:BButton ID="NextButton" CommandName="NextStep" Attributes.onclick="return (wizard_validation) ? wizard_validation() : true;" Text="<%[ Next &raquo; ]%>" />
47                         </div>
48                 </prop:StepNavigationTemplate>
49                 <prop:FinishNavigationTemplate>
50                         <com:TPanel CssClass="button-cancel" Visible="<%=$this->getPage()->first_run === false%>"><com:BButton CommandName="Cancel" Text="<%[ Cancel ]%>" /></com:TPanel>
51                         <div <%=$this->getPage()->first_run === false ? 'class="button-prev-next"' : ''%>>
52                                 <com:BButton CausesValidation="False" CssClass="bbutton" CommandName="PreviousStep" Text="<%[ &laquo; Previous ]%>" />
53                                 <com:BButton CommandName="Complete" Text="<%[ Save ]%>" />
54                         </div>
55                 </prop:FinishNavigationTemplate>
56                 <com:TWizardStep ID="Step1" Title="<%[ Step 1 - select language ]%>" StepType="Auto">
57                         <div class="line">
58                                 <div class="text"><com:TLabel ForControl="Lang" Text="<%[ Language: ]%>" /></div>
59                                 <div class="field">
60                                         <com:TActiveDropDownList ID="Lang" CssClass="textbox" Width="150px" OnTextChanged="setLang" CausesValidation="false" ClientSide.OnComplete="location.reload();">
61                                                 <com:TListItem Value="en" Text="<%[ English ]%>" />
62                                                 <com:TListItem Value="pl" Text="<%[ Polish ]%>" />
63                                                 <com:TListItem Value="pt" Text="<%[ Portuguese ]%>" />
64                                         </com:TActiveDropDownList>
65                                         <com:TCompareValidator CssClass="validator-block" Display="Dynamic" ControlToValidate="Lang" DataType="String" ValueToCompare="none" Operator="NotEqual" Text="<%[ Please select language. ]%>" />
66                                 </div>
67                         </div>
68                 </com:TWizardStep>
69                 <com:TWizardStep ID="Step2" Title="<%[ Step 2 - share the Bacula Catalog Database ]%>" StepType="Auto">
70                         <p><%[ Do you want to setup and to share the Bacula Catalog Database access for this API instance? ]%></p>
71                         <div class="line">
72                                 <com:TRadioButton ID="DatabaseNo" GroupName="SelectDatabase" Attributes.onclick="$('#configure_database').hide();" /> <com:TLabel ForControl="DatabaseNo" Text="<%[ No ]%>" />
73                         </div>
74                         <div class="line">
75                                 <com:TRadioButton ID="DatabaseYes" GroupName="SelectDatabase" Attributes.onclick="$('#configure_database').show();" /> <com:TLabel ForControl="DatabaseYes" Text="<%[ Yes ]%>" />
76                         </div>
77                         <div id="configure_database" style="display: <%=($this->DatabaseYes->Checked === true) ? '' : 'none';%>">
78                                 <com:TActivePanel ID="Step2Content">
79                                         <div class="line">
80                                                 <div class="text"><com:TLabel ForControl="DBType" Text="<%[ Database type: ]%>" /></div>
81                                                 <div class="field">
82                                                         <com:TActiveDropDownList
83                                                                 ID="DBType"
84                                                                 CssClass="textbox"
85                                                                 Width="170px"
86                                                                 OnLoad="setDBType"
87                                                                 OnTextChanged="setDBType"
88                                                                 CausesValidation="false"
89                                                                 OnCallback="renderPanel"
90                                                         >
91                                                                 <com:TListItem Value="none" Text="<%[ select database ]%>" />
92                                                                 <com:TListItem Value="pgsql" Text="PostgreSQL" />
93                                                                 <com:TListItem Value="mysql" Text="MySQL" />
94                                                                 <com:TListItem Value="sqlite" Text="SQLite" />
95                                                         </com:TActiveDropDownList>
96                                                         <com:TCompareValidator
97                                                                 CssClass="validator-block"
98                                                                 Display="Dynamic"
99                                                                 ControlToValidate="DBType"
100                                                                 DataType="String"
101                                                                 ValueToCompare="none"
102                                                                 Operator="NotEqual"
103                                                                 ValidationGroup="DbGroup"
104                                                                 Text="<%[ Please select database type. ]%>"
105                                                         />
106                                                 </div>
107                                         </div>
108                                         <div class="line">
109                                                 <div class="text"><com:TLabel ForControl="DBName" Text="<%[ Database name: ]%>" /></div>
110                                                 <div class="field">
111                                                         <com:TTextBox ID="DBName" CssClass="textbox" />
112                                                         <com:TRequiredFieldValidator
113                                                                 CssClass="validator-block"
114                                                                 Display="Dynamic"
115                                                                 ControlCssClass="invalidate"
116                                                                 ControlToValidate="DBName"
117                                                                 ValidationGroup="DbGroup"
118                                                                 Text="<%[ Please enter database name. ]%>"
119                                                         />
120                                                 </div>
121                                         </div>
122                                         <div class="line">
123                                                 <div class="text"><com:TLabel ForControl="Login" Text="<%[ Login: ]%>" /></div>
124                                                 <div class="field">
125                                                         <com:TActiveTextBox ID="Login" CssClass="textbox" />
126                                                         <com:TRequiredFieldValidator
127                                                                 ID="LoginValidator"
128                                                                 CssClass="validator-block"
129                                                                 Display="Dynamic"
130                                                                 ControlCssClass="invalidate"
131                                                                 ControlToValidate="Login"
132                                                                 ValidationGroup="DbGroup"
133                                                                 Text="<%[ Please enter login. ]%>"
134                                                         />
135                                                 </div>
136                                         </div>
137                                         <div class="line">
138                                                 <div class="text"><com:TLabel ForControl="Password" Text="<%[ Password: ]%>" /></div>
139                                                 <div class="field"><com:TActiveTextBox
140                                                         ID="Password"
141                                                         CssClass="textbox"
142                                                         TextMode="Password"
143                                                         PersistPassword="true"
144                                                  /></div>
145                                         </div>
146                                         <div class="line">
147                                                 <div class="text"><com:TLabel ForControl="IP" Text="<%[ IP address (or hostname): ]%>" /></div>
148                                                 <div class="field">
149                                                         <com:TActiveTextBox ID="IP" CssClass="textbox" />
150                                                         <com:TRequiredFieldValidator
151                                                                 ID="IPValidator"
152                                                                 CssClass="validator-block"
153                                                                 Display="Dynamic"
154                                                                 ControlCssClass="invalidate"
155                                                                 ControlToValidate="IP"
156                                                                 ValidationGroup="DbGroup"
157                                                                 Text="<%[ Please enter IP address or hostname. ]%>"
158                                                         />
159                                                 </div>
160                                         </div>
161                                         <div class="line">
162                                                 <div class="text"><com:TLabel ForControl="Port" Text="<%[ Port: ]%>" /></div>
163                                                 <div class="field">
164                                                         <com:TActiveTextBox ID="Port" CssClass="textbox" Width="55px" MaxLength="5" Enabled="false" />
165                                                         <com:TRequiredFieldValidator
166                                                                 ID="PortValidator"
167                                                                 CssClass="validator-block"
168                                                                 Display="Dynamic"
169                                                                 ControlCssClass="invalidate"
170                                                                 ControlToValidate="Port"
171                                                                 ValidationGroup="DbGroup"
172                                                                 Text="<%[ Please enter database port. ]%>"
173                                                         />
174                                                 </div>
175                                         </div>
176                                         <com:TActivePanel
177                                                 ID="DBPathField"
178                                                 CssClass="line"
179                                                 Display="<%=$this->getPage()->first_run === false && !$this->IsCallBack && $this->getPage()->config['db']['type'] == 'sqlite' ? 'Fixed' : $this->DBPathField->Display%>">
180                                                 <div class="text"><com:TLabel ForControl="DBPath" Text="<%[ SQLite database path: ]%>" /></div>
181                                                 <div class="field">
182                                                         <com:TActiveTextBox ID="DBPath" CssClass="textbox" Enabled="false" />
183                                                         <com:TRequiredFieldValidator
184                                                                 ID="DBPathValidator"
185                                                                 Display="Dynamic"
186                                                                 CssClass="validator-block"
187                                                                 ControlCssClass="invalidate"
188                                                                 ControlToValidate="DBPath"
189                                                                 ValidationGroup="DbGroup"
190                                                                 Text="<%[ Please enter database path. ]%>"
191                                                         />
192                                                 </div>
193                                         </com:TActivePanel>
194                                         <div class="line">
195                                                 <div class="text"><com:TLabel ForControl="ConnectionTest" Text="<%[ Connection test: ]%>" /></div>
196                                                 <div class="field">
197                                                         <table border="0" cellpadding="1px">
198                                                                 <tr>
199                                                                         <td align="center" valign="middle">
200                                                                                 <com:TActiveButton ID="ConnectionTest" Text="<%[ test ]%>" CausesValidation="false" OnCallback="connectionDBTest">
201                                                                                         <prop:ClientSide.OnLoading>
202                                                                                                 $('#<%=$this->DbTestResultOk->ClientID%>').hide();
203                                                                                                 $('#<%=$this->DbTestResultErr->ClientID%>').hide();
204                                                                                                 $('#<%=$this->DbTestLoader->ClientID%>').show();
205                                                                                         </prop:ClientSide.OnLoading>
206                                                                                         <prop:ClientSide.OnComplete>
207                                                                                                 $('#<%=$this->DbTestLoader->ClientID%>').hide();
208                                                                                         </prop:ClientSide.OnComplete>
209                                                                                 </com:TActiveButton>
210                                                                         </td>
211                                                                         <td align="center" valign="middle">
212                                                                                 <com:TActiveLabel ID="DbTestLoader" Display="None"><img src="<%=$this->getTheme()->getBaseUrl()%>/ajax-loader.gif" alt="<%[ Loading... ]%>" /></com:TActiveLabel>
213                                                                                 <com:TActiveLabel ID="DbTestResultOk" Display="None" CssClass="validate"><img src="<%=$this->getTheme()->getBaseUrl()%>/icon_ok.png" alt="Validate" /> <%[ OK ]%></com:TActiveLabel>
214                                                                                 <com:TActiveLabel ID="DbTestResultErr" Display="None" CssClass="validator-block left"><img src="<%=$this->getTheme()->getBaseUrl()%>/icon_err.png" alt="Invalidate" /> <%[ Connection error ]%></com:TActiveLabel>
215                                                                         </td>
216                                                                 </tr>
217                                                         </table>
218                                                 </div>
219                                         </div>
220                                         <div style="clear: left"></div>
221                                 </com:TActivePanel>
222                         </div>
223                         <script type="text/javascript">
224                                 var wizard_validation = function() {
225                                         var result = true;
226                                         var db = document.getElementById('<%=$this->DatabaseYes->ClientID%>');
227                                         if (db.checked) {
228                                                 result = Prado.Validation.validate(Prado.Validation.getForm(), 'DbGroup');
229                                         }
230                                         return result;
231                                 }
232                         </script>
233                 </com:TWizardStep>
234                 <com:TWizardStep ID="Step3" Title="<%[ Step 3 - share the Bacula Bconsole commands interface ]%>" StepType="Auto">
235                         <p><%[ Do you want to setup and share the Bacula Bconsole interface to execute commands in this API instance? ]%></p>
236                         <div class="line">
237                                 <com:TRadioButton ID="ConsoleNo" GroupName="SelectConsole" Attributes.onclick="$('#configure_console').hide();" /> <com:TLabel ForControl="ConsoleNo" Text="<%[ No ]%>" />
238                         </div>
239                         <div class="line">
240                                 <com:TRadioButton ID="ConsoleYes" GroupName="SelectConsole" Attributes.onclick="$('#configure_console').show();" /> <com:TLabel ForControl="ConsoleYes" Text="<%[ Yes ]%>" />
241                         </div>
242                         <div id="configure_console" style="display: <%=($this->ConsoleYes->Checked === true) ? '' : 'none';%>">
243                                 <div class="line">
244                                         <div class="text"><com:TLabel ForControl="BconsolePath" Text="<%[ Bconsole binary file path: ]%>" /></div>
245                                         <div class="field">
246                                                 <com:TTextBox ID="BconsolePath" CssClass="textbox" CausesValidation="false" />
247                                                 <com:TRequiredFieldValidator CssClass="validator-block" Display="Dynamic" ControlCssClass="invalidate" ControlToValidate="BconsolePath" Text="<%[ Please enter bconsole path. ]%>" />
248                                         </div>
249                                 </div>
250                                 <div class="line">
251                                         <div class="text"><com:TLabel ForControl="BconsoleConfigPath" Text="<%[ Bconsole admin config file path: ]%>" /></div>
252                                         <div class="field">
253                                                 <com:TTextBox ID="BconsoleConfigPath" CssClass="textbox" CausesValidation="false" />
254                                                 <com:TRequiredFieldValidator CssClass="validator-block" Display="Dynamic" ControlCssClass="invalidate" ControlToValidate="BconsoleConfigPath" Text="<%[ Please enter bconsole config file path. ]%>" />
255                                         </div>
256                                 </div>
257                                 <div class="line">
258                                         <div class="text"><com:TLabel ForControl="UseSudo" Text="<%[ Use sudo: ]%>" /></div>
259                                         <div class="field">
260                                                 <com:TCheckBox ID="UseSudo" />
261                                         </div>
262                                 </div>
263                                 <div class="line">
264                                         <div class="text"><com:TLabel ForControl="BconsoleConnectionTest" Text="<%[ Bconsole connection test: ]%>" /></div>
265                                         <div class="field">
266                                                 <table border="0" cellpadding="1px">
267                                                         <tr>
268                                                                 <td  align="center" valign="middle">
269                                                                         <com:TActiveButton ID="BconsoleConnectionTest" Text="<%[ test ]%>" CausesValidation="false" OnCallback="connectionBconsoleTest">
270                                                                                 <prop:ClientSide.OnLoading>
271                                                                                         $('#<%=$this->BconsoleTestResultOk->ClientID%>').hide();
272                                                                                         $('#<%=$this->BconsoleTestResultErr->ClientID%>').hide();
273                                                                                         $('#<%=$this->BconsoleTestLoader->ClientID%>').show();
274                                                                                 </prop:ClientSide.OnLoading>
275                                                                                 <prop:ClientSide.OnComplete>
276                                                                                         $('#<%=$this->BconsoleTestLoader->ClientID%>').hide();
277                                                                                 </prop:ClientSide.OnComplete>
278                                                                         </com:TActiveButton>
279                                                                 </td>
280                                                                 <td align="center" valign="middle">
281                                                                         <com:TActiveLabel ID="BconsoleTestLoader" Display="None"><img src="<%=$this->getTheme()->getBaseUrl()%>/ajax-loader.gif" alt="<%[ Loading... ]%>" /></com:TActiveLabel>
282                                                                         <com:TActiveLabel ID="BconsoleTestResultOk" Display="None" CssClass="validate" EnableViewState="false"><img src="<%=$this->getTheme()->getBaseUrl()%>/icon_ok.png" alt="Validate" /> <%[ OK ]%></com:TActiveLabel>
283                                                                         <com:TActiveLabel ID="BconsoleTestResultErr" Display="None" CssClass="validator-block left" EnableViewState="false"><img src="<%=$this->getTheme()->getBaseUrl()%>/icon_err.png" alt="Invalidate" /> <%[ Connection error ]%></com:TActiveLabel>
284                                                                 </td>
285                                                         </tr>
286                                                 </table>
287                                         </div>
288                                 </div>
289                                 <div class="line">
290                                         <span><b><%[ NOTE! ]%></b><br /><em><%[ Baculum needs access to bconsole by the web server. ]%></em></span>
291                                 </div>
292                         </div>
293                 </com:TWizardStep>
294                 <com:TWizardStep ID="Step4" Title="<%[ Step 4 - share the Bacula configuration interface ]%>" StepType="Auto">
295                         <p><%[ Do you want to setup and share the Bacula configuration interface to configure Bacula components via this API instance? ]%></p>
296                         <div class="line">
297                                 <com:TRadioButton ID="ConfigNo" GroupName="SelectConfig" Attributes.onclick="$('#configure_config').hide();" /> <com:TLabel ForControl="ConfigNo" Text="<%[ No ]%>" />
298                         </div>
299                         <div class="line">
300                                 <com:TRadioButton ID="ConfigYes" GroupName="SelectConfig" Attributes.onclick="$('#configure_config').show();" /> <com:TLabel ForControl="ConfigYes" Text="<%[ Yes ]%>" />
301                         </div>
302                         <div id="configure_config" style="display: <%=($this->ConfigYes->Checked === true) ? '' : 'none';%>">
303                                 <div id="config_fields">
304                                         <fieldset class="config_field">
305                                                 <legend><%[ General configuration ]%></legend>
306                                                 <div class="config_lines">
307                                                         <div class="line">
308                                                                 <div class="text"><com:TLabel ForControl="BConfigDir" Text="<%[ Directory path for new config files: ]%>" /></div>
309                                                                 <div class="field">
310                                                                         <com:TRequiredFieldValidator ValidationGroup="ConfigGroup" ControlToValidate="BConfigDir" Display="Dynamic" Text="<%[ Directory path field is required. ]%>" />
311                                                                         <com:TActiveCustomValidator ID="BConfigDirWritableTest" ValidationGroup="ConfigGroup" ControlToValidate="BConfigDir" ErrorMessage="<%[ Provided directory path is not writable by web server. ]%>" ControlCssClass="validation-error" Display="Dynamic" OnServerValidate="testConfigDir" />
312                                                                         <com:TTextBox ID="BConfigDir" CssClass="textbox" />
313                                                                 </div>
314                                                         </div>
315                                                         <div class="line">
316                                                                 <div class="text"><com:TLabel ForControl="BJSONUseSudo" Text="<%[ Use sudo: ]%>" /></div>
317                                                                 <div class="field">
318                                                                         <com:TCheckBox ID="BJSONUseSudo" />
319                                                                 </div>
320                                                         </div>
321                                                 </div>
322                                                 <span class="config_test_loader" style="display: none"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/ajax-loader.gif" alt="<%[ Loading... ]%>" /></span>
323                                                 <com:TActiveLabel ID="BConfigDirTestOk" Display="None" CssClass="validate config_test_result" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_ok.png" alt="<%[ OK ]%>" /> <%[ OK ]%></com:TActiveLabel>
324                                                 <com:TActiveLabel ID="BConfigDirTestErr" Display="None" CssClass="validator left" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_err.png" alt="<%[ Error ]%>" /> <%[ Error ]%></com:TActiveLabel>
325                                         </fieldset>
326                                         <fieldset class="config_field">
327                                                 <legend>Director</legend>
328                                                 <div class="config_lines">
329                                                         <div class="line">
330                                                                 <div class="text"><com:TLabel ForControl="BDirJSONPath" Text="<%[ bdirjson binary file path: ]%>" /></div>
331                                                                 <div class="field">
332                                                                         <com:TCustomValidator ValidationGroup="ConfigGroup" ControlToValidate="BDirJSONPath" ClientValidationFunction="bjsontools_validator" Display="Dynamic" Text="<%[ There is required to provide both binary file and config file paths. ]%>" />
333                                                                         <com:TTextBox ID="BDirJSONPath" CssClass="textbox" />
334                                                                 </div>
335                                                         </div>
336                                                         <div class="line">
337                                                                 <div class="text"><com:TLabel ForControl="DirCfgPath" Text="<%[ Main Director config file path (usually bacula-dir.conf): ]%>" /></div>
338                                                                 <div class="field">
339                                                                         <com:TCustomValidator ValidationGroup="ConfigGroup" ControlToValidate="DirCfgPath" ClientValidationFunction="bjsontools_validator" Display="Dynamic" Text="<%[ There is required to provide both binary file and config file paths. ]%>" />
340                                                                         <com:TTextBox ID="DirCfgPath" CssClass="textbox" />
341                                                                 </div>
342                                                         </div>
343                                                 </div>
344                                                 <span class="config_test_loader" style="display: none"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/ajax-loader.gif" alt="<%[ Loading... ]%>" /></span>
345                                                 <com:TActiveLabel ID="BDirJSONPathTestOk" Display="None" CssClass="validate config_test_result" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_ok.png" alt="<%[ OK ]%>" /> <%[ OK ]%></com:TActiveLabel>
346                                                 <com:TActiveLabel ID="BDirJSONPathTestErr" Display="None" CssClass="validator left" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_err.png" alt="<%[ Connection error ]%>" /> <%[ Connection error ]%></com:TActiveLabel>
347                                         </fieldset>
348                                         <fieldset class="config_field">
349                                                 <legend>Storage Daemon</legend>
350                                                 <div class="config_lines">
351                                                         <div class="line">
352                                                                 <div class="text"><com:TLabel ForControl="BSdJSONPath" Text="<%[ bsdjson binary file path: ]%>" /></div>
353                                                                 <div class="field">
354                                                                         <com:TCustomValidator ValidationGroup="ConfigGroup" ControlToValidate="BSdJSONPath" ClientValidationFunction="bjsontools_validator" Display="Dynamic" Text="<%[ There is required to provide both binary file and config file paths. ]%>" />
355                                                                         <com:TTextBox ID="BSdJSONPath" CssClass="textbox" />
356                                                                 </div>
357                                                         </div>
358                                                         <div class="line">
359                                                                 <div class="text"><com:TLabel ForControl="SdCfgPath" Text="<%[ Main Storage Daemon config file path (usually bacula-sd.conf): ]%>" /></div>
360                                                                 <div class="field">
361                                                                         <com:TCustomValidator ValidationGroup="ConfigGroup" ControlToValidate="SdCfgPath" ClientValidationFunction="bjsontools_validator" Display="Dynamic" Text="<%[ There is required to provide both binary file and config file paths. ]%>" />
362                                                                         <com:TTextBox ID="SdCfgPath" CssClass="textbox" />
363                                                                 </div>
364                                                         </div>
365                                                 </div>
366                                                 <span class="config_test_loader" style="display: none"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/ajax-loader.gif" alt="<%[ Loading... ]%>" /></span>
367                                                 <com:TActiveLabel ID="BSdJSONPathTestOk" Display="None" CssClass="validate config_test_result" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_ok.png" alt="<%[ OK ]%>" /> <%[ OK ]%></com:TActiveLabel>
368                                                 <com:TActiveLabel ID="BSdJSONPathTestErr" Display="None" CssClass="validator left" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_err.png" alt="<%[ Connection error ]%>" /> <%[ Connection error ]%></com:TActiveLabel>
369                                         </fieldset>
370                                         <fieldset class="config_field">
371                                                 <legend>File Daemon/Client</legend>
372                                                 <div class="config_lines">
373                                                         <div class="line">
374                                                                 <div class="text"><com:TLabel ForControl="BFdJSONPath" Text="<%[ bfdjson binary file path: ]%>" /></div>
375                                                                 <div class="field">
376                                                                         <com:TCustomValidator ValidationGroup="ConfigGroup" ControlToValidate="BFdJSONPath" ClientValidationFunction="bjsontools_validator" Display="Dynamic" Text="<%[ There is required to provide both binary file and config file paths. ]%>" />
377                                                                         <com:TTextBox ID="BFdJSONPath" CssClass="textbox" />
378                                                                 </div>
379                                                         </div>
380                                                         <div class="line">
381                                                                 <div class="text"><com:TLabel ForControl="FdCfgPath" Text="<%[ Main File Daemon config file path (usually bacula-fd.conf): ]%>" /></div>
382                                                                 <div class="field">
383                                                                         <com:TCustomValidator ValidationGroup="ConfigGroup" ControlToValidate="FdCfgPath" ClientValidationFunction="bjsontools_validator" Display="Dynamic" Text="<%[ There is required to provide both binary file and config file paths. ]%>" />
384                                                                         <com:TTextBox ID="FdCfgPath" CssClass="textbox" />
385                                                                 </div>
386                                                         </div>
387                                                 </div>
388                                                 <span class="config_test_loader" style="display: none"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/ajax-loader.gif" alt="<%[ Loading... ]%>" /></span>
389                                                 <com:TActiveLabel ID="BFdJSONPathTestOk" Display="None" CssClass="validate config_test_result" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_ok.png" alt="<%[ OK ]%>" /> <%[ OK ]%></com:TActiveLabel>
390                                                 <com:TActiveLabel ID="BFdJSONPathTestErr" Display="None" CssClass="validator left" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_err.png" alt="<%[ Connection error ]%>" /> <%[ Connection error ]%></com:TActiveLabel>
391                                         </fieldset>
392                                         <fieldset class="config_field">
393                                                 <legend>Bconsole</legend>
394                                                 <div class="config_lines">
395                                                         <div class="line">
396                                                                 <div class="text"><com:TLabel ForControl="BBconsJSONPath" Text="<%[ bbconsjson binary file path: ]%>" /></div>
397                                                                 <div class="field">
398                                                                         <com:TCustomValidator ValidationGroup="ConfigGroup" ControlToValidate="BBconsJSONPath" ClientValidationFunction="bjsontools_validator" Display="Dynamic" Text="<%[ There is required to provide both binary file and config file paths. ]%>" />
399                                                                         <com:TTextBox ID="BBconsJSONPath" CssClass="textbox" />
400                                                                 </div>
401                                                         </div>
402                                                         <div class="line">
403                                                                 <div class="text"><com:TLabel ForControl="BconsCfgPath" Text="<%[ Admin Bconsole config file path (usually bconsole.conf): ]%>" /></div>
404                                                                 <div class="field">
405                                                                         <com:TCustomValidator ValidationGroup="ConfigGroup" ControlToValidate="BconsCfgPath" ClientValidationFunction="bjsontools_validator" Display="Dynamic" Text="<%[ There is required to provide both binary file and config file paths. ]%>" />
406                                                                         <com:TTextBox ID="BconsCfgPath" CssClass="textbox" />
407                                                                 </div>
408                                                         </div>
409                                                 </div>
410                                                 <span class="config_test_loader" style="display: none"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/ajax-loader.gif" alt="<%[ Loading... ]%>" /></span>
411                                                 <com:TActiveLabel ID="BBconsJSONPathTestOk" Display="None" CssClass="validate config_test_result" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_ok.png" alt="<%[ OK ]%>" /> <%[ OK ]%></com:TActiveLabel>
412                                                 <com:TActiveLabel ID="BBconsJSONPathTestErr" Display="None" CssClass="validator left" EnableViewState="false"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_err.png" alt="<%[ Connection error ]%>" /> <%[ Connection error ]%></com:TActiveLabel>
413                                         </fieldset>
414                                         <div class="left button">
415                                                 <com:BActiveButton ID="TestJSONToolsConfig" ValidationGroup="ConfigGroup" Text="<%[ Test configuration ]%>" OnClick="testJSONToolsCfg">
416                                                         <prop:ClientSide.OnLoading>
417                                                                 bjsontools_hide_test_results();
418                                                                 $('.config_test_loader').show();
419                                                         </prop:ClientSide.OnLoading>
420                                                         <prop:ClientSide.OnComplete>
421                                                                 $('.config_test_loader').hide();
422                                                         </prop:ClientSide.OnComplete>
423                                                 </com:BActiveButton>
424                                         </div>
425                                 </div>
426                         </div>
427                 </com:TWizardStep>
428                 <com:TWizardStep ID="Step5" Title="<%[ Step 5 - authorization to API ]%>" StepType="Auto">
429                         <div class="line">
430                                 <com:TActiveRadioButton
431                                         ID="AuthOAuth2"
432                                         GroupName="SelectAuth"
433                                         Attributes.onclick="$('#configure_basic_auth').hide();$('#configure_oauth2_auth').show();"
434                                         OnCallback="setOAuth2Validation"
435                                 />
436                                 <com:TLabel
437                                         ForControl="AuthOAuth2"
438                                         Text="<%[ Use OAuth2 for authorization and authentication ]%>"
439                                 />
440                         </div>
441                         <div class="line">
442                                 <com:TActiveRadioButton
443                                         ID="AuthBasic"
444                                         GroupName="SelectAuth"
445                                         Checked="true"
446                                         Attributes.onclick="$('#configure_oauth2_auth').hide();$('#configure_basic_auth').show();"
447                                         OnCallback="setBasicValidation"
448                                 />
449                                 <com:TLabel
450                                         ForControl="AuthBasic"
451                                         Text="<%[ Use HTTP Basic authentication ]%>"
452                                 />
453                         </div>
454                         <div id="configure_basic_auth" style="display: <%=($this->AuthBasic->Checked === true) ? '' : 'none';%>">
455                                 <div class="line">
456                                         <div class="text"><com:TLabel ForControl="APILogin" Text="<%[ Administration login: ]%>" /></div>
457                                         <div class="field">
458                                                 <com:TTextBox
459                                                         ID="APILogin"
460                                                         CssClass="textbox"
461                                                         CausesValidation="false"
462                                                 />
463                                                 <com:TRequiredFieldValidator
464                                                         CssClass="validator-block"
465                                                         Display="Dynamic"
466                                                         ControlCssClass="invalidate"
467                                                         ControlToValidate="APILogin"
468                                                         ValidationGroup="Basic"
469                                                         Text="<%[ Please enter login. ]%>"
470                                                 />
471                                                 <com:TRegularExpressionValidator
472                                                         CssClass="validator-block"
473                                                         Display="Dynamic"
474                                                         ControlCssClass="invalidate"
475                                                         ControlToValidate="APILogin"
476                                                         ValidationGroup="Basic"
477                                                         RegularExpression="<%=BasicAPIUserConfig::USER_PATTERN%>"
478                                                         Text="<%[ Invalid login value. Login may contain a-z A-Z 0-9 characters. ]%>"
479                                                 />
480                                         </div>
481                                 </div>
482                                 <div class="line">
483                                         <div class="text"><com:TLabel ForControl="APIPassword" Text="<%[ Administration password: ]%>" /></div>
484                                         <div class="field">
485                                                 <com:TTextBox
486                                                         ID="APIPassword"
487                                                         CssClass="textbox"
488                                                         TextMode="Password"
489                                                         MaxLength="30"
490                                                         PersistPassword="true"
491                                                 />
492                                                 <com:TRequiredFieldValidator
493                                                         CssClass="validator-block"
494                                                         Display="Dynamic"
495                                                         ControlCssClass="invalidate"
496                                                         ControlToValidate="APIPassword"
497                                                         ValidationGroup="Basic"
498                                                         Text="<%[ Please enter password. ]%>"
499                                                 />
500                                                 <com:TRegularExpressionValidator
501                                                         CssClass="validator-block"
502                                                         Display="Dynamic"
503                                                         ControlCssClass="invalidate"
504                                                         ControlToValidate="APIPassword"
505                                                         RegularExpression="[\S\s]{5,30}"
506                                                         ValidationGroup="Basic"
507                                                         Text="<%[ Password must be longer than 4 chars. ]%>"
508                                                 />
509                                         </div>
510                                 </div>
511                                 <div class="line">
512                                         <div class="text"><com:TLabel ForControl="RetypeAPIPassword" Text="<%[ Retype administration password: ]%>" /></div>
513                                         <div class="field">
514                                                 <com:TTextBox
515                                                         ID="RetypeAPIPassword"
516                                                         CssClass="textbox"
517                                                         TextMode="Password"
518                                                         MaxLength="30"
519                                                         PersistPassword="true"
520                                                 />
521                                                 <com:TRequiredFieldValidator
522                                                         ID="RetypePasswordRequireValidator"
523                                                         CssClass="validator-block"
524                                                         Display="Dynamic"
525                                                         ControlCssClass="invalidate"
526                                                         ControlToValidate="RetypeAPIPassword"
527                                                         ValidationGroup="Basic"
528                                                         Text="<%[ Please enter retype password. ]%>"
529                                                 />
530                                                 <com:TRegularExpressionValidator
531                                                         ID="RetypePasswordRegexpValidator"
532                                                         CssClass="validator-block"
533                                                         Display="Dynamic"
534                                                         ControlCssClass="invalidate"
535                                                         ControlToValidate="RetypeAPIPassword"
536                                                         RegularExpression="[\S\s]{5,30}"
537                                                         ValidationGroup="Basic"
538                                                         Text="<%[ Password must be longer than 4 chars. ]%>"
539                                                 />
540                                                 <com:TCompareValidator
541                                                         ID="RetypePasswordCustomValidator"
542                                                         CssClass="validator-block"
543                                                         Display="Dynamic"
544                                                         ControlCssClass="invalidate"
545                                                         ControlToValidate="RetypeAPIPassword"
546                                                         ControlToCompare="APIPassword"
547                                                         ValidationGroup="Basic"
548                                                         Text="<%[ Passwords must be the same. ]%>"
549                                                 />
550                                         </div>
551                                 </div>
552                         </div>
553                         <div id="configure_oauth2_auth" style="display: <%=($this->AuthOAuth2->Checked === true) ? '' : 'none';%>">
554                                 <h3><%[ First client registration ]%></h3>
555                                 <h4><%[ Please do not forget to disable HTTP Basic auth in the API web server config. Othwerise OAuth2 will not work. ]%></h4>
556                                 <div class="line">
557                                         <div class="text"><com:TLabel ForControl="APIOAuth2ClientId" Text="<%[ OAuth2 Client ID: ]%>" /></div>
558                                         <div class="field">
559                                                 <com:TTextBox
560                                                         ID="APIOAuth2ClientId"
561                                                         CssClass="textbox"
562                                                         CausesValidation="false"
563                                                         MaxLength="32"
564                                                 />
565                                                 <com:TRequiredFieldValidator
566                                                         CssClass="validator-block"
567                                                         Display="Dynamic"
568                                                         ControlCssClass="invalidate"
569                                                         ControlToValidate="APIOAuth2ClientId"
570                                                         ValidationGroup="OAuth2"
571                                                         Text="<%[ Please enter Client ID. ]%>"
572                                                 />
573                                                 <com:TRegularExpressionValidator
574                                                         CssClass="validator-block"
575                                                         Display="Dynamic"
576                                                         ControlCssClass="invalidate"
577                                                         ControlToValidate="APIOAuth2ClientId"
578                                                         RegularExpression="<%=OAuth2::CLIENT_ID_PATTERN%>"
579                                                         ValidationGroup="OAuth2"
580                                                         Text="<%[ Invalid Client ID value. Client ID may contain a-z A-Z 0-9 - _ characters. ]%>"
581                                                         />
582                                                 <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientId->ClientID%>').value = get_random_string('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', 32); return false;"><%[ generate ]%></a>
583                                         </div>
584                                 </div>
585                                 <div class="line">
586                                         <div class="text"><com:TLabel ForControl="APIOAuth2ClientSecret" Text="<%[ OAuth2 Client Secret: ]%>" /></div>
587                                         <div class="field">
588                                                 <com:TTextBox
589                                                         ID="APIOAuth2ClientSecret"
590                                                         CssClass="textbox"
591                                                         CausesValidation="false"
592                                                         MaxLength="40"
593                                                 />
594                                                 <com:TRequiredFieldValidator
595                                                         CssClass="validator-block"
596                                                         Display="Dynamic"
597                                                         ControlCssClass="invalidate"
598                                                         ControlToValidate="APIOAuth2ClientSecret"
599                                                         ValidationGroup="OAuth2"
600                                                         Text="<%[ Please enter Client Secret. ]%>"
601                                                 />
602                                                 <com:TRegularExpressionValidator
603                                                         CssClass="validator-block"
604                                                         Display="Dynamic"
605                                                         ControlCssClass="invalidate"
606                                                         ControlToValidate="APIOAuth2ClientSecret"
607                                                         RegularExpression="<%=OAuth2::CLIENT_SECRET_PATTERN%>"
608                                                         ValidationGroup="OAuth2"
609                                                         Text="<%[ Invalid Client Secret value. Client Secret may contain any character that is not a whitespace character. ]%>"
610                                                 />
611                                                 <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientSecret->ClientID%>').value = get_random_string('ABCDEFabcdef0123456789', 40); return false;"><%[ generate ]%></a>
612                                         </div>
613                                 </div>
614                                 <div class="line">
615                                         <div class="text"><com:TLabel ForControl="APIOAuth2RedirectURI" Text="<%[ OAuth2 Redirect URI (example: https://baculumgui:9095/web/redirect): ]%>" /></div>
616                                         <div class="field">
617                                                 <com:TTextBox
618                                                         ID="APIOAuth2RedirectURI"
619                                                         CssClass="textbox"
620                                                         CausesValidation="false"
621                                                 />
622                                                 <com:TRequiredFieldValidator
623                                                         CssClass="validator-block"
624                                                         Display="Dynamic"
625                                                         ControlCssClass="invalidate"
626                                                         ControlToValidate="APIOAuth2RedirectURI"
627                                                         ValidationGroup="OAuth2"
628                                                         Text="<%[ Please enter Redirect URI. ]%>"
629                                                 />
630                                         </div>
631                                 </div>
632                                 <div class="line">
633                                         <div class="text"><com:TLabel ForControl="APIOAuth2Scope" Text="<%[ OAuth2 scopes (space separated): ]%>" /></div>
634                                         <div class="field">
635                                                 <com:TTextBox
636                                                         ID="APIOAuth2Scope"
637                                                         CssClass="textbox"
638                                                         CausesValidation="false"
639                                                         TextMode="MultiLine"
640                                                 />
641                                                 <a href="javascript:void(0)" onclick="set_scopes('<%=$this->APIOAuth2Scope->ClientID%>'); return false;" style="vertical-align: top"><%[ set all scopes ]%></a>
642                                                 <com:TRequiredFieldValidator
643                                                         CssClass="validator-block"
644                                                         Display="Dynamic"
645                                                         ControlCssClass="invalidate"
646                                                         ControlToValidate="APIOAuth2Scope"
647                                                         ValidationGroup="OAuth2"
648                                                         Text="<%[ Please enter OAuth2 scopes. ]%>"
649                                                 />
650                                         </div>
651                                 </div>
652                                 <div class="line">
653                                         <div class="text"><com:TLabel ForControl="APIOAuth2BconsoleCfgPath" Text="<%[ Dedicated Bconsole config file path: ]%>" /></div>
654                                         <div class="field">
655                                                 <com:TTextBox
656                                                         ID="APIOAuth2BconsoleCfgPath"
657                                                         CssClass="textbox"
658                                                         CausesValidation="false"
659                                                         ValidationGroup="OAuth2"
660                                                 /> <%[ (optional) ]%>
661                                         </div>
662                                 </div>
663                         </div>
664                         <script type="text/javascript">
665                                 var wizard_validation = function() {
666                                         var basic = document.getElementById('<%=$this->AuthBasic->ClientID%>');
667                                         var oauth2 = document.getElementById('<%=$this->AuthOAuth2->ClientID%>');
668                                         var validation_group;
669                                         if (basic.checked === true) {
670                                                 validation_group = 'Basic';
671                                         } else if (oauth2.checked === true) {
672                                                 validation_group = 'OAuth2';
673                                         }
674                                         return Prado.Validation.validate(Prado.Validation.getForm(), validation_group);
675                                 }
676                         </script>
677                 </com:TWizardStep>
678                 <com:TWizardStep ID="Step6" Title="<%[ Step 6 - Finish ]%>" StepType="Finish">
679                         <fieldset>
680                                 <legend><%[ Catalog API ]%></legend>
681                                 <div style="display: <%=($this->DatabaseYes->Checked ? 'block' : 'none')%>">
682                                         <div class="line">
683                                                 <div class="text"><%[ Database type: ]%></div>
684                                                 <div class="field bold"><%=$this->getDbNameByType($this->DBType->SelectedValue)%></div>
685                                         </div>
686                                         <div class="line">
687                                                 <div class="text"><%[ Database name: ]%></div>
688                                                 <div class="field bold"><%=$this->DBName->Text%></div>
689                                         </div>
690                                         <div class="line">
691                                                 <div class="text"><%[ Login: ]%></div>
692                                                 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === false ? $this->Login->Text : '-'%></div>
693                                         </div>
694                                         <div class="line">
695                                                 <div class="text"><%[ Password: ]%></div>
696                                                 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === false ? preg_replace('/.{1}/', '*', $this->Password->Text) : '-'%></div>
697                                         </div>
698                                         <div class="line">
699                                                 <div class="text"><%[ IP address (or hostname): ]%></div>
700                                                 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === false ? $this->IP->Text : '-'%></div>
701                                         </div>
702                                         <div class="line">
703                                                 <div class="text"><%[ Database port: ]%></div>
704                                                 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === false ? $this->Port->Text : '-'%></div>
705                                         </div>
706                                         <div class="line">
707                                                 <div class="text"><%[ Database file path (SQLite only): ]%></div>
708                                                 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === true ? $this->DBPath->Text : '-'%></div>
709                                         </div>
710                                 </div>
711                                 <div style="display: <%=($this->DatabaseNo->Checked ? 'block' : 'none')%>">
712                                         <div class="line">
713                                                 <div class="text"><%[ Catalog access: ]%></div>
714                                                 <div class="field bold"><%[ Disabled ]%></div>
715                                         </div>
716                                 </div>
717                         </fieldset>
718                         <fieldset>
719                                 <legend><%[ Console API ]%></legend>
720                                 <div style="display: <%=($this->ConsoleYes->Checked ? 'block' : 'none')%>">
721                                         <div class="line">
722                                                 <div class="text"><%[ Bconsole binary file path: ]%></div>
723                                                 <div class="field bold"><%=$this->BconsolePath->Text%></div>
724                                         </div>
725                                         <div class="line">
726                                                 <div class="text"><%[ Bconsole admin config file path: ]%></div>
727                                                 <div class="field bold"><%=$this->BconsoleConfigPath->Text%></div>
728                                         </div>
729                                         <div class="line">
730                                                 <div class="text"><%[ Use sudo for bconsole requests: ]%></div>
731                                                 <div class="field bold"><%=($this->UseSudo->Checked === true) ? 'yes' : 'no'%></div>
732                                         </div>
733                                 </div>
734                                 <div style="display: <%=($this->ConsoleNo->Checked ? 'block' : 'none')%>">
735                                         <div class="line">
736                                                 <div class="text"><%[ Console access: ]%></div>
737                                                 <div class="field bold"><%[ Disabled ]%></div>
738                                         </div>
739                                 </div>
740                         </fieldset>
741                         <fieldset>
742                                 <legend><%[ Config API ]%></legend>
743                                 <div style="display: <%=($this->ConfigYes->Checked ? 'block' : 'none')%>">
744                                         <div class="line">
745                                                 <div class="text"><%[ Directory path for new config files: ]%></div>
746                                                 <div class="field bold"><%=$this->BConfigDir->Text%></div>
747                                         </div>
748                                         <div class="line">
749                                                 <div class="text"><%[ Use sudo for Bacula JSON tools: ]%></div>
750                                                 <div class="field bold"><%=($this->BJSONUseSudo->Checked === true) ? 'yes' : 'no'%></div>
751                                         </div>
752                                         <div class="line">
753                                                 <div class="text"><%[ bdirjson binary file path: ]%></div>
754                                                 <div class="field bold"><%=$this->BDirJSONPath->Text%></div>
755                                         </div>
756                                         <div class="line">
757                                                 <div class="text"><%[ Main Director config file path: ]%></div>
758                                                 <div class="field bold"><%=$this->DirCfgPath->Text%></div>
759                                         </div>
760                                         <div class="line">
761                                                 <div class="text"><%[ bsdjson binary file path: ]%></div>
762                                                 <div class="field bold"><%=$this->BSdJSONPath->Text%></div>
763                                         </div>
764                                         <div class="line">
765                                                 <div class="text"><%[ Main Storage Daemon config file path: ]%></div>
766                                                 <div class="field bold"><%=$this->SdCfgPath->Text%></div>
767                                         </div>
768                                         <div class="line">
769                                                 <div class="text"><%[ bfdjson binary file path: ]%></div>
770                                                 <div class="field bold"><%=$this->BFdJSONPath->Text%></div>
771                                         </div>
772                                         <div class="line">
773                                                 <div class="text"><%[ Main Client config file path: ]%></div>
774                                                 <div class="field bold"><%=$this->FdCfgPath->Text%></div>
775                                         </div>
776                                         <div class="line">
777                                                 <div class="text"><%[ bbconsjson binary file path: ]%></div>
778                                                 <div class="field bold"><%=$this->BBconsJSONPath->Text%></div>
779                                         </div>
780                                         <div class="line">
781                                                 <div class="text"><%[ Main Bconsole config file path: ]%></div>
782                                                 <div class="field bold"><%=$this->BconsCfgPath->Text%></div>
783                                         </div>
784                                 </div>
785                                 <div style="display: <%=($this->ConfigNo->Checked ? 'block' : 'none')%>">
786                                         <div class="line">
787                                                 <div class="text"><%[ Config access: ]%></div>
788                                                 <div class="field bold"><%[ Disabled ]%></div>
789                                         </div>
790                                 </div>
791                         </fieldset>
792                         <fieldset>
793                                 <legend><%[ Authorization to Baculum REST API ]%></legend>
794                                 <div class="line">
795                                         <div class="text"><%[ Authorization type: ]%></div>
796                                         <div class="field bold">
797                                                 <%=$this->AuthBasic->Checked ? 'HTTP Basic' : ''%>
798                                                 <%=$this->AuthOAuth2->Checked ? 'OAuth2' : ''%>
799                                         </div>
800                                 </div>
801                                 <div style="display: <%=$this->AuthBasic->Checked ? 'block' : 'none'%>">
802                                         <div class="line">
803                                                 <div class="text"><%[ Administration login: ]%></div>
804                                                 <div class="field bold"><%=$this->APILogin->Text%></div>
805                                         </div>
806                                         <div class="line">
807                                                 <div class="text"><%[ Administration password: ]%></div>
808                                                 <div class="field bold"><%=preg_replace('/.{1}/', '*', $this->APIPassword->Text)%></div>
809                                         </div>
810                                 </div>
811                                 <div style="display: <%=$this->AuthOAuth2->Checked ? 'block' : 'none'%>">
812                                         <div class="line">
813                                                 <div class="text">Client ID:</div>
814                                                 <div class="field bold"><%=$this->APIOAuth2ClientId->Text%></div>
815                                         </div>
816                                         <div class="line">
817                                                 <div class="text">Client Secret:</div>
818                                                 <div class="field bold"><%=preg_replace('/.{1}/', '*', $this->APIOAuth2ClientSecret->Text)%></div>
819                                         </div>
820                                         <div class="line">
821                                                 <div class="text">Redirect URI:</div>
822                                                 <div class="field bold"><%=$this->APIOAuth2RedirectURI->Text%></div>
823                                         </div>
824                                         <div class="line">
825                                                 <div class="text">Scope:</div>
826                                                 <div class="field bold"><%=$this->APIOAuth2Scope->Text%></div>
827                                         </div>
828                                         <div class="line">
829                                                 <div class="text"><%[ Dedicated Bconsole config file path: ]%></div>
830                                                 <div class="field bold"><%=!empty($this->APIOAuth2BconsoleCfgPath->Text) ? $this->APIOAuth2BconsoleCfgPath->Text : '-'%></div>
831                                         </div>
832                                 </div>
833                         </fieldset>
834                 </com:TWizardStep>
835         </com:TWizard>
836 <script type="text/javascript">
837 var bjsontools_fields = {
838         General: {
839                 data: [],
840                 test: [$('#<%=$this->BConfigDirTestOk->ClientID%>'), $('#<%=$this->BConfigDirTestErr->ClientID%>')]
841         },
842         Dir: {
843                 data: [$('#<%=$this->BDirJSONPath->ClientID%>'), $('#<%=$this->DirCfgPath->ClientID%>')],
844                 test: [$('#<%=$this->BDirJSONPathTestOk->ClientID%>'), $('#<%=$this->BDirJSONPathTestErr->ClientID%>')]
845         },
846         Sd: {
847                 data: [$('#<%=$this->BSdJSONPath->ClientID%>'), $('#<%=$this->SdCfgPath->ClientID%>')],
848                 test: [$('#<%=$this->BSdJSONPathTestOk->ClientID%>'), $('#<%=$this->BSdJSONPathTestErr->ClientID%>')]
849         },
850         Fd: {
851                 data: [$('#<%=$this->BFdJSONPath->ClientID%>'), $('#<%=$this->FdCfgPath->ClientID%>')],
852                 test: [$('#<%=$this->BFdJSONPathTestOk->ClientID%>'), $('#<%=$this->BFdJSONPathTestErr->ClientID%>')]
853         },
854         Bcons: {
855                 data: [$('#<%=$this->BBconsJSONPath->ClientID%>'), $('#<%=$this->BconsCfgPath->ClientID%>')],
856                 test: [$('#<%=$this->BBconsJSONPathTestOk->ClientID%>'), $('#<%=$this->BBconsJSONPathTestErr->ClientID%>')]
857         }
858 };
859 var bjsontools_get_field_type = function(field_id) {
860         var field_types = Object.keys(bjsontools_fields);
861         var type, field_type;
862         for (var i = 0; i < field_types.length; i++) {
863                 type = field_types[i];
864                 for (var j = 0; j < bjsontools_fields[type].data.length; j++) {
865                         if (bjsontools_fields[type].data[j][0].id === field_id) {
866                                 field_type = type;
867                                 break;
868                         }
869                 }
870                 if (field_type) {
871                         break;
872                 }
873         }
874         return field_type;
875 };
876 var bjsontools_validator = function(sender, parameter) {
877         var validation_css = 'validation-error';
878         var id_validating_field = sender.control.id;
879         var type = bjsontools_get_field_type(id_validating_field);
880         var invalid_fields = [];
881         for (var i = 0; i < bjsontools_fields[type].data.length; i++) {
882                 bjsontools_fields[type].data[i].removeClass(validation_css);
883                 if (!bjsontools_fields[type].data[i][0].value) {
884                         invalid_fields.push(bjsontools_fields[type].data[i]);
885                 }
886         }
887         var valid = (invalid_fields.length === 0 || invalid_fields.length === bjsontools_fields[type].data.length);
888         var is_validating_field_valid = true;
889         if (!valid) {
890                 for (var i = 0; i < invalid_fields.length; i++) {
891                         invalid_fields[i].addClass(validation_css);
892                         if (invalid_fields[i][0].id === id_validating_field) {
893                                 is_validating_field_valid = false;
894                         }
895                 }
896                 bjsontools_hide_test_results(type);
897         }
898         if (is_validating_field_valid === true) {
899                 valid = true;
900         }
901
902         return valid;
903 };
904
905 // if field_type not given then all test results become hidden
906 var bjsontools_hide_test_results = function(field_type) {
907         var field_types = Object.keys(bjsontools_fields);
908         var type;
909         for (var i = 0; i < field_types.length; i++) {
910                 type = field_types[i];
911                 for (var j = 0; j < bjsontools_fields[type].test.length; j++) {
912                         if (!field_type || field_type === type) {
913                                 bjsontools_fields[type].test[j].hide();
914                         }
915                 }
916         }
917 };
918 </script>
919 </com:TContent>