> For the complete documentation index, see [llms.txt](https://learn.capstorm.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.capstorm.com/frequently-asked-questions/usage/where-does-copystorm-store-passwords/how-to-add-a-new-database-password-manager.md).

# How to Add a New Database Password Manager

CopyStorm supports reading Database credentials from a user-supplied Database password manager.

This feature was introduced to eliminate the need to:

* Change the saved password in many CopyStorm configuration files.
* Provide the password to CopyStorm on the command line due to security rules.

In addition to security benefits, this feature allows you to use your own company-wide password manager.

## Feature Overview

The process to add a new Database password manager to CopyStorm is to:

1. Write a Java class that extends the class com.aslan.sfdc.connect.credentials.AbstractJDBCUserPasswordCredentials
2. Package the new Java class in a jar and place it in the “lib” subdirectory of the CopyStorm installation.
3. Add a new CredentialsRegistry.xml file to CopyStorm’s config directory to register thenew credential manager with CopyStorm.

## Writing the Java Class

The Java class needs to extend com.aslan.sfdc.connect.credentials.AbstractJDBCUserPasswordCredentials, and will need to override/implement the following methods:

| Method Signature                                 | Required | Description                                                                                                                                                                         |
| ------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| String getUsername()                             | Yes      | Returns the username used when authenticating with the Database.                                                                                                                    |
| String getPassword()                             | Yes      | Returns the password used when authenticating with the Database.                                                                                                                    |
| boolean setRequired(boolean required)            | Yes      | Update the credentials editor to indicate that the connection type does not require credential information (e.g. when using SQL/Server’s integrated security).                      |
| int injectIntoUI(JPanel panel, int startRow)     | No       | Adds any UI elements needed by the password manager to the CopyStorm UI.                                                                                                            |
| boolean isAvailable()                            | No       | Returns true if the password manager should appear as an option in the UI.                                                                                                          |
| void saveState(Element e, boolean savePasswords) | Yes      | Adds XML attributes to the provided Element to save any information needed to restore system state. This information is saved to CopyStorm’s configuration file.                    |
| void restoreState(Element e)                     | Yes      | Restore XML state saved via saveState()                                                                                                                                             |
| String getFingerprint()                          | Yes      | Returns a value used to determine whether or not credentials have changed. This is used to determine whether or not a cached session may be used when connecting with the Database. |
| boolean isComplete()                             | Yes      | Returns true when information provided by the user is enough to attempt a connection to the Database.                                                                               |
| void clear()                                     | Yes      | Clears out any internal state kept by the password manager.                                                                                                                         |

In addition to the required methods above, there are several convenience methods which may be used by credential managers:

| Method Signature                                                                      | Description                                                                                                                                                |
| ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| void fireCredentialsComplete(boolean complete)                                        | Enables or disables the “Test Database Connection” button.                                                                                                 |
| void addRowToUI(String label, String toltip, JComponent editor, JPanel panel, int row | Adds a new editor to the UI. This method can be used in the injectIntoUI() method to maintain consistent styling with the rest of the CopyStorm UI.        |
| String encrypt(String text)                                                           | Encrypts text. This method can be used in the saveState() function to avoid implementing a custom encryption scheme to support encrypting saved passwords. |
| String decrypt(String encryptedText)                                                  | Decrypts text encrypted with encrypt(). This method can be used in the restoreState() function to avoid implementing a custom encryption scheme.           |
| void saveXMLAttribute(Element e, String key, String value)                            | Adds a new attribute to an XML element. This method can be used in the saveState() function to avoid interacting with the Element directly.                |
| String loadXMLAttribute(Element e, String key)                                        | Retrieves an attribute to an XML element This method can be used in the restoreState() function to avoid interacting with the Element directly.            |

## Example Credential Manager: Keepass

Click Here to view the Java source of Capstorm’s built-in Keepass Database password manager.

{% file src="/files/y4F1o2peHZm1B7ilyrxU" %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://learn.capstorm.com/frequently-asked-questions/usage/where-does-copystorm-store-passwords/how-to-add-a-new-database-password-manager.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
