msgid "Basic auth ready..."
msgstr "Basic auth ready..."
+
+msgid "Name"
+msgstr "Name"
+
+msgid "Short name:"
+msgstr "Short name:"
+
+msgid "Edit"
+msgstr "Edit"
+
+msgid "Edit OAuth2 client parameters"
+msgstr "Edit OAuth2 client parameters"
+
+msgid "Select:"
+msgstr "Select:"
msgid "Basic auth ready..."
msgstr "Autentykacja Basic jest gotowa..."
+
+msgid "Name"
+msgstr "Nazwa"
+
+msgid "Short name:"
+msgstr "Krótka nazwa:"
+
+msgid "Edit"
+msgstr "Edytuj"
+
+msgid "Edit OAuth2 client parameters"
+msgstr "Edytuj parametry klienta OAuth2"
+
+msgid "Select:"
+msgstr "Wybierz:"
msgid "Basic auth ready..."
msgstr "Autenticação básica pronta..."
+
+msgid "Name"
+msgstr "Name"
+
+msgid "Short name:"
+msgstr "Short name:"
+
+msgid "Edit"
+msgstr "Edit"
+
+msgid "Edit OAuth2 client parameters"
+msgstr "Edit OAuth2 client parameters"
+
+msgid "Select:"
+msgstr "Select:"
</com:TJuiProgressbar>
<img id="api_refresh" src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_refresh.png" alt="<%[ Refresh token ]%>" title="<%[ Refresh token ]%>" onclick="oAPIHome.init_oauth2_client();" />
</div>
- <div>
- <com:TActiveDropDownList ID="AuthParams" OnLoad="loadAuthParams" />
+ <div class="line" id="auth_params_combo_container" style="margin-top: 10px; width: 700px; display: none">
+ <div class="text"><com:TLabel ForControl="AuthParamsCombo" Text="<%[ Select: ]%>" /></div>
+ <div class="field">
+ <com:TActiveDropDownList ID="AuthParamsCombo" AutoPostBack="false" />
+ </div>
</div>
<div style="clear: left; margin-top: 60px;">
<select id="section" class="api_select">
HeaderText="<%[ Redirect URI ]%>"
DataField="redirect_uri"
/>
- <com:TBoundColumn
- HeaderText="<%[ Scopes ]%>"
- DataField="scope"
- />
- <com:TBoundColumn
- HeaderText="<%[ Bconsole Path ]%>"
- DataField="bconsole_cfg_path"
- />
<com:TTemplateColumn
ID="OAuth2DeleteColumn"
HeaderText="<%[ Delete ]%>"
ItemStyle.HorizontalAlign="Center"
>
<prop:ItemTemplate>
+ <com:TActiveLinkButton
+ Text="<%[ Edit ]%>"
+ OnCommand="SourceTemplateControl.editOAuth2Item"
+ CommandParameter="<%#$this->getParent()->Data['client_id']%>"
+ />
<com:TActiveLinkButton
Text="<%[ Delete ]%>"
OnCommand="SourceTemplateControl.deleteOAuth2Item"
CommandParameter="<%=$this->getParent()->Data['client_id']%>"
Attributes.onclick="if(!confirm('<%[ Are you sure? ]%>')) return false;"
- Visible="<%=($this->getParent()->Data['client_id'] != $this->getPage()->main_client_id)%>"
/>
</prop:ItemTemplate>
</com:TTemplateColumn>
</com:TActiveDataGrid>
</div>
+ <com:TJuiDialog
+ ID="APIOAuth2EditPopup"
+ Options.Title="<%[ Edit OAuth2 client parameters ]%>"
+ Options.AutoOpen="False"
+ Options.Width="700px"
+ >
+ <com:TPanel DefaultButton="APIOAuth2SaveBtn">
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2ClientId" Text="<%[ OAuth2 Client ID: ]%>" /></div>
+ <div class="field">
+ <com:TActiveTextBox
+ ID="APIOAuth2ClientId"
+ CssClass="textbox"
+ ReadOnly="true"
+ />
+ </div>
+ </div>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2ClientSecret" Text="<%[ OAuth2 Client Secret: ]%>" /></div>
+ <div class="field">
+ <com:TActiveTextBox
+ ID="APIOAuth2ClientSecret"
+ CssClass="textbox"
+ CausesValidation="false"
+ MaxLength="40"
+ />
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2ClientSecret"
+ ValidationGroup="APIOAuth2Edit"
+ Text="<%[ Please enter Client Secret. ]%>"
+ />
+ <com:TRegularExpressionValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2ClientSecret"
+ RegularExpression="<%=OAuth2::CLIENT_SECRET_PATTERN%>"
+ ValidationGroup="APIOAuth2Edit"
+ Text="<%[ Invalid Client Secret value. Client Secret may contain any character that is not a whitespace character. ]%>"
+ />
+ <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientSecret->ClientID%>').value = get_random_string('ABCDEFabcdef0123456789', 40); return false;"><%[ generate ]%></a>
+ </div>
+ </div>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2RedirectURI" Text="<%[ OAuth2 Redirect URI (example: https://baculumgui:9095/web/redirect): ]%>" /></div>
+ <div class="field">
+ <com:TActiveTextBox
+ ID="APIOAuth2RedirectURI"
+ CssClass="textbox"
+ CausesValidation="false"
+ />
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2RedirectURI"
+ ValidationGroup="APIOAuth2Edit"
+ Text="<%[ Please enter Redirect URI. ]%>"
+ />
+ </div>
+ </div>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2Scope" Text="<%[ OAuth2 scopes (space separated): ]%>" /></div>
+ <div class="field">
+ <com:TActiveTextBox
+ ID="APIOAuth2Scope"
+ CssClass="textbox"
+ CausesValidation="false"
+ TextMode="MultiLine"
+ />
+ <a href="javascript:void(0)" onclick="set_scopes('<%=$this->APIOAuth2Scope->ClientID%>'); return false;" style="vertical-align: top"><%[ set all scopes ]%></a>
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2Scope"
+ ValidationGroup="APIOAuth2Edit"
+ Text="<%[ Please enter OAuth2 scopes. ]%>"
+ />
+ </div>
+ </div>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2BconsoleCfgPath" Text="<%[ Dedicated Bconsole config file path: ]%>" /></div>
+ <div class="field">
+ <com:TActiveTextBox
+ ID="APIOAuth2BconsoleCfgPath"
+ CssClass="textbox"
+ CausesValidation="false"
+ /> <%[ (optional) ]%>
+ </div>
+ </div>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2Name" Text="<%[ Short name: ]%>" /></div>
+ <div class="field">
+ <com:TActiveTextBox
+ ID="APIOAuth2Name"
+ CssClass="textbox"
+ CausesValidation="false"
+ /> <%[ (optional) ]%>
+ </div>
+ </div>
+ <div class="center">
+ <com:BButton
+ Text="<%[ Cancel ]%>"
+ CausesValidation="false"
+ Attributes.onclick="$('#<%=$this->APIOAuth2EditPopup->ClientID%>').dialog('close'); return false;"
+ />
+ <com:BActiveButton
+ ID="APIOAuth2SaveBtn"
+ ValidationGroup="APIOAuth2Edit"
+ OnCommand="TemplateControl.saveOAuth2Item"
+ Text="<%[ Save ]%>"
+ >
+ </com:BActiveButton>
+ </div>
+ </com:TPanel>
+ </com:TJuiDialog>
</div>
+ <com:TActiveHiddenField ID="AuthParamsInput" />
+ <com:TCallback ID="AuthParamsCallback" OnCallback="setAuthParams">
+ <prop:ClientSide.OnComplete>
+ oAPIHome.set_auth_params();
+ oAPIHome.init_auth();
+ </prop:ClientSide.OnComplete>
+ </com:TCallback>
<com:TClientScript>
var oAPIHome = {
ids: {
result: 'api_result',
progress_bar: '<%=$this->Progress->ClientID%>',
progress_label: 'progress_label',
- refresh_token: 'api_refresh'
+ refresh_token: 'api_refresh',
+ auth_params_combo_container: 'auth_params_combo_container',
+ auth_params_combo: '<%=$this->AuthParamsCombo->ClientID%>',
+ auth_params_input: '<%=$this->AuthParamsInput->ClientID%>'
},
default_commands: {
storages: '/api/v1/storages/',
bvfs: '/api/v1/bvfs/lsdirs?jobids=1&path=&limit=8'
},
token: null,
- baculum_auth: JSON.parse('<%=$this->auth_params%>'),
+ auth_params_cb: <%=$this->AuthParamsCallback->ActiveControl->Javascript%>,
init: function() {
this.set_events();
+ this.set_auth_params();
+ this.init_auth();
+ this.init_tabs();
+ },
+ init_auth: function() {
if (typeof(this.baculum_auth) == 'object') {
if (this.baculum_auth.auth_type == 'oauth2') {
+ document.getElementById(this.ids.auth_params_combo_container).style.display = '';
this.init_oauth2_client();
} else if (this.baculum_auth.auth_type == 'basic') {
this.init_basic();
}
}
- this.init_tabs();
+ },
+ set_auth_params: function() {
+ var params = document.getElementById(this.ids.auth_params_input).value;
+ this.baculum_auth = JSON.parse(params);
},
set_progress: function(value, text) {
$('#' + this.ids.progress_bar).progressbar('value', value);
document.getElementById(this.ids.refresh_token).style.display = 'none';
},
init_oauth2_client: function() {
+ if (this.baculum_auth && !this.baculum_auth.hasOwnProperty('client_id')) {
+ // no client id, no client initialization
+ // Posibly case when first (default) API client is not able to get token
+ return;
+ }
this.set_progress(1, 'Sending auth code request...');
var authorization_uri = document.location.origin + '/api/auth';
var auth_params = {
var el = e.srcElement || e.target;
this.set_default_command(el.value);
}.bind(this));
+ var auth_params_combo = document.getElementById(this.ids.auth_params_combo);
+ auth_params_combo.addEventListener('change', function(e) {
+ this.auth_params_cb.setCallbackParameter(auth_params_combo.value)
+ this.auth_params_cb.dispatch();
+ }.bind(this));
},
set_default_command: function(section) {
if (this.default_commands.hasOwnProperty(section)) {
} else if (this.baculum_auth.auth_type == 'basic') {
headers = {'Authorization': 'Basic ' + btoa(this.baculum_auth.login + ":" + this.baculum_auth.password)};
}
+ this.clear_result();
var request = $.ajax({
url: url,
type: 'GET',
},
show_result: function(data) {
document.getElementById(this.ids.result).textContent = JSON.stringify(data, null, 2);
+ },
+ clear_result: function() {
+ document.getElementById(this.ids.result).textContent = '';
}
};
$(function() {
Prado::using('System.Web.UI.JuiControls.TJuiProgressbar');
Prado::using('System.Web.UI.ActiveControls.TActiveDataGrid');
Prado::using('System.Web.UI.ActiveControls.TActiveLinkButton');
+Prado::using('System.Web.UI.ActiveControls.TActiveTextBox');
+Prado::using('System.Web.UI.ActiveControls.TCallback');
Prado::using('Application.API.Class.BaculumAPIPage');
class APIHome extends BaculumAPIPage {
- public $auth_params;
- public $main_client_id;
-
public function onInit($param) {
parent::onInit($param);
if(count($config) === 0) {
// Config doesn't exist, go to wizard
$this->goToPage('Panel.APIInstallWizard');
- } else {
- $base_params = array('auth_type' => $config['api']['auth_type']);
- $params = array();
+ return;
+ } elseif (!$this->IsCallback) {
+ $this->loadBasicUsers(null, null);
+ $this->loadOAuth2Users(null, null);
+ $this->setAuthParams(null, null);
+ }
+ }
+
+ public function setAuthParams($sender, $param) {
+ $config = $this->getModule('api_config')->getConfig();
+ $base_params = array('auth_type' => $config['api']['auth_type']);
+ $params = array();
+ if ($config['api']['auth_type'] === 'oauth2') {
$oauth2_cfg = $this->getModule('oauth2_config')->getConfig();
- if ($config['api']['auth_type'] === 'oauth2') {
- if (key_exists($config['api']['client_id'], $oauth2_cfg)) {
- $this->main_client_id = $config['api']['client_id'];
- }
- $params = array(
- 'client_id' => $config['api']['client_id'],
- 'client_secret' => $oauth2_cfg[$config['api']['client_id']]['client_secret'],
- 'redirect_uri' => $oauth2_cfg[$config['api']['client_id']]['redirect_uri'],
- 'scope' => explode(' ', $oauth2_cfg[$config['api']['client_id']]['scope'])
- );
- } elseif ($config['api']['auth_type'] === 'basic') {
+ $client_id = null;
+ if (is_object($param)) {
+ $client_id = $param->CallbackParameter;
+ } elseif (key_exists($config['api']['client_id'], $oauth2_cfg)) {
+ $client_id = $config['api']['client_id'];
+ }
+ if (is_string($client_id)) {
$params = array(
- 'login' => $config['api']['login'],
- 'password' => $config['api']['password']
+ 'client_id' => $oauth2_cfg[$client_id]['client_id'],
+ 'client_secret' => $oauth2_cfg[$client_id]['client_secret'],
+ 'redirect_uri' => $oauth2_cfg[$client_id]['redirect_uri'],
+ 'scope' => explode(' ', $oauth2_cfg[$client_id]['scope'])
);
- // login and password are not needed because user is already logged in
}
- $params = array_merge($base_params, $params);
- $this->auth_params = json_encode($params);
- $this->loadBasicUsers(null, null);
- $this->loadOAuth2Users(null, null);
+ } elseif ($config['api']['auth_type'] === 'basic') {
+ if (is_null($param)) {
+ $params['login'] = $config['api']['login'];
+ $params['password'] = $config['api']['password'];
+ } elseif (is_object($param)) {
+ $params['login'] = $param->CallbackParameter;
+ $params['password'] = '';
+ }
}
+ $params = array_merge($base_params, $params);
+ $this->AuthParamsInput->Value = json_encode($params);
}
public function loadBasicUsers($sender, $param) {
$oauth2_cfg = $this->getModule('oauth2_config')->getConfig();
$this->OAuth2ClientList->dataSource = array_values($oauth2_cfg);
$this->OAuth2ClientList->dataBind();
+ $this->loadAuthParams(null, null);
}
- public function loadAuthParams($sneder, $param) {
- $oauth2_cfg = $this->getModule('oauth2_config')->getConfig();
- $clientids = array_keys($oauth2_cfg);
- $this->AuthParams->DataSource = array_combine($clientids, $clientids);
- $this->AuthParams->dataBind();
+ public function loadAuthParams($sender, $param) {
+ $ids = $values = array();
+ $config = $this->getModule('api_config')->getConfig();
+ if ($config['api']['auth_type'] === 'oauth2') {
+ $oauth2_cfg = $this->getModule('oauth2_config')->getConfig();
+ $ids = array_keys($oauth2_cfg);
+ $values = array();
+ for ($i = 0; $i < count($ids); $i++) {
+ $values[] = "{$oauth2_cfg[$ids[$i]]['client_id']} ({$oauth2_cfg[$ids[$i]]['name']})";
+ }
+ } elseif ($config['api']['auth_type'] === 'basic') {
+ $api_user_cfg = $this->getModule('basic_apiuser')->getAllUsers();
+ $values = $ids = array_keys($api_user_cfg);
+ }
+ $this->AuthParamsCombo->DataSource = array_combine($ids, $values);
+ $this->AuthParamsCombo->dataBind();
}
private function getBasicUsers() {
$config = $this->getModule('oauth2_config');
$clients = $config->getConfig();
$client_id = $param->getCommandParameter();
- if (array_key_exists($client_id, $clients)) {
+ if (key_exists($client_id, $clients)) {
unset($clients[$client_id]);
}
$config->setConfig($clients);
$this->OAuth2ClientList->DataSource = array_values($config->getConfig());
$this->OAuth2ClientList->dataBind();
+ $this->loadAuthParams(null, null);
+ }
+
+ public function editOAuth2Item($sender, $param) {
+ $config = $this->getModule('oauth2_config');
+ $clients = $config->getConfig();
+ $client_id = $param->getCommandParameter();
+ if (key_exists($client_id, $clients)) {
+ $this->APIOAuth2ClientId->Text = $clients[$client_id]['client_id'];
+ $this->APIOAuth2ClientSecret->Text = $clients[$client_id]['client_secret'];
+ $this->APIOAuth2RedirectURI->Text = $clients[$client_id]['redirect_uri'];
+ $this->APIOAuth2Scope->Text = $clients[$client_id]['scope'];
+ $this->APIOAuth2BconsoleCfgPath->Text = $clients[$client_id]['bconsole_cfg_path'];
+ $this->APIOAuth2Name->Text = $clients[$client_id]['name'];
+ }
+ $this->APIOAuth2EditPopup->open();
+ }
+
+ public function saveOAuth2Item($sender, $param) {
+ $config = $this->getModule('oauth2_config');
+ $clients = $config->getConfig();
+ $client_id = $this->APIOAuth2ClientId->Text;
+ if (key_exists($client_id, $clients)) {
+ $clients[$client_id]['client_id'] = $client_id;
+ $clients[$client_id]['client_secret'] = $this->APIOAuth2ClientSecret->Text;
+ $clients[$client_id]['redirect_uri'] = $this->APIOAuth2RedirectURI->Text;
+ $clients[$client_id]['scope'] = $this->APIOAuth2Scope->Text;
+ $clients[$client_id]['bconsole_cfg_path'] = $this->APIOAuth2BconsoleCfgPath->Text;
+ $clients[$client_id]['name'] = $this->APIOAuth2Name->Text;
+ $config->setConfig($clients);
+ }
+ $this->APIOAuth2EditPopup->close();
+ $this->OAuth2ClientList->DataSource = array_values($clients);
+ $this->OAuth2ClientList->dataBind();
+ $this->loadAuthParams(null, null);
}
}
?>
ID="AuthBasic"
GroupName="SelectAuth"
Checked="true"
- Attributes.onclick="$('#configure_oauth2_auth').hide();$('#configure_basic_auth').show();"
+ Attributes.onclick="$('#configure_oauth2_auth').hide();$('#configure_basic_auth').show();%>;"
OnCallback="setBasicValidation"
/>
<com:TLabel
/>
</div>
<div id="configure_basic_auth" style="display: <%=($this->AuthBasic->Checked === true) ? '' : 'none';%>">
- <div class="line">
- <div class="text"><com:TLabel ForControl="APILogin" Text="<%[ Administration login: ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="APILogin"
- CssClass="textbox"
- CausesValidation="false"
- />
- <com:TRequiredFieldValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APILogin"
- ValidationGroup="Basic"
- Text="<%[ Please enter login. ]%>"
- />
- <com:TRegularExpressionValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APILogin"
- ValidationGroup="Basic"
- RegularExpression="<%=BasicAPIUserConfig::USER_PATTERN%>"
- Text="<%[ Invalid login value. Login may contain a-z A-Z 0-9 characters. ]%>"
- />
+ <com:TPanel Visible="<%=$this->first_run%>">
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APILogin" Text="<%[ Administration login: ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="APILogin"
+ CssClass="textbox"
+ CausesValidation="false"
+ />
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APILogin"
+ ValidationGroup="Basic"
+ Text="<%[ Please enter login. ]%>"
+ />
+ <com:TRegularExpressionValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APILogin"
+ ValidationGroup="Basic"
+ RegularExpression="<%=BasicAPIUserConfig::USER_PATTERN%>"
+ Text="<%[ Invalid login value. Login may contain a-z A-Z 0-9 characters. ]%>"
+ />
+ </div>
</div>
- </div>
- <div class="line">
- <div class="text"><com:TLabel ForControl="APIPassword" Text="<%[ Administration password: ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="APIPassword"
- CssClass="textbox"
- TextMode="Password"
- MaxLength="30"
- PersistPassword="true"
- />
- <com:TRequiredFieldValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APIPassword"
- ValidationGroup="Basic"
- Text="<%[ Please enter password. ]%>"
- />
- <com:TRegularExpressionValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APIPassword"
- RegularExpression="[\S\s]{5,30}"
- ValidationGroup="Basic"
- Text="<%[ Password must be longer than 4 chars. ]%>"
- />
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIPassword" Text="<%[ Administration password: ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="APIPassword"
+ CssClass="textbox"
+ TextMode="Password"
+ MaxLength="30"
+ PersistPassword="true"
+ />
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIPassword"
+ ValidationGroup="Basic"
+ Text="<%[ Please enter password. ]%>"
+ />
+ <com:TRegularExpressionValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIPassword"
+ RegularExpression="[\S\s]{5,30}"
+ ValidationGroup="Basic"
+ Text="<%[ Password must be longer than 4 chars. ]%>"
+ />
+ </div>
</div>
- </div>
- <div class="line">
- <div class="text"><com:TLabel ForControl="RetypeAPIPassword" Text="<%[ Retype administration password: ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="RetypeAPIPassword"
- CssClass="textbox"
- TextMode="Password"
- MaxLength="30"
- PersistPassword="true"
- />
- <com:TRequiredFieldValidator
- ID="RetypePasswordRequireValidator"
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="RetypeAPIPassword"
- ValidationGroup="Basic"
- Text="<%[ Please enter retype password. ]%>"
- />
- <com:TRegularExpressionValidator
- ID="RetypePasswordRegexpValidator"
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="RetypeAPIPassword"
- RegularExpression="[\S\s]{5,30}"
- ValidationGroup="Basic"
- Text="<%[ Password must be longer than 4 chars. ]%>"
- />
- <com:TCompareValidator
- ID="RetypePasswordCustomValidator"
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="RetypeAPIPassword"
- ControlToCompare="APIPassword"
- ValidationGroup="Basic"
- Text="<%[ Passwords must be the same. ]%>"
- />
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="RetypeAPIPassword" Text="<%[ Retype administration password: ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="RetypeAPIPassword"
+ CssClass="textbox"
+ TextMode="Password"
+ MaxLength="30"
+ PersistPassword="true"
+ />
+ <com:TRequiredFieldValidator
+ ID="RetypePasswordRequireValidator"
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="RetypeAPIPassword"
+ ValidationGroup="Basic"
+ Text="<%[ Please enter retype password. ]%>"
+ />
+ <com:TRegularExpressionValidator
+ ID="RetypePasswordRegexpValidator"
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="RetypeAPIPassword"
+ RegularExpression="[\S\s]{5,30}"
+ ValidationGroup="Basic"
+ Text="<%[ Password must be longer than 4 chars. ]%>"
+ />
+ <com:TCompareValidator
+ ID="RetypePasswordCustomValidator"
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="RetypeAPIPassword"
+ ControlToCompare="APIPassword"
+ ValidationGroup="Basic"
+ Text="<%[ Passwords must be the same. ]%>"
+ />
+ </div>
</div>
- </div>
+ </com:TPanel>
</div>
- <div id="configure_oauth2_auth" style="display: <%=($this->AuthOAuth2->Checked === true) ? '' : 'none';%>">
- <h3><%[ First client registration ]%></h3>
- <h4><%[ Please do not forget to disable HTTP Basic auth in the API web server config. Othwerise OAuth2 will not work. ]%></h4>
- <div class="line">
- <div class="text"><com:TLabel ForControl="APIOAuth2ClientId" Text="<%[ OAuth2 Client ID: ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="APIOAuth2ClientId"
- CssClass="textbox"
- CausesValidation="false"
- MaxLength="32"
- />
- <com:TRequiredFieldValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APIOAuth2ClientId"
- ValidationGroup="OAuth2"
- Text="<%[ Please enter Client ID. ]%>"
- />
- <com:TRegularExpressionValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APIOAuth2ClientId"
- RegularExpression="<%=OAuth2::CLIENT_ID_PATTERN%>"
- ValidationGroup="OAuth2"
- Text="<%[ Invalid Client ID value. Client ID may contain a-z A-Z 0-9 - _ characters. ]%>"
+ <div id="configure_oauth2_auth" style="display: <%=$this->AuthOAuth2->Checked ? '' : 'none';%>">
+ <com:TPanel Visible="<%=($this->first_run || $this->add_auth_params)%>">
+ <h3><%[ First client registration ]%></h3>
+ <h4><%[ Please do not forget to disable HTTP Basic auth in the API web server config. Othwerise OAuth2 will not work. ]%></h4>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2ClientId" Text="<%[ OAuth2 Client ID: ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="APIOAuth2ClientId"
+ CssClass="textbox"
+ CausesValidation="false"
+ MaxLength="32"
/>
- <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientId->ClientID%>').value = get_random_string('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', 32); return false;"><%[ generate ]%></a>
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2ClientId"
+ ValidationGroup="OAuth2"
+ Text="<%[ Please enter Client ID. ]%>"
+ />
+ <com:TRegularExpressionValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2ClientId"
+ RegularExpression="<%=OAuth2::CLIENT_ID_PATTERN%>"
+ ValidationGroup="OAuth2"
+ Text="<%[ Invalid Client ID value. Client ID may contain a-z A-Z 0-9 - _ characters. ]%>"
+ />
+ <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientId->ClientID%>').value = get_random_string('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', 32); return false;"><%[ generate ]%></a>
+ </div>
</div>
- </div>
- <div class="line">
- <div class="text"><com:TLabel ForControl="APIOAuth2ClientSecret" Text="<%[ OAuth2 Client Secret: ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="APIOAuth2ClientSecret"
- CssClass="textbox"
- CausesValidation="false"
- MaxLength="40"
- />
- <com:TRequiredFieldValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APIOAuth2ClientSecret"
- ValidationGroup="OAuth2"
- Text="<%[ Please enter Client Secret. ]%>"
- />
- <com:TRegularExpressionValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APIOAuth2ClientSecret"
- RegularExpression="<%=OAuth2::CLIENT_SECRET_PATTERN%>"
- ValidationGroup="OAuth2"
- Text="<%[ Invalid Client Secret value. Client Secret may contain any character that is not a whitespace character. ]%>"
- />
- <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientSecret->ClientID%>').value = get_random_string('ABCDEFabcdef0123456789', 40); return false;"><%[ generate ]%></a>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2ClientSecret" Text="<%[ OAuth2 Client Secret: ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="APIOAuth2ClientSecret"
+ CssClass="textbox"
+ CausesValidation="false"
+ MaxLength="40"
+ />
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2ClientSecret"
+ ValidationGroup="OAuth2"
+ Text="<%[ Please enter Client Secret. ]%>"
+ />
+ <com:TRegularExpressionValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2ClientSecret"
+ RegularExpression="<%=OAuth2::CLIENT_SECRET_PATTERN%>"
+ ValidationGroup="OAuth2"
+ Text="<%[ Invalid Client Secret value. Client Secret may contain any character that is not a whitespace character. ]%>"
+ />
+ <a href="javascript:void(0)" onclick="document.getElementById('<%=$this->APIOAuth2ClientSecret->ClientID%>').value = get_random_string('ABCDEFabcdef0123456789', 40); return false;"><%[ generate ]%></a>
+ </div>
</div>
- </div>
- <div class="line">
- <div class="text"><com:TLabel ForControl="APIOAuth2RedirectURI" Text="<%[ OAuth2 Redirect URI (example: https://baculumgui:9095/web/redirect): ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="APIOAuth2RedirectURI"
- CssClass="textbox"
- CausesValidation="false"
- />
- <com:TRequiredFieldValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APIOAuth2RedirectURI"
- ValidationGroup="OAuth2"
- Text="<%[ Please enter Redirect URI. ]%>"
- />
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2RedirectURI" Text="<%[ OAuth2 Redirect URI (example: https://baculumgui:9095/web/redirect): ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="APIOAuth2RedirectURI"
+ CssClass="textbox"
+ CausesValidation="false"
+ />
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2RedirectURI"
+ ValidationGroup="OAuth2"
+ Text="<%[ Please enter Redirect URI. ]%>"
+ />
+ </div>
</div>
- </div>
- <div class="line">
- <div class="text"><com:TLabel ForControl="APIOAuth2Scope" Text="<%[ OAuth2 scopes (space separated): ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="APIOAuth2Scope"
- CssClass="textbox"
- CausesValidation="false"
- TextMode="MultiLine"
- />
- <a href="javascript:void(0)" onclick="set_scopes('<%=$this->APIOAuth2Scope->ClientID%>'); return false;" style="vertical-align: top"><%[ set all scopes ]%></a>
- <com:TRequiredFieldValidator
- CssClass="validator-block"
- Display="Dynamic"
- ControlCssClass="invalidate"
- ControlToValidate="APIOAuth2Scope"
- ValidationGroup="OAuth2"
- Text="<%[ Please enter OAuth2 scopes. ]%>"
- />
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2Scope" Text="<%[ OAuth2 scopes (space separated): ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="APIOAuth2Scope"
+ CssClass="textbox"
+ CausesValidation="false"
+ TextMode="MultiLine"
+ />
+ <a href="javascript:void(0)" onclick="set_scopes('<%=$this->APIOAuth2Scope->ClientID%>'); return false;" style="vertical-align: top"><%[ set all scopes ]%></a>
+ <com:TRequiredFieldValidator
+ CssClass="validator-block"
+ Display="Dynamic"
+ ControlCssClass="invalidate"
+ ControlToValidate="APIOAuth2Scope"
+ ValidationGroup="OAuth2"
+ Text="<%[ Please enter OAuth2 scopes. ]%>"
+ />
+ </div>
</div>
- </div>
- <div class="line">
- <div class="text"><com:TLabel ForControl="APIOAuth2BconsoleCfgPath" Text="<%[ Dedicated Bconsole config file path: ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="APIOAuth2BconsoleCfgPath"
- CssClass="textbox"
- CausesValidation="false"
- ValidationGroup="OAuth2"
- /> <%[ (optional) ]%>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2BconsoleCfgPath" Text="<%[ Dedicated Bconsole config file path: ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="APIOAuth2BconsoleCfgPath"
+ CssClass="textbox"
+ CausesValidation="false"
+ ValidationGroup="OAuth2"
+ /> <%[ (optional) ]%>
+ </div>
</div>
- </div>
- <div class="line">
- <div class="text"><com:TLabel ForControl="APIOAuth2Name" Text="<%[ Short name: ]%>" /></div>
- <div class="field">
- <com:TTextBox
- ID="APIOAuth2Name"
- CssClass="textbox"
- CausesValidation="false"
- /> <%[ (optional) ]%>
+ <div class="line">
+ <div class="text"><com:TLabel ForControl="APIOAuth2Name" Text="<%[ Short name: ]%>" /></div>
+ <div class="field">
+ <com:TTextBox
+ ID="APIOAuth2Name"
+ CssClass="textbox"
+ CausesValidation="false"
+ /> <%[ (optional) ]%>
+ </div>
</div>
- </div>
+ </com:TPanel>
</div>
<script type="text/javascript">
var wizard_validation = function() {
class APIInstallWizard extends BaculumAPIPage {
public $first_run;
+ public $add_auth_params = false;
public $config;
const DEFAULT_DB_NAME = 'bacula';
$config = $this->getModule('api_config');
$this->config = $config->getConfig();
$this->first_run = (count($this->config) === 0);
+ $oauth2_cfg = $this->getModule('oauth2_config')->getConfig();
+ $this->add_auth_params = (count($oauth2_cfg) === 0);
}
public function onLoad($param) {
}
input.textbox, select.textbox, textarea.textbox {
- width: 260px;
+ width: 300px;
border: 1px solid black;
- font-size: 11pt;
+ font-size: 11pt !important;
display: table-cell;
}
text-decoration: underline !important;
}
+.ui-dialog-content div a {
+ color: black !important;
+ text-decoration: underline !important;
+}
+
.ui-tabs {
font-size: 12px !important;
}