# JdeScoping SecureStore Manager A cross-platform desktop utility for managing encrypted SecureStore secrets. This tool provides a graphical interface for creating, editing, and managing secrets stored in encrypted JSON files using the NeoSmart.SecureStore library. ## Features - **Cross-platform** - Runs on Windows, macOS, and Linux - **Create new stores** - Create encrypted secret stores with either key file or password-based encryption - **Open existing stores** - Open and manage existing SecureStore JSON files - **Manage secrets** - Add, edit, and delete key-value pairs - **Masked values** - Secret values are masked by default with a reveal toggle - **Copy to clipboard** - Quickly copy secret values - **Unsaved changes tracking** - Prompts before closing with unsaved changes - **Key file generation** - Generate standalone key files for deployment ## Building ### Prerequisites - .NET 10.0 SDK or later ### Build and Run ```bash # Build the application dotnet build src/Utils/JdeScoping.SecureStoreManager # Run the application dotnet run --project src/Utils/JdeScoping.SecureStoreManager ``` ### Platform-Specific Notes #### Windows No additional setup required. #### macOS No additional setup required. The application uses native macOS windowing. #### Linux Ensure you have the required GTK libraries installed: ```bash # Ubuntu/Debian sudo apt install libgtk-3-0 # Fedora sudo dnf install gtk3 ``` ## Running Tests ```bash dotnet test tests/JdeScoping.SecureStoreManager.Tests ``` ## Usage ### Creating a New Store 1. Launch the application 2. Select **File > New Store** (or press `Ctrl+N`) 3. Choose the store location (`.json` file) 4. Select encryption method: - **Key File** (recommended for production): Generates a `.key` file that must be kept secure - **Password**: Uses a password for encryption 5. Click **Create** ### Opening an Existing Store 1. Select **File > Open Store** (or press `Ctrl+O`) 2. Browse to the store file (`.json`) 3. Provide the decryption method: - Browse to the key file, or - Enter the password 4. Click **Open** ### Managing Secrets | Action | How To | |--------|--------| | Add secret | **Secrets > Add Secret** or toolbar **Add** button | | Edit secret | Double-click the row, or select and press **Enter** | | Delete secret | Select the row and press **Delete** | | Reveal value | Click the **Show/Hide** button in the Actions column | | Copy value | Click **Copy** in the Actions column | | Save changes | **File > Save** or press `Ctrl+S` | ### Generating a Standalone Key File For deployment scenarios where you need to pre-generate a key file: 1. Select **Tools > Generate Key File** 2. Choose the save location 3. The generated key can be used with the main JdeScoping application ### Exporting the Current Key To backup or copy the key from the currently open store: 1. Open a store that uses key file encryption 2. Select **Tools > Export Current Key** 3. Choose the export location ## Keyboard Shortcuts | Shortcut | Action | |----------|--------| | `Ctrl+N` | New Store | | `Ctrl+O` | Open Store | | `Ctrl+S` | Save | | `Ctrl+W` | Close Store | | `Delete` | Delete selected secret | ## Integration with JdeScoping This utility is compatible with the SecureStore format used by the main JdeScoping application. You can use it to: - View and edit secrets in the application's `data/secrets.json` file - Pre-configure secrets before deployment - Migrate secrets between environments - Troubleshoot configuration issues ### Opening the Main Application's Store 1. Locate the store file: `data/secrets.json` (relative to the JdeScoping.Host executable) 2. Locate the key file: `data/secrets.key` (or use the master key password if configured) 3. Open the store using this utility ## Security Considerations - **Key files** should be treated as sensitive credentials and not committed to source control - **Values are masked** by default to prevent shoulder surfing - **No auto-save** - changes must be explicitly saved to prevent accidental overwrites - **Delete confirmation** - deleting secrets requires confirmation - **Unsaved changes prompt** - closing with unsaved changes prompts the user ## Project Structure ``` JdeScoping.SecureStoreManager/ ├── Models/ │ └── SecretEntry.cs # Secret key-value model ├── Services/ │ ├── ISecureStoreManager.cs # Service interface │ └── SecureStoreManager.cs # SecureStore wrapper implementation ├── ViewModels/ │ ├── ViewModelBase.cs # INotifyPropertyChanged base │ ├── RelayCommand.cs # ICommand implementation │ ├── MainWindowViewModel.cs # Main window logic │ ├── SecretItemViewModel.cs # Individual secret item │ └── DialogViewModels.cs # Dialog view models ├── Views/ │ ├── MainWindow.axaml # Main application window │ ├── NewStoreDialog.axaml # Create store dialog │ ├── OpenStoreDialog.axaml # Open store dialog │ └── SecretEditDialog.axaml # Add/edit secret dialog ├── Converters/ │ └── BooleanConverters.cs # Value converters ├── App.axaml # Application resources ├── Program.cs # Application entry point └── README.md # This file ``` ## Dependencies - .NET 10.0 - Avalonia UI 11.2 - Avalonia.Controls.DataGrid 11.2 - MessageBox.Avalonia 3.1 - NeoSmart.SecureStore 1.2.0