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
- Set up the High Performance Backend and the recording server, enable call recording.
- Start a call, record it and stop the recording.
- 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.
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:The file itself lands in the correct user's Talk recording folder and the
record_file_storednotification 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 theOC_Filesystem::post_createhook.OCA\Activity\CurrentUser::getUserIdentifier()finds no session user, no share token and noX-NC-Nicknameheader, and falls back to an empty string.OCA\Activity\FilesHooks::addNotificationsForFileAction()therefore uses thecreated_bysubject with an empty actor, andOCA\Files\Activity\Providerreplaces 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 sharebranch)The same applies to the transcript and summary files written in
RecordingService::storeTranscript().Steps to reproduce
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
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.