diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php
index 21fa3b69705..e8fb8025f14 100644
--- a/lib/AppInfo/Application.php
+++ b/lib/AppInfo/Application.php
@@ -107,6 +107,11 @@
use OCA\Talk\Search\UnifiedSearchCSSLoader;
use OCA\Talk\Search\UnifiedSearchFilterPlugin;
use OCA\Talk\Settings\Personal;
+use OCA\Talk\SetupCheck\BackgroundBlurLoading;
+use OCA\Talk\SetupCheck\FederationLockCache;
+use OCA\Talk\SetupCheck\RecommendCache;
+use OCA\Talk\SetupCheck\RecordingBackend;
+use OCA\Talk\SetupCheck\SIPConfiguration;
use OCA\Talk\Share\Listener as ShareListener;
use OCA\Talk\Signaling\Listener as SignalingListener;
use OCA\Talk\Status\Listener as StatusListener;
@@ -332,6 +337,12 @@ public function register(IRegistrationContext $context): void {
$context->registerTalkBackend(TalkBackend::class);
$context->registerTeamResourceProvider(TalkTeamResourceProvider::class);
+
+ $context->registerSetupCheck(RecommendCache::class);
+ $context->registerSetupCheck(FederationLockCache::class);
+ $context->registerSetupCheck(RecordingBackend::class);
+ $context->registerSetupCheck(SIPConfiguration::class);
+ $context->registerSetupCheck(BackgroundBlurLoading::class);
}
public function boot(IBootContext $context): void {
diff --git a/lib/SetupCheck/BackgroundBlurLoading.php b/lib/SetupCheck/BackgroundBlurLoading.php
new file mode 100644
index 00000000000..eec9c6de4b2
--- /dev/null
+++ b/lib/SetupCheck/BackgroundBlurLoading.php
@@ -0,0 +1,66 @@
+l10n->t('Background blur');
+ }
+
+ public function run(): SetupResult {
+ $url = $this->urlGenerator->linkTo('spreed', 'js/tflite.wasm');
+ $noResponse = true;
+ $responses = $this->runHEAD($url);
+ foreach ($responses as $response) {
+ $noResponse = false;
+ if ($response->getStatusCode() === 200) {
+ return SetupResult::success();
+ }
+ }
+
+ if ($noResponse) {
+ return SetupResult::info(
+ $this->l10n->t('Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files.') . "\n" . $this->serverConfigHelp(),
+ $this->urlGenerator->linkToDocs('admin-nginx'),
+ );
+ }
+ return SetupResult::warning(
+ $this->l10n->t('Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation.'),
+ $this->urlGenerator->linkToDocs('admin-nginx'),
+ );
+
+ }
+}
diff --git a/lib/SetupCheck/FederationLockCache.php b/lib/SetupCheck/FederationLockCache.php
new file mode 100644
index 00000000000..6f9c2e94cac
--- /dev/null
+++ b/lib/SetupCheck/FederationLockCache.php
@@ -0,0 +1,48 @@
+l->t('Federation');
+ }
+
+ public function run(): SetupResult {
+ if (!$this->talkConfig->isFederationEnabled()) {
+ return SetupResult::success();
+ }
+ if (!$this->cacheFactory->createLocking('talkroom_') instanceof NullCache) {
+ return SetupResult::success();
+ }
+ return SetupResult::warning(
+ $this->l->t('It is highly recommended to configure "memcache.locking" when Talk Federation is enabled.'),
+ $this->urlGenerator->linkToDocs('admin-cache'),
+ );
+ }
+}
diff --git a/lib/SetupCheck/RecommendCache.php b/lib/SetupCheck/RecommendCache.php
new file mode 100644
index 00000000000..e3f50fe67bf
--- /dev/null
+++ b/lib/SetupCheck/RecommendCache.php
@@ -0,0 +1,47 @@
+l->t('High-performance backend');
+ }
+
+ public function run(): SetupResult {
+ if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) {
+ return SetupResult::success();
+ }
+ if ($this->cacheFactory->isAvailable()) {
+ return SetupResult::success();
+ }
+ return SetupResult::warning(
+ $this->l->t('It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend.'),
+ $this->urlGenerator->linkToDocs('admin-cache'),
+ );
+ }
+}
diff --git a/lib/SetupCheck/RecordingBackend.php b/lib/SetupCheck/RecordingBackend.php
new file mode 100644
index 00000000000..1ae04c31d5b
--- /dev/null
+++ b/lib/SetupCheck/RecordingBackend.php
@@ -0,0 +1,40 @@
+l->t('Recording backend');
+ }
+
+ public function run(): SetupResult {
+ if ($this->talkConfig->getSignalingMode() !== Config::SIGNALING_INTERNAL) {
+ return SetupResult::success();
+ }
+ if (empty($this->talkConfig->getRecordingServers())) {
+ return SetupResult::success();
+ }
+ return SetupResult::error($this->l->t('Using the recording backend requires a High-performance backend.'));
+ }
+}
diff --git a/lib/SetupCheck/SIPConfiguration.php b/lib/SetupCheck/SIPConfiguration.php
new file mode 100644
index 00000000000..a8eba865a4d
--- /dev/null
+++ b/lib/SetupCheck/SIPConfiguration.php
@@ -0,0 +1,40 @@
+l->t('SIP dial-in');
+ }
+
+ public function run(): SetupResult {
+ if ($this->talkConfig->getSignalingMode() !== Config::SIGNALING_INTERNAL) {
+ return SetupResult::success();
+ }
+ if ($this->talkConfig->getSIPSharedSecret() === '' && $this->talkConfig->getDialInInfo() === '') {
+ return SetupResult::success();
+ }
+ return SetupResult::error($this->l->t('Using the SIP functionality requires a High-performance backend.'));
+ }
+}
diff --git a/psalm.xml b/psalm.xml
index 16a43bc40d8..dee49722219 100644
--- a/psalm.xml
+++ b/psalm.xml
@@ -89,6 +89,7 @@
+
diff --git a/tests/psalm-baseline.xml b/tests/psalm-baseline.xml
index cada91c20ba..a7c1418ba42 100644
--- a/tests/psalm-baseline.xml
+++ b/tests/psalm-baseline.xml
@@ -6,11 +6,6 @@
-
-
-
-
-
@@ -86,6 +81,11 @@
+
+
+
+
+
getView()]]>
diff --git a/tests/stubs/oc_memcache.php b/tests/stubs/oc_memcache.php
new file mode 100644
index 00000000000..9b29cf9096a
--- /dev/null
+++ b/tests/stubs/oc_memcache.php
@@ -0,0 +1,50 @@
+