Merge pull request #6036 from owncloud/single-user-mode
Add "single user mode"
This commit is contained in:
commit
d7d7d9b8e3
|
@ -235,4 +235,7 @@ $CONFIG = array(
|
||||||
'openssl' => array(
|
'openssl' => array(
|
||||||
//'config' => '/absolute/location/of/openssl.cnf',
|
//'config' => '/absolute/location/of/openssl.cnf',
|
||||||
),
|
),
|
||||||
|
|
||||||
|
/* whether usage of the instance should be restricted to admin users only */
|
||||||
|
'singleuser' => false,
|
||||||
);
|
);
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OC\Core\Command\Maintenance;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
class SingleUser extends Command {
|
||||||
|
|
||||||
|
protected function configure() {
|
||||||
|
$this
|
||||||
|
->setName('maintenance:singleuser')
|
||||||
|
->setDescription('set single user mode')
|
||||||
|
->addOption(
|
||||||
|
'on',
|
||||||
|
null,
|
||||||
|
InputOption::VALUE_NONE,
|
||||||
|
'enable single user mode'
|
||||||
|
)
|
||||||
|
->addOption(
|
||||||
|
'off',
|
||||||
|
null,
|
||||||
|
InputOption::VALUE_NONE,
|
||||||
|
'disable single user mode'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output) {
|
||||||
|
if ($input->getOption('on')) {
|
||||||
|
\OC_Config::setValue('singleuser', true);
|
||||||
|
$output->writeln('Single user mode enabled');
|
||||||
|
} elseif ($input->getOption('off')) {
|
||||||
|
\OC_Config::setValue('singleuser', false);
|
||||||
|
$output->writeln('Single user mode disabled');
|
||||||
|
} else {
|
||||||
|
if (\OC_Config::getValue('singleuser', false)) {
|
||||||
|
$output->writeln('Single user mode is currently enabled');
|
||||||
|
} else {
|
||||||
|
$output->writeln('Single user mode is currently disabled');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,7 @@
|
||||||
$application->add(new OC\Core\Command\Status);
|
$application->add(new OC\Core\Command\Status);
|
||||||
$application->add(new OC\Core\Command\Db\GenerateChangeScript());
|
$application->add(new OC\Core\Command\Db\GenerateChangeScript());
|
||||||
$application->add(new OC\Core\Command\Upgrade());
|
$application->add(new OC\Core\Command\Upgrade());
|
||||||
|
$application->add(new OC\Core\Command\Maintenance\SingleUser());
|
||||||
$application->add(new OC\Core\Command\App\Disable());
|
$application->add(new OC\Core\Command\App\Disable());
|
||||||
$application->add(new OC\Core\Command\App\Enable());
|
$application->add(new OC\Core\Command\App\Enable());
|
||||||
$application->add(new OC\Core\Command\App\ListApps());
|
$application->add(new OC\Core\Command\App\ListApps());
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<ul>
|
||||||
|
<li class='update'>
|
||||||
|
<?php p($l->t('This ownCloud instance is currently in single user mode.')) ?><br /><br />
|
||||||
|
<?php p($l->t('This means only administrators can use the instance.')) ?><br /><br />
|
||||||
|
<?php p($l->t('Contact your system administrator if this message persists or appeared unexpectedly.')) ?>
|
||||||
|
<br /><br />
|
||||||
|
<?php p($l->t('Thank you for your patience.')); ?><br /><br />
|
||||||
|
<a class="button" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>><?php p($l->t('Log out')); ?></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
19
lib/base.php
19
lib/base.php
|
@ -238,6 +238,22 @@ class OC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function checkSingleUserMode() {
|
||||||
|
$user = OC_User::getUserSession()->getUser();
|
||||||
|
$group = OC_Group::getManager()->get('admin');
|
||||||
|
if ($user && OC_Config::getValue('singleuser', false) && !$group->inGroup($user)) {
|
||||||
|
// send http status 503
|
||||||
|
header('HTTP/1.1 503 Service Temporarily Unavailable');
|
||||||
|
header('Status: 503 Service Temporarily Unavailable');
|
||||||
|
header('Retry-After: 120');
|
||||||
|
|
||||||
|
// render error page
|
||||||
|
$tmpl = new OC_Template('', 'singleuser.user', 'guest');
|
||||||
|
$tmpl->printPage();
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static function checkUpgrade($showTemplate = true) {
|
public static function checkUpgrade($showTemplate = true) {
|
||||||
if (OC_Config::getValue('installed', false)) {
|
if (OC_Config::getValue('installed', false)) {
|
||||||
$installedVersion = OC_Config::getValue('version', '0.0.0');
|
$installedVersion = OC_Config::getValue('version', '0.0.0');
|
||||||
|
@ -667,11 +683,12 @@ class OC {
|
||||||
// Test it the user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP
|
// Test it the user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP
|
||||||
OC::tryBasicAuthLogin();
|
OC::tryBasicAuthLogin();
|
||||||
|
|
||||||
if (!self::$CLI) {
|
if (!self::$CLI and (!isset($_GET["logout"]) or ($_GET["logout"] !== 'true'))) {
|
||||||
try {
|
try {
|
||||||
if (!OC_Config::getValue('maintenance', false)) {
|
if (!OC_Config::getValue('maintenance', false)) {
|
||||||
OC_App::loadApps();
|
OC_App::loadApps();
|
||||||
}
|
}
|
||||||
|
self::checkSingleUserMode();
|
||||||
OC::getRouter()->match(OC_Request::getRawPathInfo());
|
OC::getRouter()->match(OC_Request::getRawPathInfo());
|
||||||
return;
|
return;
|
||||||
} catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) {
|
} catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) {
|
||||||
|
|
|
@ -5,6 +5,7 @@ try {
|
||||||
|
|
||||||
require_once 'lib/base.php';
|
require_once 'lib/base.php';
|
||||||
OC::checkMaintenanceMode();
|
OC::checkMaintenanceMode();
|
||||||
|
OC::checkSingleUserMode();
|
||||||
if (!isset($_GET['service'])) {
|
if (!isset($_GET['service'])) {
|
||||||
header('HTTP/1.0 404 Not Found');
|
header('HTTP/1.0 404 Not Found');
|
||||||
exit;
|
exit;
|
||||||
|
|
Loading…
Reference in New Issue