As a developer, I want qctl to store my credentials in the OS keychain so I don't have tokens in plain text files and they're protected by my system's security.
Design
Command Interface
# Credentials are stored automatically on login
qctl auth login
# -> Stores token in macOS Keychain / Windows Credential Store / Linux secret-tool# View credential storage location
qctl auth status
# -> Shows: "Credentials stored in: macOS Keychain"# Configure storage backend
qctl config set auth.credential_store keychain # keychain | file | none
1. Try OS keychain
2. If unavailable, fall back to encrypted file (~/.qctl/credentials.enc)
3. If encryption unavailable, warn and use plain file with strict permissions
Storage Configuration
# ~/.qctl/qctl.yamlauth:credential_store:keychain # keychain | file | memoryfile_encryption:true# encrypt file-based storageencryption_key_source:keychain # where to get encryption key
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
User Story
As a developer, I want qctl to store my credentials in the OS keychain so I don't have tokens in plain text files and they're protected by my system's security.
Design
Command Interface
Keychain Entries
Fallback Strategy
Storage Configuration
Files to Create/Modify
qctl-core/src/main/java/io/qrun/qctl/core/auth/CredentialStore.javaqctl-core/src/main/java/io/qrun/qctl/core/auth/KeychainStore.javaqctl-core/src/main/java/io/qrun/qctl/core/auth/MacOSKeychain.javaqctl-core/src/main/java/io/qrun/qctl/core/auth/WindowsCredStore.javaqctl-core/src/main/java/io/qrun/qctl/core/auth/LinuxSecretService.javaqctl-core/src/main/java/io/qrun/qctl/core/auth/FileCredentialStore.javaqctl-core/src/main/java/io/qrun/qctl/core/auth/CredentialStoreFactory.javaImplementation Tasks
Acceptance Criteria
qctl auth statusshows storage location