132 lines
3.9 KiB
PHP
132 lines
3.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace OCA\Memories;
|
|
|
|
use OCP\AppFramework\Http;
|
|
use OCP\AppFramework\Http\DataResponse;
|
|
|
|
trait UtilController
|
|
{
|
|
/**
|
|
* Run a function and catch exceptions to return HTTP response.
|
|
*
|
|
* @param \Closure(): Http\Response $closure
|
|
*/
|
|
public static function guardEx(\Closure $closure): Http\Response
|
|
{
|
|
try {
|
|
return $closure();
|
|
} catch (\OCA\Memories\HttpResponseException $e) {
|
|
return $e->response;
|
|
} catch (\Exception $e) {
|
|
return new DataResponse([
|
|
'message' => $e->getMessage(),
|
|
], Http::STATUS_INTERNAL_SERVER_ERROR);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return a callback response with guarded exceptions.
|
|
*
|
|
* @param \Closure(Http\IOutput): void $closure
|
|
*/
|
|
public static function guardExDirect(\Closure $closure): Http\Response
|
|
{
|
|
/** @psalm-suppress MissingTemplateParam */
|
|
return new class($closure) extends Http\Response implements Http\ICallbackResponse {
|
|
/**
|
|
* @param \Closure(Http\IOutput): void $closure
|
|
*/
|
|
public function __construct(private \Closure $closure)
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
public function callback(Http\IOutput $output): void
|
|
{
|
|
try {
|
|
($this->closure)($output);
|
|
} catch (\OCA\Memories\HttpResponseException $e) {
|
|
$res = $e->response;
|
|
$output->setHttpResponseCode($res->getStatus());
|
|
if ($res instanceof Http\DataResponse) {
|
|
$output->setHeader('Content-Type: application/json');
|
|
$output->setOutput(json_encode($res->getData()));
|
|
} else {
|
|
$output->setOutput($res->render());
|
|
}
|
|
} catch (\Exception $e) {
|
|
$output->setHttpResponseCode(Http::STATUS_INTERNAL_SERVER_ERROR);
|
|
$output->setHeader('Content-Type: application/json');
|
|
$output->setOutput(json_encode([
|
|
'message' => $e->getMessage(),
|
|
]));
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Get the current user.
|
|
*
|
|
* @throws \OCA\Memories\HttpResponseException if the user is not logged in
|
|
*/
|
|
public static function getUser(): \OCP\IUser
|
|
{
|
|
return \OC::$server->get(\OCP\IUserSession::class)->getUser()
|
|
?? throw Exceptions::NotLoggedIn();
|
|
}
|
|
|
|
/**
|
|
* Get the current user ID.
|
|
*
|
|
* @throws \OCA\Memories\HttpResponseException if the user is not logged in
|
|
*/
|
|
public static function getUID(): string
|
|
{
|
|
return self::getUser()->getUID();
|
|
}
|
|
|
|
/**
|
|
* Check if the user is logged in.
|
|
*/
|
|
public static function isLoggedIn(): bool
|
|
{
|
|
return null !== \OC::$server->get(\OCP\IUserSession::class)->getUser();
|
|
}
|
|
|
|
/**
|
|
* Get a user's home folder.
|
|
*
|
|
* @param null|string $uid User ID, or null for the user
|
|
*
|
|
* @throws \OCA\Memories\HttpResponseException if the user is not logged in
|
|
*/
|
|
public static function getUserFolder(?string $uid = null): \OCP\Files\Folder
|
|
{
|
|
return \OC::$server->get(\OCP\Files\IRootFolder::class)
|
|
->getUserFolder($uid ?? self::getUID())
|
|
;
|
|
}
|
|
|
|
/**
|
|
* Get the language code for the current user.
|
|
*/
|
|
public static function getUserLang(): string
|
|
{
|
|
// Default language
|
|
$config = \OC::$server->get(\OCP\IConfig::class);
|
|
$default = $config->getSystemValue('default_language', 'en');
|
|
|
|
try {
|
|
// Get language of the user
|
|
return $config->getUserValue(self::getUID(), 'core', 'lang', $default);
|
|
} catch (\Exception) {
|
|
// Fallback to server language
|
|
return $default;
|
|
}
|
|
}
|
|
}
|