aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/legacy
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@users.noreply.github.com>2024-03-15 13:01:10 +0100
committerGitHub <noreply@github.com>2024-03-15 13:01:10 +0100
commit3f560ae940a5648572104c1287929b66b196fa4c (patch)
tree0d6a645ef3bc08bd94a48d0fb64954f733a0f10b /lib/private/legacy
parent40edb426a3a6857598ff3f447a85e83e32ff0c32 (diff)
parentdf1cd1ba7e6e1f6e66a2b3229b5c082f1b81162e (diff)
downloadnextcloud-server-3f560ae940a5648572104c1287929b66b196fa4c.tar.gz
nextcloud-server-3f560ae940a5648572104c1287929b66b196fa4c.zip
Merge branch 'master' into refactor/OC-Server-getRootFolder
Signed-off-by: John Molakvoæ <skjnldsv@users.noreply.github.com>
Diffstat (limited to 'lib/private/legacy')
-rw-r--r--lib/private/legacy/OC_API.php2
-rw-r--r--lib/private/legacy/OC_App.php30
-rw-r--r--lib/private/legacy/OC_EventSource.php4
-rw-r--r--lib/private/legacy/OC_Files.php6
-rw-r--r--lib/private/legacy/OC_Helper.php7
-rw-r--r--lib/private/legacy/OC_JSON.php14
-rw-r--r--lib/private/legacy/OC_Template.php75
-rw-r--r--lib/private/legacy/OC_User.php26
-rw-r--r--lib/private/legacy/OC_Util.php18
9 files changed, 102 insertions, 80 deletions
diff --git a/lib/private/legacy/OC_API.php b/lib/private/legacy/OC_API.php
index 862e73e6edd..facd08c1d2f 100644
--- a/lib/private/legacy/OC_API.php
+++ b/lib/private/legacy/OC_API.php
@@ -171,7 +171,7 @@ class OC_API {
],
];
if ($format == 'json') {
- return OC_JSON::encode($response);
+ return json_encode($response, JSON_HEX_TAG);
}
$writer = new XMLWriter();
diff --git a/lib/private/legacy/OC_App.php b/lib/private/legacy/OC_App.php
index 23e0b099e91..c652fcfb9ba 100644
--- a/lib/private/legacy/OC_App.php
+++ b/lib/private/legacy/OC_App.php
@@ -51,18 +51,19 @@ declare(strict_types=1);
*
*/
-use OCP\App\Events\AppUpdateEvent;
-use OCP\App\IAppManager;
-use OCP\App\ManagerEvent;
-use OCP\Authentication\IAlternativeLogin;
-use OCP\EventDispatcher\IEventDispatcher;
-use OC\AppFramework\Bootstrap\Coordinator;
use OC\App\DependencyAnalyzer;
use OC\App\Platform;
+use OC\AppFramework\Bootstrap\Coordinator;
use OC\DB\MigrationService;
use OC\Installer;
use OC\Repair;
use OC\Repair\Events\RepairErrorEvent;
+use OCP\App\Events\AppUpdateEvent;
+use OCP\App\IAppManager;
+use OCP\App\ManagerEvent;
+use OCP\Authentication\IAlternativeLogin;
+use OCP\EventDispatcher\IEventDispatcher;
+use OCP\IAppConfig;
use Psr\Container\ContainerExceptionInterface;
use Psr\Log\LoggerInterface;
@@ -116,6 +117,8 @@ class OC_App {
* exists.
*
* if $types is set to non-empty array, only apps of those types will be loaded
+ *
+ * @deprecated 29.0.0 use IAppManager::loadApps instead
*/
public static function loadApps(array $types = []): bool {
if (!\OC::$server->getSystemConfig()->getValue('installed', false)) {
@@ -251,7 +254,7 @@ class OC_App {
* This function set an app as enabled in appconfig.
*/
public function enable(string $appId,
- array $groups = []) {
+ array $groups = []) {
// Check if app is already downloaded
/** @var Installer $installer */
$installer = \OCP\Server::get(Installer::class);
@@ -281,10 +284,8 @@ class OC_App {
/**
* Get the path where to install apps
- *
- * @return string|false
*/
- public static function getInstallPath() {
+ public static function getInstallPath(): string|null {
foreach (OC::$APPSROOTS as $dir) {
if (isset($dir['writable']) && $dir['writable'] === true) {
return $dir['path'];
@@ -564,7 +565,7 @@ class OC_App {
$supportedApps = $this->getSupportedApps();
foreach ($installedApps as $app) {
- if (array_search($app, $blacklist) === false) {
+ if (!in_array($app, $blacklist)) {
$info = $appManager->getAppInfo($app, false, $langCode);
if (!is_array($info)) {
\OCP\Server::get(LoggerInterface::class)->error('Could not read app info file for app "' . $app . '"', ['app' => 'core']);
@@ -730,8 +731,9 @@ class OC_App {
static $versions;
if (!$versions) {
- $appConfig = \OC::$server->getAppConfig();
- $versions = $appConfig->getValues(false, 'installed_version');
+ /** @var IAppConfig $appConfig */
+ $appConfig = \OCP\Server::get(IAppConfig::class);
+ $versions = $appConfig->searchValues('installed_version');
}
return $versions;
}
@@ -823,7 +825,7 @@ class OC_App {
$dispatcher = \OC::$server->get(IEventDispatcher::class);
// load the steps
- $r = new Repair([], $dispatcher, \OC::$server->get(LoggerInterface::class));
+ $r = \OCP\Server::get(Repair::class);
foreach ($steps as $step) {
try {
$r->addStep($step);
diff --git a/lib/private/legacy/OC_EventSource.php b/lib/private/legacy/OC_EventSource.php
index cd72ba1f2d5..49fde4a214f 100644
--- a/lib/private/legacy/OC_EventSource.php
+++ b/lib/private/legacy/OC_EventSource.php
@@ -113,13 +113,13 @@ class OC_EventSource implements \OCP\IEventSource {
}
if ($this->fallback) {
$response = '<script type="text/javascript">window.parent.OC.EventSource.fallBackCallBack('
- . $this->fallBackId . ',"' . $type . '",' . OC_JSON::encode($data) . ')</script>' . PHP_EOL;
+ . $this->fallBackId . ',"' . ($type ?? '') . '",' . json_encode($data, JSON_HEX_TAG) . ')</script>' . PHP_EOL;
echo $response;
} else {
if ($type) {
echo 'event: ' . $type . PHP_EOL;
}
- echo 'data: ' . OC_JSON::encode($data) . PHP_EOL;
+ echo 'data: ' . json_encode($data, JSON_HEX_TAG) . PHP_EOL;
}
echo PHP_EOL;
flush();
diff --git a/lib/private/legacy/OC_Files.php b/lib/private/legacy/OC_Files.php
index ee3be30948b..ef65aa33c93 100644
--- a/lib/private/legacy/OC_Files.php
+++ b/lib/private/legacy/OC_Files.php
@@ -43,11 +43,11 @@
use bantu\IniGetWrapper\IniGetWrapper;
use OC\Files\View;
use OC\Streamer;
-use OCP\Lock\ILockingProvider;
-use OCP\Files\Events\BeforeZipCreatedEvent;
+use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Events\BeforeDirectFileDownloadEvent;
+use OCP\Files\Events\BeforeZipCreatedEvent;
use OCP\Files\IRootFolder;
-use OCP\EventDispatcher\IEventDispatcher;
+use OCP\Lock\ILockingProvider;
/**
* Class for file server access
diff --git a/lib/private/legacy/OC_Helper.php b/lib/private/legacy/OC_Helper.php
index cf39d045ae9..9a12bd50e0e 100644
--- a/lib/private/legacy/OC_Helper.php
+++ b/lib/private/legacy/OC_Helper.php
@@ -46,8 +46,8 @@
use bantu\IniGetWrapper\IniGetWrapper;
use OC\Files\Filesystem;
use OCP\Files\Mount\IMountPoint;
-use OCP\ICacheFactory;
use OCP\IBinaryFinder;
+use OCP\ICacheFactory;
use OCP\IUser;
use OCP\Util;
use Psr\Log\LoggerInterface;
@@ -596,6 +596,11 @@ class OC_Helper {
'mountPoint' => trim($mountPoint, '/'),
];
+ if ($ownerId && $path === '/') {
+ // If path is root, store this as last known quota usage for this user
+ \OCP\Server::get(\OCP\IConfig::class)->setUserValue($ownerId, 'files', 'lastSeenQuotaUsage', (string)$relative);
+ }
+
$memcache->set($cacheKey, $info, 5 * 60);
return $info;
diff --git a/lib/private/legacy/OC_JSON.php b/lib/private/legacy/OC_JSON.php
index b9cfb8210e0..b6791fe4b85 100644
--- a/lib/private/legacy/OC_JSON.php
+++ b/lib/private/legacy/OC_JSON.php
@@ -114,22 +114,10 @@ class OC_JSON {
}
/**
- * Convert OC_L10N_String to string, for use in json encodings
- */
- protected static function to_string(&$value) {
- if ($value instanceof \OC\L10N\L10NString) {
- $value = (string)$value;
- }
- }
-
- /**
* Encode JSON
* @deprecated Use a AppFramework JSONResponse instead
*/
- public static function encode($data) {
- if (is_array($data)) {
- array_walk_recursive($data, ['OC_JSON', 'to_string']);
- }
+ private static function encode($data) {
return json_encode($data, JSON_HEX_TAG);
}
}
diff --git a/lib/private/legacy/OC_Template.php b/lib/private/legacy/OC_Template.php
index 974f26fa381..545d5a73a63 100644
--- a/lib/private/legacy/OC_Template.php
+++ b/lib/private/legacy/OC_Template.php
@@ -21,6 +21,7 @@
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <vincent@nextcloud.com>
+ * @author Richard Steinmetz <richard@steinmetz.cloud>
*
* @license AGPL-3.0
*
@@ -38,7 +39,9 @@
*
*/
use OC\TemplateLayout;
+use OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent;
use OCP\AppFramework\Http\TemplateResponse;
+use OCP\EventDispatcher\IEventDispatcher;
require_once __DIR__.'/template/functions.php';
@@ -249,20 +252,44 @@ class OC_Template extends \OC\Template\Base {
// If the hint is the same as the message there is no need to display it twice.
$hint = '';
}
+ $errors = [['error' => $error_msg, 'hint' => $hint]];
http_response_code($statusCode);
try {
- $content = new \OC_Template('', 'error', 'error', false);
- $errors = [['error' => $error_msg, 'hint' => $hint]];
- $content->assign('errors', $errors);
- $content->printPage();
- } catch (\Exception $e) {
+ // Try rendering themed html error page
+ $response = new TemplateResponse(
+ '',
+ 'error',
+ ['errors' => $errors],
+ TemplateResponse::RENDER_AS_ERROR,
+ $statusCode,
+ );
+ $event = new BeforeTemplateRenderedEvent(false, $response);
+ \OC::$server->get(IEventDispatcher::class)->dispatchTyped($event);
+ print($response->render());
+ } catch (\Throwable $e1) {
$logger = \OC::$server->getLogger();
- $logger->error("$error_msg $hint", ['app' => 'core']);
- $logger->logException($e, ['app' => 'core']);
+ $logger->logException($e1, [
+ 'app' => 'core',
+ 'message' => 'Rendering themed error page failed. Falling back to unthemed error page.'
+ ]);
- header('Content-Type: text/plain; charset=utf-8');
- print("$error_msg $hint");
+ try {
+ // Try rendering unthemed html error page
+ $content = new \OC_Template('', 'error', 'error', false);
+ $content->assign('errors', $errors);
+ $content->printPage();
+ } catch (\Exception $e2) {
+ // If nothing else works, fall back to plain text error page
+ $logger->error("$error_msg $hint", ['app' => 'core']);
+ $logger->logException($e2, [
+ 'app' => 'core',
+ 'message' => 'Rendering unthemed error page failed. Falling back to plain text error page.'
+ ]);
+
+ header('Content-Type: text/plain; charset=utf-8');
+ print("$error_msg $hint");
+ }
}
die();
}
@@ -275,8 +302,10 @@ class OC_Template extends \OC\Template\Base {
* @suppress PhanAccessMethodInternal
*/
public static function printExceptionErrorPage($exception, $statusCode = 503) {
+ $debug = false;
http_response_code($statusCode);
try {
+ $debug = \OC::$server->getSystemConfig()->getValue('debug', false);
$request = \OC::$server->getRequest();
$content = new \OC_Template('', 'exception', 'error', false);
$content->assign('errorClass', get_class($exception));
@@ -285,7 +314,7 @@ class OC_Template extends \OC\Template\Base {
$content->assign('file', $exception->getFile());
$content->assign('line', $exception->getLine());
$content->assign('exception', $exception);
- $content->assign('debugMode', \OC::$server->getSystemConfig()->getValue('debug', false));
+ $content->assign('debugMode', $debug);
$content->assign('remoteAddr', $request->getRemoteAddress());
$content->assign('requestID', $request->getId());
$content->printPage();
@@ -296,22 +325,28 @@ class OC_Template extends \OC\Template\Base {
$logger->logException($e, ['app' => 'core']);
} catch (Throwable $e) {
// no way to log it properly - but to avoid a white page of death we send some output
- header('Content-Type: text/plain; charset=utf-8');
- print("Internal Server Error\n\n");
- print("The server encountered an internal error and was unable to complete your request.\n");
- print("Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.\n");
- print("More details can be found in the server log.\n");
+ self::printPlainErrorPage($e, $debug);
// and then throw it again to log it at least to the web server error log
throw $e;
}
- header('Content-Type: text/plain; charset=utf-8');
- print("Internal Server Error\n\n");
- print("The server encountered an internal error and was unable to complete your request.\n");
- print("Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.\n");
- print("More details can be found in the server log.\n");
+ self::printPlainErrorPage($e, $debug);
}
die();
}
+
+ private static function printPlainErrorPage(\Throwable $exception, bool $debug = false) {
+ header('Content-Type: text/plain; charset=utf-8');
+ print("Internal Server Error\n\n");
+ print("The server encountered an internal error and was unable to complete your request.\n");
+ print("Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.\n");
+ print("More details can be found in the server log.\n");
+
+ if ($debug) {
+ print("\n");
+ print($exception->getMessage() . ' ' . $exception->getFile() . ' at ' . $exception->getLine() . "\n");
+ print($exception->getTraceAsString());
+ }
+ }
}
diff --git a/lib/private/legacy/OC_User.php b/lib/private/legacy/OC_User.php
index 5751b813f2c..47890fd8dda 100644
--- a/lib/private/legacy/OC_User.php
+++ b/lib/private/legacy/OC_User.php
@@ -38,7 +38,10 @@
use OC\User\LoginException;
use OCP\EventDispatcher\IEventDispatcher;
+use OCP\IGroupManager;
+use OCP\IUser;
use OCP\IUserManager;
+use OCP\Server;
use OCP\User\Events\BeforeUserLoggedInEvent;
use OCP\User\Events\UserLoggedInEvent;
use Psr\Log\LoggerInterface;
@@ -93,7 +96,7 @@ class OC_User {
case 'database':
case 'mysql':
case 'sqlite':
- \OCP\Server::get(LoggerInterface::class)->debug('Adding user backend ' . $backend . '.', ['app' => 'core']);
+ Server::get(LoggerInterface::class)->debug('Adding user backend ' . $backend . '.', ['app' => 'core']);
self::$_usedBackends[$backend] = new \OC\User\Database();
\OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]);
break;
@@ -102,7 +105,7 @@ class OC_User {
\OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]);
break;
default:
- \OCP\Server::get(LoggerInterface::class)->debug('Adding default user backend ' . $backend . '.', ['app' => 'core']);
+ Server::get(LoggerInterface::class)->debug('Adding default user backend ' . $backend . '.', ['app' => 'core']);
$className = 'OC_USER_' . strtoupper($backend);
self::$_usedBackends[$backend] = new $className();
\OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]);
@@ -138,7 +141,7 @@ class OC_User {
$class = $config['class'];
$arguments = $config['arguments'];
if (class_exists($class)) {
- if (array_search($i, self::$_setupedBackends) === false) {
+ if (!in_array($i, self::$_setupedBackends)) {
// make a reflection object
$reflectionObj = new ReflectionClass($class);
@@ -147,10 +150,10 @@ class OC_User {
self::useBackend($backend);
self::$_setupedBackends[] = $i;
} else {
- \OCP\Server::get(LoggerInterface::class)->debug('User backend ' . $class . ' already initialized.', ['app' => 'core']);
+ Server::get(LoggerInterface::class)->debug('User backend ' . $class . ' already initialized.', ['app' => 'core']);
}
} else {
- \OCP\Server::get(LoggerInterface::class)->error('User backend ' . $class . ' not found.', ['app' => 'core']);
+ Server::get(LoggerInterface::class)->error('User backend ' . $class . ' not found.', ['app' => 'core']);
}
}
}
@@ -178,7 +181,7 @@ class OC_User {
$dispatcher = \OC::$server->get(IEventDispatcher::class);
if ($userSession->getUser() && !$userSession->getUser()->isEnabled()) {
- $message = \OC::$server->getL10N('lib')->t('User disabled');
+ $message = \OC::$server->getL10N('lib')->t('Account disabled');
throw new LoginException($message);
}
$userSession->setLoginName($uid);
@@ -303,7 +306,7 @@ class OC_User {
}
$user = \OC::$server->getUserSession()->getUser();
- if ($user instanceof \OCP\IUser) {
+ if ($user instanceof IUser) {
$backend = $user->getBackend();
if ($backend instanceof \OCP\User\Backend\ICustomLogout) {
return $backend->getLogoutUrl();
@@ -323,12 +326,9 @@ class OC_User {
* @return bool
*/
public static function isAdminUser($uid) {
- $group = \OC::$server->getGroupManager()->get('admin');
- $user = \OC::$server->getUserManager()->get($uid);
- if ($group && $user && $group->inGroup($user) && self::$incognitoMode === false) {
- return true;
- }
- return false;
+ $user = Server::get(IUserManager::class)->get($uid);
+ $isAdmin = $user && Server::get(IGroupManager::class)->isAdmin($user->getUID());
+ return $isAdmin && self::$incognitoMode === false;
}
diff --git a/lib/private/legacy/OC_Util.php b/lib/private/legacy/OC_Util.php
index f82ddcc78ee..42a0d9450b5 100644
--- a/lib/private/legacy/OC_Util.php
+++ b/lib/private/legacy/OC_Util.php
@@ -513,15 +513,7 @@ class OC_Util {
}
$webServerRestart = false;
- $setup = new \OC\Setup(
- $config,
- \OC::$server->get(IniGetWrapper::class),
- \OC::$server->getL10N('lib'),
- \OC::$server->get(\OCP\Defaults::class),
- \OC::$server->get(LoggerInterface::class),
- \OC::$server->getSecureRandom(),
- \OC::$server->get(\OC\Installer::class)
- );
+ $setup = \OCP\Server::get(\OC\Setup::class);
$urlGenerator = \OC::$server->getURLGenerator();
@@ -740,8 +732,8 @@ class OC_Util {
if ($perms[2] !== '0') {
$l = \OC::$server->getL10N('lib');
return [[
- 'error' => $l->t('Your data directory is readable by other users.'),
- 'hint' => $l->t('Please change the permissions to 0770 so that the directory cannot be listed by other users.'),
+ 'error' => $l->t('Your data directory is readable by other people.'),
+ 'hint' => $l->t('Please change the permissions to 0770 so that the directory cannot be listed by other people.'),
]];
}
}
@@ -1120,8 +1112,8 @@ class OC_Util {
return false;
}
- foreach (str_split($trimmed) as $char) {
- if (str_contains(\OCP\Constants::FILENAME_INVALID_CHARS, $char)) {
+ foreach (\OCP\Util::getForbiddenFileNameChars() as $char) {
+ if (str_contains($trimmed, $char)) {
return false;
}
}