Skip to content

Call recordings are attributed to "remote account" in the Files activity stream #19077

Description

@bakiburakogun

Describe the bug

Every call recording that is stored by the recording backend shows up in the Files activity stream as created by "remote account" instead of the participant who started the recording:

"remote account" created Recording 2026-08-23 23-23-09.mp4

The file itself lands in the correct user's Talk recording folder and the record_file_stored notification reaches the correct user, so only the attribution is wrong. Federation is not involved here, there are no trusted servers configured on this instance.

Root cause

The recording backend uploads the file to POST /ocs/v2.php/apps/spreed/api/v1/recording/{token}/store, which is a #[PublicPage] endpoint authenticated only by the recording shared secret (RecordingController::validateBackendRequest()), so there is no active user during the request.

RecordingService::store() then writes the file with $recordingFolder->newFile(), which triggers the OC_Filesystem::post_create hook. OCA\Activity\CurrentUser::getUserIdentifier() finds no session user, no share token and no X-NC-Nickname header, and falls back to an empty string. OCA\Activity\FilesHooks::addNotificationsForFileAction() therefore uses the created_by subject with an empty actor, and OCA\Files\Activity\Provider replaces the empty {user} placeholder with "remote account":

https://github.com/nextcloud/activity/blob/master/lib/CurrentUser.php (fallback to '')
https://github.com/nextcloud/server/blob/master/apps/files/lib/Activity/Provider.php (// External user via public link share branch)

The same applies to the transcript and summary files written in RecordingService::storeTranscript().

Steps to reproduce

  1. Set up the High Performance Backend and the recording server, enable call recording.
  2. Start a call, record it and stop the recording.
  3. Open Activity (or the Activity tab of the recording file) as the user who started the recording.

Expected behaviour

The activity entry names the user the recording belongs to, like any other file that user creates.

Actual behaviour

The activity entry says "remote account" created Recording ....mp4.

Server configuration

  • Nextcloud: 34.0.3
  • Talk: 24.0.4
  • Recording backend: nextcloud-talk-recording 0.2.1
  • Signaling: nextcloud-spreed-signaling 2.1.1 (4 node cluster, Debian 12)
  • Web/application servers: Oracle Linux 9, PHP 8.4, PostgreSQL

Additional information

I have a fix that sets the owner as active user while the file is written and restores the previous user afterwards. Pull request is linked below.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions