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"
6 StepStyle.CssClass="steps"
7 HeaderStyle.CssClass="header"
8 NavigationStyle.CssClass="navigation"
9 UseDefaultLayout="false"
11 OnCancelButtonClick="wizardStop"
12 OnCompleteButtonClick="wizardCompleted"
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>
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>
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>
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>
28 <div class="step step-<%=($this->Parent->ActiveStepIndex === 4) ? 'active' : (($this->Parent->ActiveStepIndex === 5) ? 'prev-active' : 'normal')%>">
29 <div><com:TTranslate Text="Authorization" /></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>
34 <div id="title"><%=$this->Parent->ActiveStep->Title%><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 » ]%>" /></div>
40 </prop:StartNavigationTemplate>
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="<%[ « Previous ]%>" />
46 <com:BButton ID="NextButton" CommandName="NextStep" Attributes.onclick="return (wizard_validation) ? wizard_validation() : true;" Text="<%[ Next » ]%>" />
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="<%[ « Previous ]%>" />
53 <com:BButton CommandName="Complete" Text="<%[ Save ]%>" />
55 </prop:FinishNavigationTemplate>
56 <com:TWizardStep ID="Step1" Title="<%[ Step 1 - select language ]%>" StepType="Auto">
58 <div class="text"><com:TLabel ForControl="Lang" Text="<%[ Language: ]%>" /></div>
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. ]%>" />
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 left">
72 <com:TRadioButton ID="DatabaseNo" GroupName="SelectDatabase" Attributes.onclick="$('#configure_database').hide();" /> <com:TLabel ForControl="DatabaseNo" Text="<%[ No ]%>" />
74 <div class="line left">
75 <com:TRadioButton ID="DatabaseYes" GroupName="SelectDatabase" Attributes.onclick="$('#configure_database').show();" /> <com:TLabel ForControl="DatabaseYes" Text="<%[ Yes ]%>" />
77 <div id="configure_database" style="display: <%=($this->DatabaseYes->Checked === true) ? '' : 'none';%>">
78 <com:TActivePanel ID="Step2Content">
80 <div class="text"><com:TLabel ForControl="DBType" Text="<%[ Database type: ]%>" /></div>
82 <com:TActiveDropDownList
87 OnTextChanged="setDBType"
88 CausesValidation="false"
89 OnCallback="renderPanel"
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"
99 ControlToValidate="DBType"
101 ValueToCompare="none"
103 ValidationGroup="DbGroup"
104 Text="<%[ Please select database type. ]%>"
109 <div class="text"><com:TLabel ForControl="DBName" Text="<%[ Database name: ]%>" /></div>
111 <com:TTextBox ID="DBName" CssClass="textbox" />
112 <com:TRequiredFieldValidator
113 CssClass="validator-block"
115 ControlCssClass="invalidate"
116 ControlToValidate="DBName"
117 ValidationGroup="DbGroup"
118 Text="<%[ Please enter database name. ]%>"
123 <div class="text"><com:TLabel ForControl="Login" Text="<%[ Login: ]%>" /></div>
125 <com:TActiveTextBox ID="Login" CssClass="textbox" />
126 <com:TRequiredFieldValidator
128 CssClass="validator-block"
130 ControlCssClass="invalidate"
131 ControlToValidate="Login"
132 ValidationGroup="DbGroup"
133 Text="<%[ Please enter login. ]%>"
138 <div class="text"><com:TLabel ForControl="Password" Text="<%[ Password: ]%>" /></div>
139 <div class="field"><com:TActiveTextBox
143 PersistPassword="true"
147 <div class="text"><com:TLabel ForControl="IP" Text="<%[ IP address (or hostname): ]%>" /></div>
149 <com:TActiveTextBox ID="IP" CssClass="textbox" />
150 <com:TRequiredFieldValidator
152 CssClass="validator-block"
154 ControlCssClass="invalidate"
155 ControlToValidate="IP"
156 ValidationGroup="DbGroup"
157 Text="<%[ Please enter IP address or hostname. ]%>"
162 <div class="text"><com:TLabel ForControl="Port" Text="<%[ Port: ]%>" /></div>
164 <com:TActiveTextBox ID="Port" CssClass="textbox" Width="55px" MaxLength="5" Enabled="false" />
165 <com:TRequiredFieldValidator
167 CssClass="validator-block"
169 ControlCssClass="invalidate"
170 ControlToValidate="Port"
171 ValidationGroup="DbGroup"
172 Text="<%[ Please enter database port. ]%>"
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>
182 <com:TActiveTextBox ID="DBPath" CssClass="textbox" Enabled="false" />
183 <com:TRequiredFieldValidator
186 CssClass="validator-block"
187 ControlCssClass="invalidate"
188 ControlToValidate="DBPath"
189 ValidationGroup="DbGroup"
190 Text="<%[ Please enter database path. ]%>"
195 <div class="text"><com:TLabel ForControl="ConnectionTest" Text="<%[ Connection test: ]%>" /></div>
197 <table border="0" cellpadding="1px">
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>
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>
220 <div style="clear: left"></div>
223 <script type="text/javascript">
224 var wizard_validation = function() {
226 var db = document.getElementById('<%=$this->DatabaseYes->ClientID%>');
228 result = Prado.Validation.validate(Prado.Validation.getForm(), 'DbGroup');
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 left">
237 <com:TRadioButton ID="ConsoleNo" GroupName="SelectConsole" Attributes.onclick="$('#configure_console').hide();" /> <com:TLabel ForControl="ConsoleNo" Text="<%[ No ]%>" />
239 <div class="line left">
240 <com:TRadioButton ID="ConsoleYes" GroupName="SelectConsole" Attributes.onclick="$('#configure_console').show();" /> <com:TLabel ForControl="ConsoleYes" Text="<%[ Yes ]%>" />
242 <div id="configure_console" style="display: <%=($this->ConsoleYes->Checked === true) ? '' : 'none';%>">
244 <div class="text"><com:TLabel ForControl="BconsolePath" Text="<%[ Bconsole binary file path: ]%>" /></div>
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. ]%>" />
251 <div class="text"><com:TLabel ForControl="BconsoleConfigPath" Text="<%[ Bconsole admin config file path: ]%>" /></div>
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. ]%>" />
258 <div class="text"><com:TLabel ForControl="UseSudo" Text="<%[ Use sudo: ]%>" /></div>
260 <com:TCheckBox ID="UseSudo" />
264 <div class="text"><com:TLabel ForControl="BconsoleConnectionTest" Text="<%[ Bconsole connection test: ]%>" /></div>
266 <table border="0" cellpadding="1px">
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>
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>
289 <div class="line left">
290 <span><b><%[ NOTE! ]%></b><br /><em><%[ Baculum needs access to bconsole by the web server. ]%></em></span>
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 left">
297 <com:TRadioButton ID="ConfigNo" GroupName="SelectConfig" Attributes.onclick="$('#configure_config').hide();" /> <com:TLabel ForControl="ConfigNo" Text="<%[ No ]%>" />
299 <div class="line left">
300 <com:TRadioButton ID="ConfigYes" GroupName="SelectConfig" Attributes.onclick="$('#configure_config').show();" /> <com:TLabel ForControl="ConfigYes" Text="<%[ Yes ]%>" />
302 <div id="configure_config" style="display: <%=($this->ConfigYes->Checked === true) ? 'block' : '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 left">
308 <div class="text"><com:TLabel ForControl="BConfigDir" Text="<%[ Directory path for new config files: ]%>" /></div>
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" />
315 <div class="line left">
316 <div class="text"><com:TLabel ForControl="BJSONUseSudo" Text="<%[ Use sudo: ]%>" /></div>
318 <com:TCheckBox ID="BJSONUseSudo" />
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>
326 <fieldset class="config_field">
327 <legend>Director</legend>
328 <div class="config_lines">
329 <div class="line left">
330 <div class="text"><com:TLabel ForControl="BDirJSONPath" Text="<%[ bdirjson binary file path: ]%>" /></div>
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" />
336 <div class="line left">
337 <div class="text"><com:TLabel ForControl="DirCfgPath" Text="<%[ Main Director config file path (usually bacula-dir.conf): ]%>" /></div>
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" />
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>
348 <fieldset class="config_field">
349 <legend>Storage Daemon</legend>
350 <div class="config_lines">
351 <div class="line left">
352 <div class="text"><com:TLabel ForControl="BSdJSONPath" Text="<%[ bsdjson binary file path: ]%>" /></div>
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" />
358 <div class="line left">
359 <div class="text"><com:TLabel ForControl="SdCfgPath" Text="<%[ Main Storage Daemon config file path (usually bacula-sd.conf): ]%>" /></div>
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" />
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>
370 <fieldset class="config_field">
371 <legend>File Daemon/Client</legend>
372 <div class="config_lines">
373 <div class="line left">
374 <div class="text"><com:TLabel ForControl="BFdJSONPath" Text="<%[ bfdjson binary file path: ]%>" /></div>
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" />
380 <div class="line left">
381 <div class="text"><com:TLabel ForControl="FdCfgPath" Text="<%[ Main File Daemon config file path (usually bacula-fd.conf): ]%>" /></div>
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" />
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>
392 <fieldset class="config_field">
393 <legend>Bconsole</legend>
394 <div class="config_lines">
395 <div class="line left">
396 <div class="text"><com:TLabel ForControl="BBconsJSONPath" Text="<%[ bbconsjson binary file path: ]%>" /></div>
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" />
402 <div class="line left">
403 <div class="text"><com:TLabel ForControl="BconsCfgPath" Text="<%[ Admin Bconsole config file path (usually bconsole.conf): ]%>" /></div>
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" />
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>
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>
428 <com:TWizardStep ID="Step5" Title="<%[ Step 5 - authorization to API ]%>" StepType="Auto">
429 <div class="line left" style="width:500px; margin: 0 auto">
430 <com:TActiveRadioButton
432 GroupName="SelectAuth"
433 Attributes.onclick="$('#configure_basic_auth').hide();$('#configure_oauth2_auth').show();"
434 OnCallback="setOAuth2Validation"
437 ForControl="AuthOAuth2"
438 Text="<%[ Use OAuth2 for authorization and authentication ]%>"
441 <div class="line left" style="width:500px; margin: 0 auto">
442 <com:TActiveRadioButton
444 GroupName="SelectAuth"
446 Attributes.onclick="$('#configure_oauth2_auth').hide();$('#configure_basic_auth').show();"
447 OnCallback="setBasicValidation"
450 ForControl="AuthBasic"
451 Text="<%[ Use HTTP Basic authentication ]%>"
454 <div id="configure_basic_auth" style="display: <%=($this->AuthBasic->Checked === true) ? '' : 'none';%>">
456 <div class="text"><com:TLabel ForControl="APILogin" Text="<%[ Administration login: ]%>" /></div>
461 CausesValidation="false"
463 <com:TRequiredFieldValidator
464 CssClass="validator-block"
466 ControlCssClass="invalidate"
467 ControlToValidate="APILogin"
468 ValidationGroup="Basic"
469 Text="<%[ Please enter login. ]%>"
471 <com:TRegularExpressionValidator
472 CssClass="validator-block"
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. ]%>"
483 <div class="text"><com:TLabel ForControl="APIPassword" Text="<%[ Administration password: ]%>" /></div>
490 PersistPassword="true"
492 <com:TRequiredFieldValidator
493 CssClass="validator-block"
495 ControlCssClass="invalidate"
496 ControlToValidate="APIPassword"
497 ValidationGroup="Basic"
498 Text="<%[ Please enter password. ]%>"
500 <com:TRegularExpressionValidator
501 CssClass="validator-block"
503 ControlCssClass="invalidate"
504 ControlToValidate="APIPassword"
505 RegularExpression="[\S\s]{5,30}"
506 ValidationGroup="Basic"
507 Text="<%[ Password must be longer than 4 chars. ]%>"
512 <div class="text"><com:TLabel ForControl="RetypeAPIPassword" Text="<%[ Retype administration password: ]%>" /></div>
515 ID="RetypeAPIPassword"
519 PersistPassword="true"
521 <com:TRequiredFieldValidator
522 ID="RetypePasswordRequireValidator"
523 CssClass="validator-block"
525 ControlCssClass="invalidate"
526 ControlToValidate="RetypeAPIPassword"
527 ValidationGroup="Basic"
528 Text="<%[ Please enter retype password. ]%>"
530 <com:TRegularExpressionValidator
531 ID="RetypePasswordRegexpValidator"
532 CssClass="validator-block"
534 ControlCssClass="invalidate"
535 ControlToValidate="RetypeAPIPassword"
536 RegularExpression="[\S\s]{5,30}"
537 ValidationGroup="Basic"
538 Text="<%[ Password must be longer than 4 chars. ]%>"
540 <com:TCompareValidator
541 ID="RetypePasswordCustomValidator"
542 CssClass="validator-block"
544 ControlCssClass="invalidate"
545 ControlToValidate="RetypeAPIPassword"
546 ControlToCompare="APIPassword"
547 ValidationGroup="Basic"
548 Text="<%[ Passwords must be the same. ]%>"
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>
557 <div class="text"><com:TLabel ForControl="APIOAuth2ClientId" Text="<%[ OAuth2 Client ID: ]%>" /></div>
560 ID="APIOAuth2ClientId"
562 CausesValidation="false"
565 <com:TRequiredFieldValidator
566 CssClass="validator-block"
568 ControlCssClass="invalidate"
569 ControlToValidate="APIOAuth2ClientId"
570 ValidationGroup="OAuth2"
571 Text="<%[ Please enter Client ID. ]%>"
573 <com:TRegularExpressionValidator
574 CssClass="validator-block"
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. ]%>"
582 <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientId->ClientID%>').value = get_random_string('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', 32); return false;"><%[ generate ]%></a>
586 <div class="text"><com:TLabel ForControl="APIOAuth2ClientSecret" Text="<%[ OAuth2 Client Secret: ]%>" /></div>
589 ID="APIOAuth2ClientSecret"
591 CausesValidation="false"
594 <com:TRequiredFieldValidator
595 CssClass="validator-block"
597 ControlCssClass="invalidate"
598 ControlToValidate="APIOAuth2ClientSecret"
599 ValidationGroup="OAuth2"
600 Text="<%[ Please enter Client Secret. ]%>"
602 <com:TRegularExpressionValidator
603 CssClass="validator-block"
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. ]%>"
611 <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientSecret->ClientID%>').value = get_random_string('ABCDEFabcdef0123456789', 40); return false;"><%[ generate ]%></a>
615 <div class="text"><com:TLabel ForControl="APIOAuth2RedirectURI" Text="<%[ OAuth2 Redirect URI (example: https://baculumgui:9095/web/redirect): ]%>" /></div>
618 ID="APIOAuth2RedirectURI"
620 CausesValidation="false"
622 <com:TRequiredFieldValidator
623 CssClass="validator-block"
625 ControlCssClass="invalidate"
626 ControlToValidate="APIOAuth2RedirectURI"
627 ValidationGroup="OAuth2"
628 Text="<%[ Please enter Redirect URI. ]%>"
633 <div class="text"><com:TLabel ForControl="APIOAuth2Scope" Text="<%[ OAuth2 scopes (space separated): ]%>" /></div>
638 CausesValidation="false"
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"
645 ControlCssClass="invalidate"
646 ControlToValidate="APIOAuth2Scope"
647 ValidationGroup="OAuth2"
648 Text="<%[ Please enter OAuth2 scopes. ]%>"
653 <div class="text"><com:TLabel ForControl="APIOAuth2BconsoleCfgPath" Text="<%[ Dedicated Bconsole config file path: ]%>" /></div>
656 ID="APIOAuth2BconsoleCfgPath"
658 CausesValidation="false"
659 ValidationGroup="OAuth2"
660 /> <%[ (optional) ]%>
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';
674 return Prado.Validation.validate(Prado.Validation.getForm(), validation_group);
678 <com:TWizardStep ID="Step6" Title="<%[ Step 6 - Finish ]%>" StepType="Finish">
680 <legend><%[ Catalog API ]%></legend>
681 <div style="display: <%=($this->DatabaseYes->Checked ? 'block' : 'none')%>">
683 <div class="text"><%[ Database type: ]%></div>
684 <div class="field bold"><%=$this->getDbNameByType($this->DBType->SelectedValue)%></div>
687 <div class="text"><%[ Database name: ]%></div>
688 <div class="field bold"><%=$this->DBName->Text%></div>
691 <div class="text"><%[ Login: ]%></div>
692 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === false ? $this->Login->Text : '-'%></div>
695 <div class="text"><%[ Password: ]%></div>
696 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === false ? preg_replace('/.{1}/', '*', $this->Password->Text) : '-'%></div>
699 <div class="text"><%[ IP address (or hostname): ]%></div>
700 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === false ? $this->IP->Text : '-'%></div>
703 <div class="text"><%[ Database port: ]%></div>
704 <div class="field bold"><%=$this->isSQLiteType($this->DBType->SelectedValue) === false ? $this->Port->Text : '-'%></div>
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>
711 <div style="display: <%=($this->DatabaseNo->Checked ? 'block' : 'none')%>">
713 <div class="text"><%[ Catalog access: ]%></div>
714 <div class="field bold"><%[ Disabled ]%></div>
719 <legend><%[ Console API ]%></legend>
720 <div style="display: <%=($this->ConsoleYes->Checked ? 'block' : 'none')%>">
722 <div class="text"><%[ Bconsole binary file path: ]%></div>
723 <div class="field bold"><%=$this->BconsolePath->Text%></div>
726 <div class="text"><%[ Bconsole admin config file path: ]%></div>
727 <div class="field bold"><%=$this->BconsoleConfigPath->Text%></div>
730 <div class="text"><%[ Use sudo for bconsole requests: ]%></div>
731 <div class="field bold"><%=($this->UseSudo->Checked === true) ? 'yes' : 'no'%></div>
734 <div style="display: <%=($this->ConsoleNo->Checked ? 'block' : 'none')%>">
736 <div class="text"><%[ Console access: ]%></div>
737 <div class="field bold"><%[ Disabled ]%></div>
742 <legend><%[ Config API ]%></legend>
743 <div style="display: <%=($this->ConfigYes->Checked ? 'block' : 'none')%>">
745 <div class="text"><%[ Directory path for new config files: ]%></div>
746 <div class="field bold"><%=$this->BConfigDir->Text%></div>
749 <div class="text"><%[ Use sudo for Bacula JSON tools: ]%></div>
750 <div class="field bold"><%=($this->BJSONUseSudo->Checked === true) ? 'yes' : 'no'%></div>
753 <div class="text"><%[ bdirjson binary file path: ]%></div>
754 <div class="field bold"><%=$this->BDirJSONPath->Text%></div>
757 <div class="text"><%[ Main Director config file path: ]%></div>
758 <div class="field bold"><%=$this->DirCfgPath->Text%></div>
761 <div class="text"><%[ bsdjson binary file path: ]%></div>
762 <div class="field bold"><%=$this->BSdJSONPath->Text%></div>
765 <div class="text"><%[ Main Storage Daemon config file path: ]%></div>
766 <div class="field bold"><%=$this->SdCfgPath->Text%></div>
769 <div class="text"><%[ bfdjson binary file path: ]%></div>
770 <div class="field bold"><%=$this->BFdJSONPath->Text%></div>
773 <div class="text"><%[ Main Client config file path: ]%></div>
774 <div class="field bold"><%=$this->FdCfgPath->Text%></div>
777 <div class="text"><%[ bbconsjson binary file path: ]%></div>
778 <div class="field bold"><%=$this->BBconsJSONPath->Text%></div>
781 <div class="text"><%[ Main Bconsole config file path: ]%></div>
782 <div class="field bold"><%=$this->BconsCfgPath->Text%></div>
785 <div style="display: <%=($this->ConfigNo->Checked ? 'block' : 'none')%>">
787 <div class="text"><%[ Config access: ]%></div>
788 <div class="field bold"><%[ Disabled ]%></div>
793 <legend><%[ Authorization to Baculum REST API ]%></legend>
795 <div class="text"><%[ Authorization type: ]%></div>
796 <div class="field bold">
797 <%=$this->AuthBasic->Checked ? 'HTTP Basic' : ''%>
798 <%=$this->AuthOAuth2->Checked ? 'OAuth2' : ''%>
801 <div style="display: <%=$this->AuthBasic->Checked ? 'block' : 'none'%>">
803 <div class="text"><%[ Administration login: ]%></div>
804 <div class="field bold"><%=$this->APILogin->Text%></div>
807 <div class="text"><%[ Administration password: ]%></div>
808 <div class="field bold"><%=preg_replace('/.{1}/', '*', $this->APIPassword->Text)%></div>
811 <div style="display: <%=$this->AuthOAuth2->Checked ? 'block' : 'none'%>">
813 <div class="text">Client ID:</div>
814 <div class="field bold"><%=$this->APIOAuth2ClientId->Text%></div>
817 <div class="text">Client Secret:</div>
818 <div class="field bold"><%=preg_replace('/.{1}/', '*', $this->APIOAuth2ClientSecret->Text)%></div>
821 <div class="text">Redirect URI:</div>
822 <div class="field bold"><%=$this->APIOAuth2RedirectURI->Text%></div>
825 <div class="text">Scope:</div>
826 <div class="field bold"><%=$this->APIOAuth2Scope->Text%></div>
829 <div class="text"><%[ Dedicated Bconsole config file path: ]%></div>
830 <div class="field bold"><%=!empty($this->APIOAuth2BconsoleCfgPath->Text) ? $this->APIOAuth2BconsoleCfgPath->Text : '-'%></div>
836 <script type="text/javascript">
837 var bjsontools_fields = {
840 test: [$('#<%=$this->BConfigDirTestOk->ClientID%>'), $('#<%=$this->BConfigDirTestErr->ClientID%>')]
843 data: [$('#<%=$this->BDirJSONPath->ClientID%>'), $('#<%=$this->DirCfgPath->ClientID%>')],
844 test: [$('#<%=$this->BDirJSONPathTestOk->ClientID%>'), $('#<%=$this->BDirJSONPathTestErr->ClientID%>')]
847 data: [$('#<%=$this->BSdJSONPath->ClientID%>'), $('#<%=$this->SdCfgPath->ClientID%>')],
848 test: [$('#<%=$this->BSdJSONPathTestOk->ClientID%>'), $('#<%=$this->BSdJSONPathTestErr->ClientID%>')]
851 data: [$('#<%=$this->BFdJSONPath->ClientID%>'), $('#<%=$this->FdCfgPath->ClientID%>')],
852 test: [$('#<%=$this->BFdJSONPathTestOk->ClientID%>'), $('#<%=$this->BFdJSONPathTestErr->ClientID%>')]
855 data: [$('#<%=$this->BBconsJSONPath->ClientID%>'), $('#<%=$this->BconsCfgPath->ClientID%>')],
856 test: [$('#<%=$this->BBconsJSONPathTestOk->ClientID%>'), $('#<%=$this->BBconsJSONPathTestErr->ClientID%>')]
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) {
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]);
887 var valid = (invalid_fields.length === 0 || invalid_fields.length === bjsontools_fields[type].data.length);
888 var is_validating_field_valid = true;
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;
896 bjsontools_hide_test_results(type);
898 if (is_validating_field_valid === true) {
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);
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();