{ "translations": { "External storages" : "Надворешни складишта", "Personal" : "Лично", "System" : "Систем", "Grant access" : "Дозволи пристап", "Error configuring OAuth1" : "Грешка во конфигурацијата на OAuth1", "Please provide a valid app key and secret." : "Внесете валиден клуч на апликацијата и лозинка.", "Error configuring OAuth2" : "Грешка во конфигурацијата на OAuth2", "Generate keys" : "Генеригај клучеви", "Error generating key pair" : "Грешка при генерирање на клучеви", "All users. Type to select user or group." : "Сите корисници. Напишете за да изберете корисник или група.", "(group)" : "(group)", "Compatibility with Mac NFD encoding (slow)" : "Компатибилно со Mac NFD енкрипција (бавно)", "Enable encryption" : "Овозможи енкрипција", "Enable previews" : "Овозможи прегледување", "Enable sharing" : "Овозможи споделување", "Check for changes" : "Провери за промени", "Never" : "Никогаш", "Once every direct access" : "Еднаш секој пристап", "Read only" : "Само читај", "Delete" : "Избриши", "Admin defined" : "Дефинирано од администраторот", "Are you sure you want to delete this external storage?" : "Дали си сигурен дека сакаш да го избришеш ова надворешно складиште?", "Delete storage?" : "Избриши складиште?", "Saved" : "Снимено", "Saving..." : "Зачувува ...", "Save" : "Сними", "Empty response from the server" : "Нема одговор од серверот", "Couldn't access. Please log out and in again to activate this mount point" : "Неможе да се пристапи. Ве молиме одјавете се и повторно најавете се за да се активира монтираната точка.", "Couldn't get the information from the remote server: {code} {type}" : "Неможат да се превземат информациите од серверот: {code} {type}", "Couldn't get the list of external mount points: {type}" : "Неможат да се превземе листата на надворешните монтирани точки: {type}", "There was an error with message: " : "Настана грешка со порака:", "External mount error" : "Грешка при надворешно монтирање", "external-storage" : "Надворешно складиште", "Please enter the credentials for the {mount} mount" : "Внесете акредитиви за {mount}", "Username" : "Корисничко име", "Password" : "Лозинка", "Credentials saved" : "Акредитивите се зачувани", "Credentials saving failed" : "Неуспешно зачувување на акредитивите", "Credentials required" : "Акредитивите се задолжителни", "Storage with ID \"%d\" not found" : "Складиште со ID \"%d\" не е пронајдено", "Invalid mount point" : "Погрешна точка на монтирање", "Insufficient data: %s" : "Недоволни податоци: %s", "%s" : "%s", "Storage with ID \"%d\" is not user editable" : "Складиштето со ID \"%d\" неможе да се измени од корисник", "Access key" : "Клуч за пристап", "Secret key" : "Таен клуч", "Builtin" : "Вграден", "None" : "Ништо", "OAuth1" : "OAuth1", "App key" : "Клуч на апликацијата", "App secret" : "Тајна на апликацијата", "OAuth2" : "OAuth2", "Client ID" : "Клиент ИД", "Client secret" : "Тајна на клиент", "OpenStack v2" : "OpenStack v2", "OpenStack v3" : "OpenStack v3", "Domain" : "Домен", "API key" : "API key", "Global credentials" : "Глобални акредитиви", "Log-in credentials, save in database" : "Акредитиви за најавување, зачувани во базата со податоци", "Username and password" : "Корисничко име и лозинка", "Log-in credentials, save in session" : "Акредитиви за најавување, зачувани во сесија", "Global credentials, user entered" : "Глобални акредитиви, внесени од корисник", "User entered, store in database" : "Внесени од корисник, зачувани во базата со податоци", "RSA public key" : "RSA јавен клуч", "Public key" : "Јавен клуч", "RSA private key" : "RSA приватен клуч", "Private key" : "Приватен клуч", "Amazon S3" : "Amazon S3", "Hostname" : "Име на серверот", "Port" : "Порта", "Region" : "Регион", "Enable SSL" : "Овозможи SSL", "WebDAV" : "WebDAV", "URL" : "Адреса", "Secure https://" : "Безбедна https://", "FTP" : "FTP", "Host" : "Домаќин", "Secure ftps://" : "Безбедна ftps://", "Local" : "Локален", "Location" : "Локација", "Nextcloud" : "Nextcloud", "SFTP" : "SFTP", "SMB / CIFS" : "SMB / CIFS", "Share" : "Сподели", "Show hidden files" : "Прикажи сокриени датотеки", "Service name" : "Име на сервисот", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Поддршка за cURL во PHP не е овозможена или не е инсталирана. Монтирањето на %s не е возможно. Контактирајте го администраторот.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Поддршка за FTP во PHP не е овозможена или не е инсталирана. Монтирањето на %s не е возможно. Контактирајте го администраторот.", "\"%1$s\" is not installed. Mounting of %2$s is not possible. Please ask your system administrator to install it." : "\"%1$s\" не е инсалиран. Монтирањето на %2$s не е возможно. Контактирајте го администраторот.", "External storage support" : "Поддршка за надворешно складиште", "No external storage configured or you don't have the permission to configure them" : "Немате конфигурирано надворешно складиште или немате дозвола да го конфигурирате", "Name" : "Име", "Storage type" : "Вид на складиште", "Scope" : "Опсег", "Open documentation" : "Отвори ја документацијата", "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "Надворешното складирање ви овозможува да ги монтирате услугите и уредите за надворешно складирање како секундарни уреди за складирање на Nextcloud. Вие исто така може да им дозволите на корисниците да монтираат свои услуги за надворешно складирање.", "Folder name" : "Име на папка", "External storage" : "Надворешно складиште", "Authentication" : "Автентикација", "Configuration" : "Конфигурација", "Available for" : "Достапно за", "Click to recheck the configuration" : "Кликни за проверка на конфигурацијата", "Add storage" : "Додади складиште", "Advanced settings" : "Напредни параметри", "Allow users to mount external storage" : "Дозволи на корисниците да монтираат надворешни складишта", "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Глобалните акредитиви можат да се искористат за пристапување во повеќе надворешни складишта кој користат исти акредитиви." },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" }tar-work-29 Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/Connector/PublicAuth.php
blob: 9b386c7609d0e04981bec2919d7c12eb33ca8ed1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
/**
 * @author Björn Schießle <bjoern@schiessle.org>
 * @author Lukas Reschke <lukas@statuscode.ch>
 * @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 OCA\DAV\Connector;

use OCP\IRequest;
use OCP\ISession;
use OCP\Share\Exceptions\ShareNotFound;
use OCP\Share\IManager;
use Sabre\DAV\Auth\Backend\AbstractBasic;

/**
 * Class PublicAuth
 *
 * @package OCA\DAV\Connector
 */
class PublicAuth extends AbstractBasic {

	/** @var \OCP\Share\IShare */
	private $share;

	/** @var IManager */
	private $shareManager;

	/** @var ISession */
	private $session;

	/** @var IRequest */
	private $request;

	/**
	 * @param IRequest $request
	 * @param IManager $shareManager
	 * @param ISession $session
	 */
	public function __construct(IRequest $request,
								IManager $shareManager,
								ISession $session) {
		$this->request = $request;
		$this->shareManager = $shareManager;
		$this->session = $session;

		// setup realm
		$defaults = new \OCP\Defaults();
		$this->realm = $defaults->getName();
	}

	/**
	 * Validates a username and password
	 *
	 * This method should return true or false depending on if login
	 * succeeded.
	 *
	 * @param string $username
	 * @param string $password
	 *
	 * @return bool
	 * @throws \Sabre\DAV\Exception\NotAuthenticated
	 */
	protected function validateUserPass($username, $password) {
		try {
			$share = $this->shareManager->getShareByToken($username);
		} catch (ShareNotFound $e) {
			return false;
		}

		$this->share = $share;

		\OC_User::setIncognitoMode(true);

		// check if the share is password protected
		if ($share->getPassword() !== null) {
			if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK) {
				if ($this->shareManager->checkPassword($share, $password)) {
					return true;
				} else if ($this->session->exists('public_link_authenticated')
					&& $this->session->get('public_link_authenticated') === $share->getId()) {
					return true;
				} else {
					if (in_array('XMLHttpRequest', explode(',', $this->request->getHeader('X-Requested-With')))) {
						// do not re-authenticate over ajax, use dummy auth name to prevent browser popup
						http_response_code(401);
						header('WWW-Authenticate','DummyBasic realm="' . $this->realm . '"');
						throw new \Sabre\DAV\Exception\NotAuthenticated('Cannot authenticate over ajax calls');
					}
					return false;
				}
			} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_REMOTE) {
				return true;
			} else {
				return false;
			}
		} else {
			return true;
		}
	}

	/**
	 * @return \OCP\Share\IShare
	 */
	public function getShare() {
		return $this->share;
	}
}