conn->executeUpdate('LOCK TABLES `' . $tableName . '` WRITE'); } public function unlockTable() { $this->conn->executeUpdate('UNLOCK TABLES'); } public function fixupStatement($statement) { $statement = str_replace(' ILIKE ', ' COLLATE ' . $this->getCollation() . ' LIKE ', $statement); return $statement; } protected function getCollation(): string { if (!$this->collation) { $params = $this->conn->getParams(); $this->collation = $params['collation'] ?? (($params['charset'] ?? 'utf8') . '_general_ci'); } return $this->collation; } public function insertIgnoreConflict(string $table, array $values): int { $builder = $this->conn->getQueryBuilder(); $builder->insert($table); $updates = []; foreach ($values as $key => $value) { $builder->setValue($key, $builder->createNamedParameter($value)); } /* * We can't use ON DUPLICATE KEY UPDATE here because Nextcloud use the CLIENT_FOUND_ROWS flag * With this flag the MySQL returns the number of selected rows * instead of the number of affected/modified rows * It's impossible to change this behaviour at runtime or for a single query * Then, the result is 1 if a row is inserted and also 1 if a row is updated with same or different values * * With INSERT IGNORE, the result is 1 when a row is inserted, 0 otherwise * * Risk: it can also ignore other errors like type mismatch or truncated data… */ $res = $this->conn->executeStatement( preg_replace('/^INSERT/i', 'INSERT IGNORE', $builder->getSQL()), $builder->getParameters(), $builder->getParameterTypes() ); return $res; } } option> Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public/AppFramework/Http/Attribute/NoCSRFRequired.php
blob: 247cb5c55b5f967080256351bc60ac8b430c6dd8 (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
<?php

declare(strict_types=1);

/**
 * @copyright Copyright (c) 2023 Joas Schilling <coding@schilljs.com>
 *
 * @author Joas Schilling <coding@schilljs.com>
 *
 * @license GNU AGPL version 3 or any later version
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * 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
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

namespace OCP\AppFramework\Http\Attribute;

use Attribute;

/**
 * Attribute for controller methods that are not CSRF protected
 *
 * @since 27.0.0
 */
#[Attribute]
class NoCSRFRequired {
}