Skip to content

Commit

Permalink
Proper handling providers name and title
Browse files Browse the repository at this point in the history
  • Loading branch information
zorn committed May 3, 2018
1 parent d830936 commit 4d308ae
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 68 deletions.
4 changes: 4 additions & 0 deletions css/settings.css
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@
#openid_provider_tpl, #custom_oidc_provider_tpl {
display: none !important;
}
input[readonly] {
background-color: #ebebeb;
color: rgba(0, 0, 0, 0.4);
}
5 changes: 3 additions & 2 deletions l10n/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@
"Auto creating new users is disabled": "Автосоздание новых пользователей отключено",
"This account already connected": "Этот аккаунт уже подключен",
"Allow users to connect social logins with their account": "Позволять пользователям подключать социальные логины к своим аккаунтам",
"Duplicate provider title \"%s\"": "Дубликат названия поставщика \"%s\"",
"Invalid provider title \"%s\". Allowed characters \"0-9a-z_.@-\"": "Некорректное название поставщика \"%s\". Допустимые символы \"0-9a-z_.@-\"",
"Provider name cannot be empty": "Название поставщика не может быть пустым",
"Duplicate provider name \"%s\"": "Дубликат названия поставщика \"%s\"",
"Invalid provider name \"%s\". Allowed characters \"0-9a-z_.@-\"": "Некорректное название поставщика \"%s\". Допустимые символы \"0-9a-z_.@-\"",
"Social login connect": "Привязки социальных логинов",
"Available providers": "Доступные поставщики"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
Expand Down
14 changes: 7 additions & 7 deletions lib/AppInfo/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ public function register()
$providerUrl = '';
$providers = json_decode($config->getAppValue($this->appName, 'oauth_providers', '[]'), true);
if (is_array($providers)) {
foreach ($providers as $title=>$provider) {
foreach ($providers as $name=>$provider) {
if ($provider['appid']) {
++$providersCount;
$providerUrl = $urlGenerator->linkToRoute($this->appName.'.login.oauth', ['provider'=>$title]);
$providerUrl = $urlGenerator->linkToRoute($this->appName.'.login.oauth', ['provider'=>$name]);
\OC_App::registerLogIn([
'name' => ucfirst($title),
'name' => ucfirst($name),
'href' => $providerUrl,
]);
}
Expand All @@ -44,9 +44,9 @@ public function register()
if (is_array($providers)) {
foreach ($providers as $provider) {
++$providersCount;
$providerUrl = $urlGenerator->linkToRoute($this->appName.'.login.openid', ['provider'=>$provider['title']]);
$providerUrl = $urlGenerator->linkToRoute($this->appName.'.login.openid', ['provider'=>$provider['name']]);
\OC_App::registerLogIn([
'name' => ucfirst($provider['title']),
'name' => $provider['title'],
'href' => $providerUrl,
]);
}
Expand All @@ -55,9 +55,9 @@ public function register()
if (is_array($providers)) {
foreach ($providers as $provider) {
++$providersCount;
$providerUrl = $urlGenerator->linkToRoute($this->appName.'.login.custom_oidc', ['provider'=>$provider['title']]);
$providerUrl = $urlGenerator->linkToRoute($this->appName.'.login.custom_oidc', ['provider'=>$provider['name']]);
\OC_App::registerLogIn([
'name' => ucfirst($provider['title']),
'name' => $provider['title'],
'href' => $providerUrl,
]);
}
Expand Down
8 changes: 4 additions & 4 deletions lib/Controller/LoginController.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
use OCP\IGroupManager;
use OC\User\LoginException;
use OCA\SocialLogin\Storage\SessionStorage;
use OCA\SocialLogin\Provider\OpenID;
use OCA\SocialLogin\Provider\CustomOpenIDConnect;
use OCA\SocialLogin\Db\SocialConnectDAO;
use Hybridauth\Hybridauth;
use Hybridauth\User\Profile;
use Hybridauth\Provider\OpenID;
use Hybridauth\HttpClient\Curl;
use Hybridauth\Data;

Expand Down Expand Up @@ -122,7 +122,7 @@ public function openid($provider)
$providers = json_decode($this->config->getAppValue($this->appName, 'openid_providers', '[]'), true);
if (is_array($providers)) {
foreach ($providers as $prov) {
if ($prov['title'] === $provider) {
if ($prov['name'] === $provider) {
$idUrl = $prov['url'];
break;
}
Expand Down Expand Up @@ -160,7 +160,7 @@ public function customOidc($provider)
$providers = json_decode($this->config->getAppValue($this->appName, 'custom_oidc_providers', '[]'), true);
if (is_array($providers)) {
foreach ($providers as $prov) {
if ($prov['title'] === $provider) {
if ($prov['name'] === $provider) {
$keys = [
'id' => $prov['clientId'],
'secret' => $prov['clientSecret']
Expand All @@ -177,7 +177,7 @@ public function customOidc($provider)
}
}
}
if (!$config['keys']) {
if (!isset($config['keys'])) {
throw new LoginException($this->l->t('Unknown %s provider: "%s"', ['OpenID Connect', $provider]));
}
try {
Expand Down
27 changes: 16 additions & 11 deletions lib/Controller/SettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,19 @@ private function checkProviders($providers)
if (!is_array($providers)) {
return;
}
$titles = [];
$names = [];
foreach ($providers as $provider) {
$title = $provider['title'];
if (in_array($title, $titles)) {
throw new \Exception($this->l->t('Duplicate provider title "%s"', $title));
$name = $provider['name'];
if (empty($name)) {
throw new \Exception($this->l->t('Provider name cannot be empty'));
}
if (preg_match('#[^0-9a-z_.@-]#i', $title)) {
throw new \Exception($this->l->t('Invalid provider title "%s". Allowed characters "0-9a-z_.@-"', $title));
if (in_array($name, $names)) {
throw new \Exception($this->l->t('Duplicate provider name "%s"', $name));
}
$titles[] = $title;
if (preg_match('#[^0-9a-z_.@-]#i', $name)) {
throw new \Exception($this->l->t('Invalid provider name "%s". Allowed characters "0-9a-z_.@-"', $name));
}
$names[] = $name;
}
}

Expand All @@ -93,24 +96,26 @@ public function renderPersonal()
];
$providers = json_decode($this->config->getAppValue($this->appName, 'oauth_providers', '[]'), true);
if (is_array($providers)) {
foreach ($providers as $title=>$provider) {
foreach ($providers as $name=>$provider) {
if ($provider['appid']) {
$params['providers'][ucfirst($title)] = $this->urlGenerator->linkToRoute($this->appName.'.login.oauth', ['provider'=>$title]);
$params['providers'][ucfirst($title)] = $this->urlGenerator->linkToRoute($this->appName.'.login.oauth', ['provider'=>$name]);
}
}
}
$providers = json_decode($this->config->getAppValue($this->appName, 'openid_providers', '[]'), true);
if (is_array($providers)) {
foreach ($providers as $provider) {
$name = $provider['name'];
$title = $provider['title'];
$params['providers'][ucfirst($title)] = $this->urlGenerator->linkToRoute($this->appName.'.login.openid', ['provider'=>$title]);
$params['providers'][$title] = $this->urlGenerator->linkToRoute($this->appName.'.login.openid', ['provider'=>$name]);
}
}
$providers = json_decode($this->config->getAppValue($this->appName, 'custom_oidc_providers', '[]'), true);
if (is_array($providers)) {
foreach ($providers as $provider) {
$name = $provider['name'];
$title = $provider['title'];
$params['providers'][ucfirst($title)] = $this->urlGenerator->linkToRoute($this->appName.'.login.custom_oidc', ['provider'=>$title]);
$params['providers'][$title] = $this->urlGenerator->linkToRoute($this->appName.'.login.custom_oidc', ['provider'=>$name]);
}
}

Expand Down
110 changes: 66 additions & 44 deletions templates/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,17 @@
</div>
</p>
<hr/>
<?php foreach ($_['providers'] as $title=>$provider): ?>
<?php foreach ($_['providers'] as $name=>$provider): ?>
<div class="provider-settings">
<h2><?php p(ucfirst($title))?></h2>
<h2><?php p(ucfirst($name))?></h2>
<label>
<?php p('App id') ?><br>
<input type="text" name="providers[<?php p($title) ?>][appid]" value="<?php p($provider['appid']) ?>"/>
<input type="text" name="providers[<?php p($name) ?>][appid]" value="<?php p($provider['appid']) ?>"/>
</label>
<br>
<br/>
<label>
<?php p('Secret') ?><br>
<input type="password" name="providers[<?php p($title) ?>][secret]" value="<?php p($provider['secret']) ?>"/>
<input type="password" name="providers[<?php p($name) ?>][secret]" value="<?php p($provider['secret']) ?>"/>
</label>
</div>
<?php endforeach ?>
Expand All @@ -47,11 +47,16 @@
<?php foreach ($_['openid_providers'] as $k=>$provider): ?>
<div class="provider-settings">
<div class="openid-remove">x</div>
<label>
<?php p('Internal name') ?><br>
<input type="text" name="openid_providers[<?php p($k) ?>][name]" value="<?php p($provider['name']) ?>" class="disabled" readonly/>
</label>
<br/>
<label>
<?php p('Title') ?><br>
<input type="text" name="openid_providers[<?php p($k) ?>][title]" value="<?php p($provider['title']) ?>" required/>
</label>
<br>
<br/>
<label>
<?php p('Identifier url') ?><br>
<input type="url" name="openid_providers[<?php p($k) ?>][url]" value="<?php p($provider['url']) ?>" required/>
Expand All @@ -60,7 +65,7 @@
<?php endforeach ?>
</div>
<br/>
<h2>
<h2>
Custom OpenID Connect
<button id="custom_oidc_add" type="button">
<div class="icon-add"></div>
Expand All @@ -70,85 +75,102 @@
<?php foreach ($_['custom_oidc_providers'] as $k=>$provider): ?>
<div class="provider-settings">
<div class="custom_oidc-remove">x</div>
<label>
<?php p('Internal name') ?><br>
<input type="text" name="custom_oidc_providers[<?php p($k) ?>][name]" value="<?php p($provider['name']) ?>" readonly/>
</label>
<br/>
<label>
<?php p('Title') ?><br>
<input type="text" name="custom_oidc_providers[<?php p($k) ?>][title]" value="<?php p($provider['title']) ?>" required/>
</label>
<br>
<label>
<br/>
<label>
<?php p('Authorize url') ?><br>
<input type="url" name="custom_oidc_providers[<?php p($k) ?>][authorizeUrl]" value="<?php p($provider['authorizeUrl']) ?>" required/>
</label>
<br>
<label>
<?php p('Token url') ?><br>
<input type="url" name="custom_oidc_providers[<?php p($k) ?>][tokenUrl]" value="<?php p($provider['tokenUrl']) ?>" required/>
</label>
<br>
<label>
<?php p('Client Id') ?><br>
<input type="text" name="custom_oidc_providers[<?php p($k) ?>][clientId]" value="<?php p($provider['clientId']) ?>" required/>
</label>
<br>
<label>
<?php p('Client Secret') ?><br>
<input type="text" name="custom_oidc_providers[<?php p($k) ?>][clientSecret]" value="<?php p($provider['clientSecret']) ?>" required/>
</label>
<br>
<label>
<?php p('Scope') ?><br>
<input type="text" name="custom_oidc_providers[<?php p($k) ?>][scope]" value="<?php p($provider['scope']) ?>" required/>
</label>
<br/>
<label>
<?php p('Token url') ?><br>
<input type="url" name="custom_oidc_providers[<?php p($k) ?>][tokenUrl]" value="<?php p($provider['tokenUrl']) ?>" required/>
</label>
<br/>
<label>
<?php p('Client Id') ?><br>
<input type="text" name="custom_oidc_providers[<?php p($k) ?>][clientId]" value="<?php p($provider['clientId']) ?>" required/>
</label>
<br/>
<label>
<?php p('Client Secret') ?><br>
<input type="text" name="custom_oidc_providers[<?php p($k) ?>][clientSecret]" value="<?php p($provider['clientSecret']) ?>" required/>
</label>
<br/>
<label>
<?php p('Scope') ?><br>
<input type="text" name="custom_oidc_providers[<?php p($k) ?>][scope]" value="<?php p($provider['scope']) ?>" required/>
</label>
</div>
<?php endforeach ?>
</div>
<br/>
<button><?php p($l->t('Save')); ?></button>
</form>
<div id="openid_provider_tpl" class="provider-settings" data-new-id="<?php p(count($_['openid_providers'])) ?>">

<div id="openid_provider_tpl" class="provider-settings" data-new-id="<?php p(count($_['openid_providers'])) ?>">
<div class="openid-remove">x</div>
<label>
<?php p('Internal name') ?><br>
<input type="text" name="openid_providers[{{provider_id}}][name]" required/>
</label>
<br/>
<label>
<?php p('Title') ?><br>
<input type="text" name="openid_providers[{{provider_id}}][title]" required/>
</label>
<br>
<br/>
<label>
<?php p('Identifier url') ?><br>
<input type="url" name="openid_providers[{{provider_id}}][url]" required/>
</label>
</div>
<div id="custom_oidc_provider_tpl" class="provider-settings" data-new-id="<?php p(count($_['custom_oidc_providers'])) ?>">

<div id="custom_oidc_provider_tpl" class="provider-settings" data-new-id="<?php p(count($_['custom_oidc_providers'])) ?>">
<div class="custom_oidc-remove">x</div>
<label>
<label>
<?php p('Internal name') ?><br>
<input type="text" name="custom_oidc_providers[{{provider_id}}][name]" required/>
</label>
<br/>
<label>
<?php p('Title') ?><br>
<input type="text" name="custom_oidc_providers[{{provider_id}}][title]" required/>
</label>
<br>
<label>
<br/>
<label>
<?php p('Authorize URL') ?><br>
<input type="url" name="custom_oidc_providers[{{provider_id}}][authorizeUrl]" required/>
</label>
<br>
<label>
<br/>
<label>
<?php p('Token URL') ?><br>
<input type="url" name="custom_oidc_providers[{{provider_id}}][tokenUrl]" required/>
</label>
<br>
<label>
<br/>
<label>
<?php p('Client Id') ?><br>
<input type="text" name="custom_oidc_providers[{{provider_id}}][clientId]" required/>
</label>
<br>
<label>
<br/>
<label>
<?php p('Client Secret') ?><br>
<input type="text" name="custom_oidc_providers[{{provider_id}}][clientSecret]" required/>
</label>
<br>
<label>
<br/>
<label>
<?php p('Scope') ?><br>
<input type="text" name="custom_oidc_providers[{{provider_id}}][scope]" required/>
</label>
<br>
<br/>
</div>

</div>

0 comments on commit 4d308ae

Please sign in to comment.