fix(files_external): Convert VALUE_HIDDEN to FLAG_HIDDEN to allow combining VALUE_PASSWORD and FLAG_HIDDEN

Signed-off-by: provokateurin <kate@provokateurin.de>
pull/52628/head
provokateurin 2025-05-05 10:52:28 +07:00
parent e6bcc4e4e9
commit 01d2a9f76a
No known key found for this signature in database
13 changed files with 29 additions and 89 deletions

@ -94,7 +94,7 @@ class Backends extends Base {
*/ */
private function formatConfiguration(array $parameters): array { private function formatConfiguration(array $parameters): array {
$configuration = array_filter($parameters, function (DefinitionParameter $parameter) { $configuration = array_filter($parameters, function (DefinitionParameter $parameter) {
return $parameter->getType() !== DefinitionParameter::VALUE_HIDDEN; return $parameter->isFlagSet(DefinitionParameter::FLAG_HIDDEN);
}); });
return array_map(function (DefinitionParameter $parameter) { return array_map(function (DefinitionParameter $parameter) {
return $parameter->getTypeName(); return $parameter->getTypeName();

@ -21,14 +21,17 @@ class OAuth1 extends AuthMechanism {
->setText($l->t('OAuth1')) ->setText($l->t('OAuth1'))
->addParameters([ ->addParameters([
(new DefinitionParameter('configured', 'configured')) (new DefinitionParameter('configured', 'configured'))
->setType(DefinitionParameter::VALUE_HIDDEN), ->setType(DefinitionParameter::VALUE_TEXT)
->setFlag(DefinitionParameter::FLAG_HIDDEN),
new DefinitionParameter('app_key', $l->t('App key')), new DefinitionParameter('app_key', $l->t('App key')),
(new DefinitionParameter('app_secret', $l->t('App secret'))) (new DefinitionParameter('app_secret', $l->t('App secret')))
->setType(DefinitionParameter::VALUE_PASSWORD), ->setType(DefinitionParameter::VALUE_PASSWORD),
(new DefinitionParameter('token', 'token')) (new DefinitionParameter('token', 'token'))
->setType(DefinitionParameter::VALUE_HIDDEN), ->setType(DefinitionParameter::VALUE_PASSWORD)
->setFlag(DefinitionParameter::FLAG_HIDDEN),
(new DefinitionParameter('token_secret', 'token_secret')) (new DefinitionParameter('token_secret', 'token_secret'))
->setType(DefinitionParameter::VALUE_HIDDEN), ->setType(DefinitionParameter::VALUE_PASSWORD)
->setFlag(DefinitionParameter::FLAG_HIDDEN),
]) ])
->addCustomJs('oauth1') ->addCustomJs('oauth1')
; ;

@ -21,12 +21,14 @@ class OAuth2 extends AuthMechanism {
->setText($l->t('OAuth2')) ->setText($l->t('OAuth2'))
->addParameters([ ->addParameters([
(new DefinitionParameter('configured', 'configured')) (new DefinitionParameter('configured', 'configured'))
->setType(DefinitionParameter::VALUE_HIDDEN), ->setType(DefinitionParameter::VALUE_TEXT)
->setFlag(DefinitionParameter::FLAG_HIDDEN),
new DefinitionParameter('client_id', $l->t('Client ID')), new DefinitionParameter('client_id', $l->t('Client ID')),
(new DefinitionParameter('client_secret', $l->t('Client secret'))) (new DefinitionParameter('client_secret', $l->t('Client secret')))
->setType(DefinitionParameter::VALUE_PASSWORD), ->setType(DefinitionParameter::VALUE_PASSWORD),
(new DefinitionParameter('token', 'token')) (new DefinitionParameter('token', 'token'))
->setType(DefinitionParameter::VALUE_HIDDEN), ->setType(DefinitionParameter::VALUE_PASSWORD)
->setFlag(DefinitionParameter::FLAG_HIDDEN),
]) ])
->addCustomJs('oauth2') ->addCustomJs('oauth2')
; ;

@ -31,7 +31,8 @@ class RSA extends AuthMechanism {
new DefinitionParameter('user', $l->t('Login')), new DefinitionParameter('user', $l->t('Login')),
new DefinitionParameter('public_key', $l->t('Public key')), new DefinitionParameter('public_key', $l->t('Public key')),
(new DefinitionParameter('private_key', 'private_key')) (new DefinitionParameter('private_key', 'private_key'))
->setType(DefinitionParameter::VALUE_HIDDEN), ->setType(DefinitionParameter::VALUE_PASSWORD)
->setFlag(DefinitionParameter::FLAG_HIDDEN),
]) ])
->addCustomJs('public_key') ->addCustomJs('public_key')
; ;

@ -52,10 +52,6 @@ class LegacyBackend extends Backend {
$type = DefinitionParameter::VALUE_PASSWORD; $type = DefinitionParameter::VALUE_PASSWORD;
$placeholder = substr($placeholder, 1); $placeholder = substr($placeholder, 1);
break; break;
case '#':
$type = DefinitionParameter::VALUE_HIDDEN;
$placeholder = substr($placeholder, 1);
break;
} }
$this->addParameter((new DefinitionParameter($name, $placeholder)) $this->addParameter((new DefinitionParameter($name, $placeholder))
->setType($type) ->setType($type)

@ -49,8 +49,9 @@ class SMB extends Backend {
->setFlag(DefinitionParameter::FLAG_OPTIONAL) ->setFlag(DefinitionParameter::FLAG_OPTIONAL)
->setTooltip($l->t("Check the ACL's of each file or folder inside a directory to filter out items where the account has no read permissions, comes with a performance penalty")), ->setTooltip($l->t("Check the ACL's of each file or folder inside a directory to filter out items where the account has no read permissions, comes with a performance penalty")),
(new DefinitionParameter('timeout', $l->t('Timeout'))) (new DefinitionParameter('timeout', $l->t('Timeout')))
->setType(DefinitionParameter::VALUE_HIDDEN) ->setType(DefinitionParameter::VALUE_TEXT)
->setFlag(DefinitionParameter::FLAG_OPTIONAL), ->setFlag(DefinitionParameter::FLAG_OPTIONAL)
->setFlag(DefinitionParameter::FLAG_HIDDEN),
]) ])
->addAuthScheme(AuthMechanism::SCHEME_PASSWORD) ->addAuthScheme(AuthMechanism::SCHEME_PASSWORD)
->addAuthScheme(AuthMechanism::SCHEME_SMB) ->addAuthScheme(AuthMechanism::SCHEME_SMB)

@ -18,12 +18,12 @@ class DefinitionParameter implements \JsonSerializable {
public const VALUE_TEXT = 0; public const VALUE_TEXT = 0;
public const VALUE_BOOLEAN = 1; public const VALUE_BOOLEAN = 1;
public const VALUE_PASSWORD = 2; public const VALUE_PASSWORD = 2;
public const VALUE_HIDDEN = 3;
/** Flag constants */ /** Flag constants */
public const FLAG_NONE = 0; public const FLAG_NONE = 0;
public const FLAG_OPTIONAL = 1; public const FLAG_OPTIONAL = 1;
public const FLAG_USER_PROVIDED = 2; public const FLAG_USER_PROVIDED = 2;
public const FLAG_HIDDEN = 4;
/** @var string human-readable parameter tooltip */ /** @var string human-readable parameter tooltip */
private string $tooltip = ''; private string $tooltip = '';

@ -647,13 +647,13 @@ const MountConfigListView = function($el, options) {
MountConfigListView.ParameterFlags = { MountConfigListView.ParameterFlags = {
OPTIONAL: 1, OPTIONAL: 1,
USER_PROVIDED: 2, USER_PROVIDED: 2,
HIDDEN: 4,
} }
MountConfigListView.ParameterTypes = { MountConfigListView.ParameterTypes = {
TEXT: 0, TEXT: 0,
BOOLEAN: 1, BOOLEAN: 1,
PASSWORD: 2, PASSWORD: 2,
HIDDEN: 3,
} }
/** /**
@ -1142,13 +1142,13 @@ MountConfigListView.prototype = _.extend({
let newElement let newElement
const trimmedPlaceholder = placeholder.value const trimmedPlaceholder = placeholder.value
if (placeholder.type === MountConfigListView.ParameterTypes.PASSWORD) { if (hasFlag(MountConfigListView.ParameterFlags.HIDDEN)) {
newElement = $('<input type="hidden" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" />')
} else if (placeholder.type === MountConfigListView.ParameterTypes.PASSWORD) {
newElement = $('<input type="password" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" placeholder="' + trimmedPlaceholder + '" />') newElement = $('<input type="password" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" placeholder="' + trimmedPlaceholder + '" />')
} else if (placeholder.type === MountConfigListView.ParameterTypes.BOOLEAN) { } else if (placeholder.type === MountConfigListView.ParameterTypes.BOOLEAN) {
const checkboxId = _.uniqueId('checkbox_') const checkboxId = _.uniqueId('checkbox_')
newElement = $('<div><label><input type="checkbox" id="' + checkboxId + '" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" />' + trimmedPlaceholder + '</label></div>') newElement = $('<div><label><input type="checkbox" id="' + checkboxId + '" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" />' + trimmedPlaceholder + '</label></div>')
} else if (placeholder.type === MountConfigListView.ParameterTypes.HIDDEN) {
newElement = $('<input type="hidden" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" />')
} else { } else {
newElement = $('<input type="text" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" placeholder="' + trimmedPlaceholder + '" />') newElement = $('<input type="text" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" placeholder="' + trimmedPlaceholder + '" />')
} }

@ -7,7 +7,6 @@
*/ */
use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Auth\AuthMechanism;
use OCA\Files_External\Lib\Backend\Backend; use OCA\Files_External\Lib\Backend\Backend;
use OCA\Files_External\Lib\DefinitionParameter;
use OCA\Files_External\Service\BackendService; use OCA\Files_External\Service\BackendService;
/** @var array $_ */ /** @var array $_ */
@ -42,63 +41,6 @@ foreach ($_['authMechanisms'] as $authMechanism) {
} }
} }
function writeParameterInput($parameter, $options, $classes = []) {
$value = '';
if (isset($options[$parameter->getName()])) {
$value = $options[$parameter->getName()];
}
$placeholder = $parameter->getText();
$is_optional = $parameter->isFlagSet(DefinitionParameter::FLAG_OPTIONAL);
switch ($parameter->getType()) {
case DefinitionParameter::VALUE_PASSWORD: ?>
<?php if ($is_optional) {
$classes[] = 'optional';
} ?>
<input type="password"
<?php if (!empty($classes)): ?> class="<?php p(implode(' ', $classes)); ?>"<?php endif; ?>
data-parameter="<?php p($parameter->getName()); ?>"
value="<?php p($value); ?>"
placeholder="<?php p($placeholder); ?>"
/>
<?php
break;
case DefinitionParameter::VALUE_BOOLEAN: ?>
<?php $checkboxId = uniqid('checkbox_'); ?>
<div>
<label>
<input type="checkbox"
id="<?php p($checkboxId); ?>"
<?php if (!empty($classes)): ?> class="checkbox <?php p(implode(' ', $classes)); ?>"<?php endif; ?>
data-parameter="<?php p($parameter->getName()); ?>"
<?php if ($value === true): ?> checked="checked"<?php endif; ?>
/>
<?php p($placeholder); ?>
</label>
</div>
<?php
break;
case DefinitionParameter::VALUE_HIDDEN: ?>
<input type="hidden"
<?php if (!empty($classes)): ?> class="<?php p(implode(' ', $classes)); ?>"<?php endif; ?>
data-parameter="<?php p($parameter->getName()); ?>"
value="<?php p($value); ?>"
/>
<?php
break;
default: ?>
<?php if ($is_optional) {
$classes[] = 'optional';
} ?>
<input type="text"
<?php if (!empty($classes)): ?> class="<?php p(implode(' ', $classes)); ?>"<?php endif; ?>
data-parameter="<?php p($parameter->getName()); ?>"
value="<?php p($value); ?>"
placeholder="<?php p($placeholder); ?>"
/>
<?php
}
}
?> ?>
<div class="emptyfilelist emptycontent hidden"> <div class="emptyfilelist emptycontent hidden">

@ -32,7 +32,6 @@ class LegacyBackendTest extends \Test\TestCase {
'textfield' => 'Text field', 'textfield' => 'Text field',
'passwordfield' => '*Password field', 'passwordfield' => '*Password field',
'checkbox' => '!Checkbox', 'checkbox' => '!Checkbox',
'hiddenfield' => '#Hidden field',
'optionaltext' => '&Optional text field', 'optionaltext' => '&Optional text field',
'optionalpassword' => '&*Optional password field', 'optionalpassword' => '&*Optional password field',
], ],
@ -66,9 +65,6 @@ class LegacyBackendTest extends \Test\TestCase {
$this->assertEquals('Checkbox', $parameters['checkbox']->getText()); $this->assertEquals('Checkbox', $parameters['checkbox']->getText());
$this->assertEquals(DefinitionParameter::VALUE_BOOLEAN, $parameters['checkbox']->getType()); $this->assertEquals(DefinitionParameter::VALUE_BOOLEAN, $parameters['checkbox']->getType());
$this->assertEquals(DefinitionParameter::FLAG_NONE, $parameters['checkbox']->getFlags()); $this->assertEquals(DefinitionParameter::FLAG_NONE, $parameters['checkbox']->getFlags());
$this->assertEquals('Hidden field', $parameters['hiddenfield']->getText());
$this->assertEquals(DefinitionParameter::VALUE_HIDDEN, $parameters['hiddenfield']->getType());
$this->assertEquals(DefinitionParameter::FLAG_NONE, $parameters['hiddenfield']->getFlags());
$this->assertEquals('Optional text field', $parameters['optionaltext']->getText()); $this->assertEquals('Optional text field', $parameters['optionaltext']->getText());
$this->assertEquals(DefinitionParameter::VALUE_TEXT, $parameters['optionaltext']->getType()); $this->assertEquals(DefinitionParameter::VALUE_TEXT, $parameters['optionaltext']->getType());
$this->assertEquals(DefinitionParameter::FLAG_OPTIONAL, $parameters['optionaltext']->getFlags()); $this->assertEquals(DefinitionParameter::FLAG_OPTIONAL, $parameters['optionaltext']->getFlags());

@ -38,12 +38,12 @@ class DefinitionParameterTest extends \Test\TestCase {
'tooltip' => '', 'tooltip' => '',
], $param->jsonSerialize()); ], $param->jsonSerialize());
$param->setType(Param::VALUE_HIDDEN); $param->setType(Param::VALUE_TEXT);
$param->setFlags(Param::FLAG_NONE); $param->setFlags(Param::FLAG_HIDDEN);
$this->assertEquals([ $this->assertEquals([
'value' => 'bar', 'value' => 'bar',
'flags' => Param::FLAG_NONE, 'flags' => Param::FLAG_HIDDEN,
'type' => Param::VALUE_HIDDEN, 'type' => Param::VALUE_TEXT,
'tooltip' => '', 'tooltip' => '',
], $param->jsonSerialize()); ], $param->jsonSerialize());
} }
@ -53,6 +53,7 @@ class DefinitionParameterTest extends \Test\TestCase {
[Param::VALUE_TEXT, Param::FLAG_NONE, 'abc', true], [Param::VALUE_TEXT, Param::FLAG_NONE, 'abc', true],
[Param::VALUE_TEXT, Param::FLAG_NONE, '', false], [Param::VALUE_TEXT, Param::FLAG_NONE, '', false],
[Param::VALUE_TEXT, Param::FLAG_OPTIONAL, '', true], [Param::VALUE_TEXT, Param::FLAG_OPTIONAL, '', true],
[Param::VALUE_TEXT, Param::FLAG_HIDDEN, '', false],
[Param::VALUE_BOOLEAN, Param::FLAG_NONE, false, true], [Param::VALUE_BOOLEAN, Param::FLAG_NONE, false, true],
[Param::VALUE_BOOLEAN, Param::FLAG_NONE, 123, false], [Param::VALUE_BOOLEAN, Param::FLAG_NONE, 123, false],
@ -62,8 +63,6 @@ class DefinitionParameterTest extends \Test\TestCase {
[Param::VALUE_PASSWORD, Param::FLAG_NONE, 'foobar', true], [Param::VALUE_PASSWORD, Param::FLAG_NONE, 'foobar', true],
[Param::VALUE_PASSWORD, Param::FLAG_NONE, '', false], [Param::VALUE_PASSWORD, Param::FLAG_NONE, '', false],
[Param::VALUE_HIDDEN, Param::FLAG_NONE, '', false]
]; ];
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long