diff options
Diffstat (limited to 'core/controller')
-rw-r--r-- | core/controller/avatarcontroller.php | 327 | ||||
-rw-r--r-- | core/controller/lostcontroller.php | 257 | ||||
-rw-r--r-- | core/controller/setupcontroller.php | 126 | ||||
-rw-r--r-- | core/controller/usercontroller.php | 79 |
4 files changed, 0 insertions, 789 deletions
diff --git a/core/controller/avatarcontroller.php b/core/controller/avatarcontroller.php deleted file mode 100644 index adfe38ab2db..00000000000 --- a/core/controller/avatarcontroller.php +++ /dev/null @@ -1,327 +0,0 @@ -<?php -/** - * @author Joas Schilling <nickvergessen@owncloud.com> - * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <icewind@owncloud.com> - * @author Roeland Jago Douma <rullzer@owncloud.com> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Vincent Petry <pvince81@owncloud.com> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -namespace OC\Core\Controller; - -use OCP\AppFramework\Controller; -use OCP\AppFramework\Http; -use OCP\AppFramework\Http\DataResponse; -use OCP\AppFramework\Http\DataDisplayResponse; -use OCP\Files\NotFoundException; -use OCP\IAvatarManager; -use OCP\ILogger; -use OCP\IL10N; -use OCP\IRequest; -use OCP\IUserManager; -use OCP\IUserSession; -use OCP\Files\Folder; - -/** - * Class AvatarController - * - * @package OC\Core\Controller - */ -class AvatarController extends Controller { - - /** @var IAvatarManager */ - protected $avatarManager; - - /** @var \OC\Cache\File */ - protected $cache; - - /** @var IL10N */ - protected $l; - - /** @var IUserManager */ - protected $userManager; - - /** @var IUserSession */ - protected $userSession; - - /** @var Folder */ - protected $userFolder; - - /** @var ILogger */ - protected $logger; - - /** - * @param string $appName - * @param IRequest $request - * @param IAvatarManager $avatarManager - * @param \OC\Cache\File $cache - * @param IL10N $l10n - * @param IUserManager $userManager - * @param IUserSession $userSession - * @param Folder $userFolder - * @param ILogger $logger - */ - public function __construct($appName, - IRequest $request, - IAvatarManager $avatarManager, - \OC\Cache\File $cache, - IL10N $l10n, - IUserManager $userManager, - IUserSession $userSession, - Folder $userFolder, - ILogger $logger) { - parent::__construct($appName, $request); - - $this->avatarManager = $avatarManager; - $this->cache = $cache; - $this->l = $l10n; - $this->userManager = $userManager; - $this->userSession = $userSession; - $this->userFolder = $userFolder; - $this->logger = $logger; - } - - /** - * @NoAdminRequired - * @NoCSRFRequired - * - * @param string $userId - * @param int $size - * @return DataResponse|DataDisplayResponse - */ - public function getAvatar($userId, $size) { - if ($size > 2048) { - $size = 2048; - } elseif ($size <= 0) { - $size = 64; - } - - try { - $avatar = $this->avatarManager->getAvatar($userId)->getFile($size); - $resp = new DataDisplayResponse($avatar->getContent(), - Http::STATUS_OK, - ['Content-Type' => $avatar->getMimeType()]); - $resp->setETag($avatar->getEtag()); - } catch (NotFoundException $e) { - $user = $this->userManager->get($userId); - $resp = new DataResponse([ - 'data' => [ - 'displayname' => $user->getDisplayName(), - ], - ]); - } catch (\Exception $e) { - $resp = new DataResponse([ - 'data' => [ - 'displayname' => '', - ], - ]); - } - - $resp->addHeader('Pragma', 'public'); - $resp->cacheFor(0); - $resp->setLastModified(new \DateTime('now', new \DateTimeZone('GMT'))); - - return $resp; - } - - /** - * @NoAdminRequired - * - * @param string $path - * @return DataResponse - */ - public function postAvatar($path) { - $userId = $this->userSession->getUser()->getUID(); - $files = $this->request->getUploadedFile('files'); - - $headers = []; - if ($this->request->isUserAgent([\OC\AppFramework\Http\Request::USER_AGENT_IE_8])) { - // due to upload iframe workaround, need to set content-type to text/plain - $headers['Content-Type'] = 'text/plain'; - } - - if (isset($path)) { - $path = stripslashes($path); - $node = $this->userFolder->get($path); - if (!($node instanceof \OCP\Files\File)) { - return new DataResponse(['data' => ['message' => $this->l->t('Please select a file.')]], Http::STATUS_OK, $headers); - } - if ($node->getSize() > 20*1024*1024) { - return new DataResponse( - ['data' => ['message' => $this->l->t('File is too big')]], - Http::STATUS_BAD_REQUEST, - $headers - ); - } - $content = $node->getContent(); - } elseif (!is_null($files)) { - if ( - $files['error'][0] === 0 && - is_uploaded_file($files['tmp_name'][0]) && - !\OC\Files\Filesystem::isFileBlacklisted($files['tmp_name'][0]) - ) { - if ($files['size'][0] > 20*1024*1024) { - return new DataResponse( - ['data' => ['message' => $this->l->t('File is too big')]], - Http::STATUS_BAD_REQUEST, - $headers - ); - } - $this->cache->set('avatar_upload', file_get_contents($files['tmp_name'][0]), 7200); - $content = $this->cache->get('avatar_upload'); - unlink($files['tmp_name'][0]); - } else { - return new DataResponse( - ['data' => ['message' => $this->l->t('Invalid file provided')]], - Http::STATUS_BAD_REQUEST, - $headers - ); - } - } else { - //Add imgfile - return new DataResponse( - ['data' => ['message' => $this->l->t('No image or file provided')]], - Http::STATUS_BAD_REQUEST, - $headers - ); - } - - try { - $image = new \OC_Image(); - $image->loadFromData($content); - $image->fixOrientation(); - - if ($image->valid()) { - $mimeType = $image->mimeType(); - if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') { - return new DataResponse( - ['data' => ['message' => $this->l->t('Unknown filetype')]], - Http::STATUS_OK, - $headers - ); - } - - $this->cache->set('tmpAvatar', $image->data(), 7200); - return new DataResponse( - ['data' => 'notsquare'], - Http::STATUS_OK, - $headers - ); - } else { - return new DataResponse( - ['data' => ['message' => $this->l->t('Invalid image')]], - Http::STATUS_OK, - $headers - ); - } - } catch (\Exception $e) { - $this->logger->logException($e, ['app' => 'core']); - return new DataResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_OK, $headers); - } - } - - /** - * @NoAdminRequired - * - * @return DataResponse - */ - public function deleteAvatar() { - $userId = $this->userSession->getUser()->getUID(); - - try { - $avatar = $this->avatarManager->getAvatar($userId); - $avatar->remove(); - return new DataResponse(); - } catch (\Exception $e) { - $this->logger->logException($e, ['app' => 'core']); - return new DataResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_BAD_REQUEST); - } - } - - /** - * @NoAdminRequired - * - * @return DataResponse|DataDisplayResponse - */ - public function getTmpAvatar() { - $tmpAvatar = $this->cache->get('tmpAvatar'); - if (is_null($tmpAvatar)) { - return new DataResponse(['data' => [ - 'message' => $this->l->t("No temporary profile picture available, try again") - ]], - Http::STATUS_NOT_FOUND); - } - - $image = new \OC_Image($tmpAvatar); - - $resp = new DataDisplayResponse($image->data(), - Http::STATUS_OK, - ['Content-Type' => $image->mimeType()]); - - $resp->setETag(crc32($image->data())); - $resp->cacheFor(0); - $resp->setLastModified(new \DateTime('now', new \DateTimeZone('GMT'))); - return $resp; - } - - /** - * @NoAdminRequired - * - * @param array $crop - * @return DataResponse - */ - public function postCroppedAvatar($crop) { - $userId = $this->userSession->getUser()->getUID(); - - if (is_null($crop)) { - return new DataResponse(['data' => ['message' => $this->l->t("No crop data provided")]], - Http::STATUS_BAD_REQUEST); - } - - if (!isset($crop['x'], $crop['y'], $crop['w'], $crop['h'])) { - return new DataResponse(['data' => ['message' => $this->l->t("No valid crop data provided")]], - Http::STATUS_BAD_REQUEST); - } - - $tmpAvatar = $this->cache->get('tmpAvatar'); - if (is_null($tmpAvatar)) { - return new DataResponse(['data' => [ - 'message' => $this->l->t("No temporary profile picture available, try again") - ]], - Http::STATUS_BAD_REQUEST); - } - - $image = new \OC_Image($tmpAvatar); - $image->crop($crop['x'], $crop['y'], round($crop['w']), round($crop['h'])); - try { - $avatar = $this->avatarManager->getAvatar($userId); - $avatar->set($image); - // Clean up - $this->cache->remove('tmpAvatar'); - return new DataResponse(['status' => 'success']); - } catch (\OC\NotSquareException $e) { - return new DataResponse(['data' => ['message' => $this->l->t('Crop is not square')]], - Http::STATUS_BAD_REQUEST); - } catch (\Exception $e) { - $this->logger->logException($e, ['app' => 'core']); - return new DataResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_BAD_REQUEST); - } - } -} diff --git a/core/controller/lostcontroller.php b/core/controller/lostcontroller.php deleted file mode 100644 index 0e0932b288b..00000000000 --- a/core/controller/lostcontroller.php +++ /dev/null @@ -1,257 +0,0 @@ -<?php -/** - * @author Bernhard Posselt <dev@bernhard-posselt.com> - * @author Björn Schießle <schiessle@owncloud.com> - * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <rullzer@owncloud.com> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Core\Controller; - -use \OCP\AppFramework\Controller; -use \OCP\AppFramework\Http\TemplateResponse; -use OCP\AppFramework\Utility\ITimeFactory; -use \OCP\IURLGenerator; -use \OCP\IRequest; -use \OCP\IL10N; -use \OCP\IConfig; -use OCP\IUserManager; -use OCP\Mail\IMailer; -use OCP\Security\ISecureRandom; -use \OC_Defaults; -use OCP\Security\StringUtils; - -/** - * Class LostController - * - * Successfully changing a password will emit the post_passwordReset hook. - * - * @package OC\Core\Controller - */ -class LostController extends Controller { - - /** @var IURLGenerator */ - protected $urlGenerator; - /** @var IUserManager */ - protected $userManager; - // FIXME: Inject a non-static factory of OC_Defaults for better unit-testing - /** @var OC_Defaults */ - protected $defaults; - /** @var IL10N */ - protected $l10n; - /** @var string */ - protected $from; - /** @var bool */ - protected $isDataEncrypted; - /** @var IConfig */ - protected $config; - /** @var ISecureRandom */ - protected $secureRandom; - /** @var IMailer */ - protected $mailer; - /** @var ITimeFactory */ - protected $timeFactory; - - /** - * @param string $appName - * @param IRequest $request - * @param IURLGenerator $urlGenerator - * @param IUserManager $userManager - * @param OC_Defaults $defaults - * @param IL10N $l10n - * @param IConfig $config - * @param ISecureRandom $secureRandom - * @param string $from - * @param string $isDataEncrypted - * @param IMailer $mailer - * @param ITimeFactory $timeFactory - */ - public function __construct($appName, - IRequest $request, - IURLGenerator $urlGenerator, - IUserManager $userManager, - OC_Defaults $defaults, - IL10N $l10n, - IConfig $config, - ISecureRandom $secureRandom, - $from, - $isDataEncrypted, - IMailer $mailer, - ITimeFactory $timeFactory) { - parent::__construct($appName, $request); - $this->urlGenerator = $urlGenerator; - $this->userManager = $userManager; - $this->defaults = $defaults; - $this->l10n = $l10n; - $this->secureRandom = $secureRandom; - $this->from = $from; - $this->isDataEncrypted = $isDataEncrypted; - $this->config = $config; - $this->mailer = $mailer; - $this->timeFactory = $timeFactory; - } - - /** - * Someone wants to reset their password: - * - * @PublicPage - * @NoCSRFRequired - * - * @param string $token - * @param string $userId - * @return TemplateResponse - */ - public function resetform($token, $userId) { - return new TemplateResponse( - 'core', - 'lostpassword/resetpassword', - array( - 'link' => $this->urlGenerator->linkToRouteAbsolute('core.lost.setPassword', array('userId' => $userId, 'token' => $token)), - ), - 'guest' - ); - } - - /** - * @param $message - * @param array $additional - * @return array - */ - private function error($message, array $additional=array()) { - return array_merge(array('status' => 'error', 'msg' => $message), $additional); - } - - /** - * @return array - */ - private function success() { - return array('status'=>'success'); - } - - /** - * @PublicPage - * - * @param string $user - * @return array - */ - public function email($user){ - // FIXME: use HTTP error codes - try { - $this->sendEmail($user); - } catch (\Exception $e){ - return $this->error($e->getMessage()); - } - - return $this->success(); - } - - /** - * @PublicPage - * @param string $token - * @param string $userId - * @param string $password - * @param boolean $proceed - * @return array - */ - public function setPassword($token, $userId, $password, $proceed) { - if ($this->isDataEncrypted && !$proceed) { - return $this->error('', array('encryption' => true)); - } - - try { - $user = $this->userManager->get($userId); - - $splittedToken = explode(':', $this->config->getUserValue($userId, 'owncloud', 'lostpassword', null)); - if(count($splittedToken) !== 2) { - throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is invalid')); - } - - if ($splittedToken[0] < ($this->timeFactory->getTime() - 60*60*12) || - $user->getLastLogin() > $splittedToken[0]) { - throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is expired')); - } - - if (!StringUtils::equals($splittedToken[1], $token)) { - throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is invalid')); - } - - if (!$user->setPassword($password)) { - throw new \Exception(); - } - - \OC_Hook::emit('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', array('uid' => $userId, 'password' => $password)); - - $this->config->deleteUserValue($userId, 'owncloud', 'lostpassword'); - @\OC_User::unsetMagicInCookie(); - - } catch (\Exception $e){ - return $this->error($e->getMessage()); - } - - return $this->success(); - } - - /** - * @param string $user - * @throws \Exception - */ - protected function sendEmail($user) { - if (!$this->userManager->userExists($user)) { - throw new \Exception($this->l10n->t('Couldn\'t send reset email. Please make sure your username is correct.')); - } - - $userObject = $this->userManager->get($user); - $email = $userObject->getEMailAddress(); - - if (empty($email)) { - throw new \Exception( - $this->l10n->t('Could not send reset email because there is no email address for this username. Please contact your administrator.') - ); - } - - $token = $this->secureRandom->generate(21, - ISecureRandom::CHAR_DIGITS. - ISecureRandom::CHAR_LOWER. - ISecureRandom::CHAR_UPPER); - $this->config->setUserValue($user, 'owncloud', 'lostpassword', $this->timeFactory->getTime() .':'. $token); - - $link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user, 'token' => $token)); - - $tmpl = new \OC_Template('core', 'lostpassword/email'); - $tmpl->assign('link', $link); - $msg = $tmpl->fetchPage(); - - try { - $message = $this->mailer->createMessage(); - $message->setTo([$email => $user]); - $message->setSubject($this->l10n->t('%s password reset', [$this->defaults->getName()])); - $message->setPlainBody($msg); - $message->setFrom([$this->from => $this->defaults->getName()]); - $this->mailer->send($message); - } catch (\Exception $e) { - throw new \Exception($this->l10n->t( - 'Couldn\'t send reset email. Please contact your administrator.' - )); - } - } - -} diff --git a/core/controller/setupcontroller.php b/core/controller/setupcontroller.php deleted file mode 100644 index f25c6f39a0b..00000000000 --- a/core/controller/setupcontroller.php +++ /dev/null @@ -1,126 +0,0 @@ -<?php -/** - * @author Bart Visscher <bartv@thisnet.nl> - * @author ideaship <ideaship@users.noreply.github.com> - * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <icewind@owncloud.com> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Core\Controller; - -use OC\Setup; - -class SetupController { - /** @var Setup */ - protected $setupHelper; - /** @var string */ - private $autoConfigFile; - - /** - * @param Setup $setupHelper - */ - function __construct(Setup $setupHelper) { - $this->autoConfigFile = \OC::$SERVERROOT.'/config/autoconfig.php'; - $this->setupHelper = $setupHelper; - } - - /** - * @param $post - */ - public function run($post) { - // Check for autosetup: - $post = $this->loadAutoConfig($post); - $opts = $this->setupHelper->getSystemInfo(); - - // convert 'abcpassword' to 'abcpass' - if (isset($post['adminpassword'])) { - $post['adminpass'] = $post['adminpassword']; - } - if (isset($post['dbpassword'])) { - $post['dbpass'] = $post['dbpassword']; - } - - if(isset($post['install']) AND $post['install']=='true') { - // We have to launch the installation process : - $e = $this->setupHelper->install($post); - $errors = array('errors' => $e); - - if(count($e) > 0) { - $options = array_merge($opts, $post, $errors); - $this->display($options); - } else { - $this->finishSetup(); - } - } else { - $options = array_merge($opts, $post); - $this->display($options); - } - } - - public function display($post) { - $defaults = array( - 'adminlogin' => '', - 'adminpass' => '', - 'dbuser' => '', - 'dbpass' => '', - 'dbname' => '', - 'dbtablespace' => '', - 'dbhost' => 'localhost', - 'dbtype' => '', - ); - $parameters = array_merge($defaults, $post); - - \OC_Util::addVendorScript('strengthify/jquery.strengthify'); - \OC_Util::addVendorStyle('strengthify/strengthify'); - \OC_Util::addScript('setup'); - \OC_Template::printGuestPage('', 'installation', $parameters); - } - - public function finishSetup() { - if( file_exists( $this->autoConfigFile )) { - unlink($this->autoConfigFile); - } - \OC::$server->getIntegrityCodeChecker()->runInstanceVerification(); - \OC_Util::redirectToDefaultPage(); - } - - public function loadAutoConfig($post) { - if( file_exists($this->autoConfigFile)) { - \OCP\Util::writeLog('core', 'Autoconfig file found, setting up ownCloud…', \OCP\Util::INFO); - $AUTOCONFIG = array(); - include $this->autoConfigFile; - $post = array_merge ($post, $AUTOCONFIG); - } - - $dbIsSet = isset($post['dbtype']); - $directoryIsSet = isset($post['directory']); - $adminAccountIsSet = isset($post['adminlogin']); - - if ($dbIsSet AND $directoryIsSet AND $adminAccountIsSet) { - $post['install'] = 'true'; - } - $post['dbIsSet'] = $dbIsSet; - $post['directoryIsSet'] = $directoryIsSet; - - return $post; - } -} diff --git a/core/controller/usercontroller.php b/core/controller/usercontroller.php deleted file mode 100644 index 72193761022..00000000000 --- a/core/controller/usercontroller.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php -/** - * @author Lukas Reschke <lukas@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Core\Controller; - -use \OCP\AppFramework\Controller; -use \OCP\AppFramework\Http\JSONResponse; -use \OCP\IRequest; - -class UserController extends Controller { - /** - * @var \OCP\IUserManager - */ - protected $userManager; - - /** - * @var \OC_Defaults - */ - protected $defaults; - - public function __construct($appName, - IRequest $request, - $userManager, - $defaults - ) { - parent::__construct($appName, $request); - $this->userManager = $userManager; - $this->defaults = $defaults; - } - - /** - * Lookup user display names - * - * @NoAdminRequired - * - * @param array $users - * - * @return JSONResponse - */ - public function getDisplayNames($users) { - $result = array(); - - foreach ($users as $user) { - $userObject = $this->userManager->get($user); - if (is_object($userObject)) { - $result[$user] = $userObject->getDisplayName(); - } else { - $result[$user] = $user; - } - } - - $json = array( - 'users' => $result, - 'status' => 'success' - ); - - return new JSONResponse($json); - - } -} |