]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Add name field to api client parameters
authorMarcin Haba <marcin.haba@bacula.pl>
Sat, 11 Aug 2018 06:13:29 +0000 (08:13 +0200)
committerKern Sibbald <kern@sibbald.com>
Wed, 15 Aug 2018 08:32:59 +0000 (10:32 +0200)
gui/baculum/protected/API/Class/OAuth2/OAuth2Config.php
gui/baculum/protected/API/Pages/Panel/APIHome.page
gui/baculum/protected/API/Pages/Panel/APIHome.php
gui/baculum/protected/API/Pages/Panel/APIInstallWizard.page
gui/baculum/protected/API/Pages/Panel/APIInstallWizard.php
gui/baculum/protected/Common/Portlets/NewAuthClient.php
gui/baculum/protected/Common/Portlets/NewAuthClient.tpl

index 3e6e6c052d7665b55ece8cb6c204edc1191cd419..6088bb5b4a69d093c9e7544b95647fc65b251bc1 100644 (file)
@@ -45,6 +45,14 @@ class OAuth2Config extends ConfigFileModule {
         */
        private $required_options = array('client_id', 'client_secret', 'redirect_uri', 'scope');
 
+       /**
+        * New options with default values that has been added later (after creating config).
+        * They are added to config output.
+        *
+        * @see OAuth2Config::setAddedOptions()
+        */
+       private $added_options = array('name' => '');
+
        /**
         * Get (read) OAuth2 client config.
         *
@@ -56,7 +64,7 @@ class OAuth2Config extends ConfigFileModule {
                $config = $this->readConfig(self::CONFIG_FILE_PATH, self::CONFIG_FILE_FORMAT);
                $is_valid = true;
                if (!is_null($section)) {
-                       $config = array_key_exists($section, $config) ? $config[$section] : array();
+                       $config = key_exists($section, $config) ? $config[$section] : array();
                        $is_valid = $this->validateConfig($config);
                } else {
                        foreach ($config as $value) {
@@ -69,6 +77,8 @@ class OAuth2Config extends ConfigFileModule {
                if ($is_valid === false) {
                        // no validity, no config
                        $config = array();
+               } else {
+                       $this->setAddedOptions($config, $section);
                }
                return $config;
        }
@@ -101,7 +111,7 @@ class OAuth2Config extends ConfigFileModule {
                 * case errors and it could cause save to log a private auth params.
                 */
                for ($i = 0; $i < count($this->required_options); $i++) {
-                       if (!array_key_exists($this->required_options[$i], $config)) {
+                       if (!key_exists($this->required_options[$i], $config)) {
                                $is_valid = false;
                                $emsg = 'Invalid OAuth2 config. Missing ' . $this->required_options[$i] . ' option.';
                                $this->getModule('logging')->log(
@@ -116,4 +126,27 @@ class OAuth2Config extends ConfigFileModule {
                }
                return $is_valid;
        }
+
+       /**
+        * Add "on the fly" new options to config.
+        * Note, this method should be used after config validation.
+        *
+        * @param array reference $config config to set added options.
+        * @param mixed $section determines if passed all config or only section
+        * @return none
+        */
+       private function setAddedOptions(&$config, $section = null) {
+               foreach ($this->added_options as $added_opt => $defval) {
+                       if (is_null($section)) {
+                               foreach($config as $key => $value) {
+                                       if (!key_exists($added_opt, $value)) {
+                                               $config[$key][$added_opt] = $defval;
+                                       }
+                               }
+                       } elseif (!key_exists($added_opt, $config)) {
+                               $config[$added_opt] = $defval;
+                       }
+               }
+       }
 }
+?>
index 412f45df1f13bba83371f63f24ff7b56918ee8a5..84142f109a0ea1aa5e3ded95bd581a68da4f12fe 100644 (file)
@@ -16,6 +16,9 @@
                                </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>
                        <div style="clear: left; margin-top: 60px;">
                                <select id="section" class="api_select">
                                        <option value="none"><%[ Please select API endpoint ]%></option>
                                AlternatingItemStyle.BackColor="#4e4e50"
                                CssClass="tab-grid"
                        >
+                               <com:TBoundColumn
+                                       HeaderText="<%[ Name ]%>"
+                                       DataField="name"
+                               />
                                <com:TBoundColumn
                                        ID="ClientIDColumn"
                                        HeaderText="<%[ Client ID ]%>"
index e69c21b69a4b8f02e9ba93b12974ce4773a2f275..f3e09af409d8f548ee526b9a8fe66e50c5672d0a 100644 (file)
@@ -42,15 +42,15 @@ class APIHome extends BaculumAPIPage {
                        $params = array();
                        $oauth2_cfg = $this->getModule('oauth2_config')->getConfig();
                        if ($config['api']['auth_type'] === 'oauth2') {
-                               if (array_key_exists($config['api']['client_id'], $oauth2_cfg)) {
+                               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') {
                                $params = array(
                                        'login' => $config['api']['login'],
@@ -78,6 +78,13 @@ class APIHome extends BaculumAPIPage {
                $this->OAuth2ClientList->dataBind();
        }
 
+       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();
+       }
+
        private function getBasicUsers() {
                $basic_users = array();
                $basic_cfg = $this->getModule('basic_apiuser')->getAllUsers();
index b359b1535b5c64437843feb30ff298c3928c47a2..8fc6f5cc6f09497b10128de29871af5339851bf4 100644 (file)
                                                /> <%[ (optional) ]%>
                                        </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>
+                               </div>
                        </div>
                        <script type="text/javascript">
                                var wizard_validation = function() {
index d06653161629e5194acb7a42462e5791aa327992..10e899dae3cbeda3a98e413f54ef21ea43db6b90 100644 (file)
@@ -150,12 +150,13 @@ class APIInstallWizard extends BaculumAPIPage {
                                        $this->AuthBasic->Checked = false;
                                        $this->AuthOAuth2->Checked = true;
                                        $oauth2_cfg = $this->getModule('oauth2_config')->getConfig();
-                                       if (array_key_exists($this->config['api']['client_id'], $oauth2_cfg)) {
+                                       if (key_exists($this->config['api']['client_id'], $oauth2_cfg)) {
                                                $this->APIOAuth2ClientId->Text = $this->config['api']['client_id'];
                                                $this->APIOAuth2ClientSecret->Text = $oauth2_cfg[$this->config['api']['client_id']]['client_secret'];
                                                $this->APIOAuth2RedirectURI->Text = $oauth2_cfg[$this->config['api']['client_id']]['redirect_uri'];
                                                $this->APIOAuth2Scope->Text = $oauth2_cfg[$this->config['api']['client_id']]['scope'];
                                                $this->APIOAuth2BconsoleCfgPath->Text = $oauth2_cfg[$this->config['api']['client_id']]['bconsole_cfg_path'];
+                                               $this->APIOAuth2Name->Text = $oauth2_cfg[$this->config['api']['client_id']]['name'];
                                        }
                                }
                        }
@@ -236,6 +237,7 @@ class APIInstallWizard extends BaculumAPIPage {
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text]['redirect_uri'] = $this->APIOAuth2RedirectURI->Text;
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text]['scope'] = $this->APIOAuth2Scope->Text;
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text]['bconsole_cfg_path'] = $this->APIOAuth2BconsoleCfgPath->Text;
+                               $oauth2_cfg[$this->APIOAuth2ClientId->Text]['name'] = $this->APIOAuth2Name->Text;
                                $this->getModule('oauth2_config')->setConfig($oauth2_cfg);
                        }
                        $this->goToDefaultPage();
index 5520fe6aeeaad879cb18f9e55fac8ac016fb3d3d..c5c78f77659b6a6b5de96de1c0e56574f2fd3205 100644 (file)
@@ -45,7 +45,7 @@ class NewAuthClient extends PortletTemplate {
                $config = $this->getModule('api_config')->getConfig();
                if ($this->getAuthType() === 'basic') {
                        $users = $this->getModule('basic_apiuser')->getAllUsers();
-                       if (!array_key_exists($this->APIBasicLogin->Text, $users)) {
+                       if (!key_exists($this->APIBasicLogin->Text, $users)) {
                                $result = $this->getModule('basic_apiuser')->setUsersConfig(
                                        $this->APIBasicLogin->Text,
                                        $this->APIBasicPassword->Text
@@ -55,13 +55,14 @@ class NewAuthClient extends PortletTemplate {
                        }
                } elseif ($this->getAuthType() === 'oauth2') {
                        $oauth2_cfg = $this->getModule('oauth2_config')->getConfig();
-                       if (!array_key_exists($this->APIOAuth2ClientId->Text, $oauth2_cfg)) {
+                       if (!key_exists($this->APIOAuth2ClientId->Text, $oauth2_cfg)) {
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text] = array();
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text]['client_id'] = $this->APIOAuth2ClientId->Text;
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text]['client_secret'] = $this->APIOAuth2ClientSecret->Text;
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text]['redirect_uri'] = $this->APIOAuth2RedirectURI->Text;
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text]['scope'] = $this->APIOAuth2Scope->Text;
                                $oauth2_cfg[$this->APIOAuth2ClientId->Text]['bconsole_cfg_path'] = $this->APIOAuth2BconsoleCfgPath->Text;
+                               $oauth2_cfg[$this->APIOAuth2ClientId->Text]['name'] = $this->APIOAuth2Name->Text;
                                $result = $this->getModule('oauth2_config')->setConfig($oauth2_cfg);
                        } else {
                                $exists = true;
index 68b0f2060e0012642e913b9ede48c1f0111c494b..11a7bf72e862ef01c0ed1d3283871bcc1867fff1 100644 (file)
                                /> <%[ (optional) ]%>
                        </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>
+               </div>
        </div>
        <div class="center" style="width: 550px;<%=($this->getShowButtons() ? '' : 'display: none;')%>">
                <com:BButton