Call recordings are attributed to "remote account" in the Files activity stream
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 2.2k
- Forks
- 586
- Avg merge
- 18h 27m
- Merged PRs (30d)
- 333
Description
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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating RecordingController::validateBackendRequest(), RecordingService::store(), and RecordingService::storeTranscript() in the Talk backend, then trace the recording upload endpoint and file-creation activity hook. Reproduce the recording flow and verify that the file, transcript, and summary activity entries attribute creation to the recording owner rather than "remote account"; add or run focused regression coverage if the project provides it.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100