Nextcloud でカレンダー共有の権限を編集しようとしたところ、エラーが発生しました。
このカレンダーは 20 人近くで共有しており、カレンダー設定画面を開いただけで共有が解除されたり、保存が反映されない等の問題が起きたため、解決法を記録しておきます。

環境
- Nextcloud Hub 25 Autumn:32.0.9
- Calendar:6.4.0
- DAV:1.34.2
エラーログ
エラーログを見ると、Too many addressbook or calendar share requests となっています。

原因
レートリミット部分のソースを見てみると、3600 秒で 20 回の設定がされていました。
$identifier = 'share-addressbook-or-calendar';
$userLimit = $this->config->getValueInt('dav', 'rateLimitShareAddressbookOrCalendar', 20);
$userPeriod = $this->config->getValueInt('dav', 'rateLimitPeriodShareAddressbookOrCalendar', 3600);
try {
$this->limiter->registerUserRequest($identifier, $userLimit, $userPeriod, $user);
} catch (IRateLimitExceededException $e) {
throw new TooManyRequests('Too many addressbook or calendar share requests', 0, $e);
}1 時間(3600 秒)に 20 回でリミットに達してしまうため、アドレス帳やカレンダーの共有設定を 20 人分変更するとそれだけでアウトになってしまいます。
対策
ratelimit.protection.whitelist で IP アドレスのホワイトリストを設定しましたが、アドレス帳とカレンダーのレートリミットはユーザー毎にカウントしている様で効果がありませんでした。
occ コマンドで rateLimitShareAddressbookOrCalendar の値を書き換えることで解決する事ができました。
sudo -u apache php occ config:app:set dav rate LimitShareAddressbookOrCalendar --value 1000 --type integer
(out) Config value 'rateLimitShareAddressbookOrCalendar' for app 'dav' is now set to '1000', stored as integer in fast cache設定を元に戻すには、rateLimitShareAddressbookOrCalendar を削除すれば OK です。
sudo -u apache php occ config:app:delete dav rateLimitShareAddressbookOrCalendar
(out) Config value rateLimitShareAddressbookOrCalendar of app dav deleted

コメント