uttrflow / uttrflow/uttrflow-swift

Concealed and secret clips are masked in the panel but written to the clipboard history file in plain text

Open
#483 0 comments 0 reactions 0 assignees View on GitHub
area:clipboard enhancement needs-info P0 security
Dominant language
Swift
Stars
4
Forks
17
Avg merge
3h 32m
Merged PRs (30d)
277

Description

## What happens

A copy marked `org.nspasteboard.ConcealedType` by a password manager is classified as `.secret` (`Sources/UttrflowClipboard/PasteboardWatcher.swift:127-138`), and so is a clip whose shape looks like a key, token or card number. A secret is masked in the panel until revealed, but `ClipboardStore` keeps it exactly like any other clip, so its text is written to the history file in Application Support in plain text.

#397 noted this as a separate decision. It also noted a related behaviour: a password manager that marks its copies only with `org.nspasteboard.TransientType` (and not `ConcealedType`) now has them dropped from history entirely rather than masked. `Docs/clipboard-secrets.md` (the table around line 114) describes each marker, but not this consequence for such a password manager.

## Why it matters

The panel's promise is that these stay hidden. A plain-text file of every password copied in the retention period is a better prize than the clipboard itself, for any process that can read the user's files, and for backups.

## Decision needed

1. Do not store secrets at all: they appear in the panel for the session only.
2. Store them encrypted, with a key in the Keychain.
3. Store them, but for a much shorter retention than other clips.
4. Keep today's behaviour and say so in `Docs/clipboard-secrets.md` and the Privacy copy.

And: is dropping `TransientType`-only copies from history the intended outcome for password managers that use only that marker?

## Acceptance criteria

- The decision is recorded in `Docs/clipboard-secrets.md`, including the `TransientType`-only case.
- Whatever is chosen has tests in `Tests/UttrflowClipboardTests` that read the history file from disk and show what a concealed clip leaves there.

Contributor guide

Open the contributing guide

Research direction

Start with Sources/UttrflowClipboard/PasteboardWatcher.swift:127-138 and the ClipboardStore persistence path, then read Docs/clipboard-secrets.md around line 114. Review Tests/UttrflowClipboardTests and its history-file coverage. Done means the storage decision and TransientType-only behavior are documented, with tests showing what a concealed clip leaves on disk.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, swift
Domain
desktop, documentation, security, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.