]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add "single user mode" which restricts access to users in the admin group
authorRobin Appelman <icewind@owncloud.com>
Mon, 25 Nov 2013 14:08:24 +0000 (15:08 +0100)
committerRobin Appelman <icewind@owncloud.com>
Mon, 25 Nov 2013 14:08:24 +0000 (15:08 +0100)
This can be enabled by setting 'singleuser' to true in config.php

lib/base.php
public.php

index 865d174d21272d1facbb13d5dded60662e302603..b361ac3c71ae2d4c8adbf80b019d07b9a6b8a151 100644 (file)
@@ -230,6 +230,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) {
                if (OC_Config::getValue('installed', false)) {
                        $installedVersion = OC_Config::getValue('version', '0.0.0');
@@ -652,11 +668,12 @@ class OC {
                // Test it the user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP
                OC::tryBasicAuthLogin();
 
-               if (!self::$CLI) {
+               if (!self::$CLI and (!isset($_GET["logout"]) or ($_GET["logout"] !== 'true'))) {
                        try {
                                if (!OC_Config::getValue('maintenance', false)) {
                                        OC_App::loadApps();
                                }
+                               self::checkSingleUserMode();
                                OC::getRouter()->match(OC_Request::getRawPathInfo());
                                return;
                        } catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) {
index 203372fe1ea414706bff8927de1bf97addf8bd92..767295b98db100476f1119488443df88191a3835 100644 (file)
@@ -5,6 +5,7 @@ try {
 
        require_once 'lib/base.php';
        OC::checkMaintenanceMode();
+       OC::checkSingleUserMode();
        if (!isset($_GET['service'])) {
                header('HTTP/1.0 404 Not Found');
                exit;