Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Storage/Retrieval of IDs, IContainers using Equinox Secure Preferences"

(New page: In the Platform 3.4M6a release, secure storage was introduced in Equinox. (See secure storage section on [http://download.eclipse.org/eclipse/downloads/drops/S-3.4M6a-200804091425/eclipse...)
 
Line 7: Line 7:
 
<pre>
 
<pre>
 
IContainer container = ...
 
IContainer container = ...
 +
// Create targetID
 
ID targetID = IDFactory.getDefault().createID(container.getConnectNamespace(),"fliwatuet@ecf.eclipse.org");
 
ID targetID = IDFactory.getDefault().createID(container.getConnectNamespace(),"fliwatuet@ecf.eclipse.org");
// connect to target
+
// Create connectContext with password
 
IConnectContext connectContext = ConnectContextFactory.createPasswordConnectContext("password");
 
IConnectContext connectContext = ConnectContextFactory.createPasswordConnectContext("password");
 +
// Connect to target using targetID and connectContext
 
container.connect(targetID,connectContext);
 
container.connect(targetID,connectContext);
 
</pre>
 
</pre>
Line 22: Line 24:
  
 
<pre>
 
<pre>
 +
// Store
 
IDStore idStore = getIDStoreOSGiService();
 
IDStore idStore = getIDStoreOSGiService();
// Create and store an ID
+
// Create an ID
 
ID newGUID = IDFactory.getDefault().createGUID();
 
ID newGUID = IDFactory.getDefault().createGUID();
 +
// Store it using the idStore
 
IIDEntry newGUIDEntry = idStore.store(newGUID);
 
IIDEntry newGUIDEntry = idStore.store(newGUID);
 +
// Associate and save password to secure store also
 
newGUIDEntry.getPreferences().put("password",password,true);
 
newGUIDEntry.getPreferences().put("password",password,true);
  
// Retrieve an ID and password from storage
+
// Retrieve
 +
IDStore idStore = getIDStoreOSGiService();
 +
// Get namespace entry from store
 
INamespaceEntry restoredNamespace = idStore.getNamespaceEntry(guidNamespace);
 
INamespaceEntry restoredNamespace = idStore.getNamespaceEntry(guidNamespace);
 +
// Get previously stored IDs
 
IIDEntry[] idEntries = namespaceEntry.getIDEntries();
 
IIDEntry[] idEntries = namespaceEntry.getIDEntries();
 +
// Create ID instance from idEntries[0]
 
ID restoredNewGUID = idEntries[0].createID();
 
ID restoredNewGUID = idEntries[0].createID();
String password = (String) idEntries[0].get("password");
+
// Get password from idEntries[0]
 +
String restoredPassword = (String) idEntries[0].getPreferences().get("password");
 +
 
 +
// Now can use restoredNewGUID and restoredPassword
 
</pre>
 
</pre>

Revision as of 16:41, 22 May 2008

In the Platform 3.4M6a release, secure storage was introduced in Equinox. (See secure storage section on [http://download.eclipse.org/eclipse/downloads/drops/S-3.4M6a-200804091425/eclipse-news-M6.html Platform 3.4M6a).

ECF IDs can represent many things: from user accounts, to target files/URIs, to remote services. IDs are fully extensible: plugins can extend ECF's notion of ID by introducing new Namespaces (org.eclipse.ecf.namespace extension point), which then construct IDs of appropriate types.

To connect an ECF IContainer to a corresponding network service, a target ID must be provided, along with an IConnectContext to specify credentials (e.g. passwords). Typically, in ECF connection is done in a manner something like this

IContainer container = ...
// Create targetID
ID targetID = IDFactory.getDefault().createID(container.getConnectNamespace(),"fliwatuet@ecf.eclipse.org");
// Create connectContext with password
IConnectContext connectContext = ConnectContextFactory.createPasswordConnectContext("password");
// Connect to target using targetID and connectContext
container.connect(targetID,connectContext);

A common use case is to securely persist account information (username/ID and associated password) and upon Eclipse/ECF startup restore the information and use it to connect to a remote service.

In ECF terms, this requires storing and restoring the targetID, credentials like password associated with the targetID, and possibly the container instance as well.

To make this possible, I've implemented two new services: org.eclipse.ecf.storage.IIDStore and org.eclipse.ecf.storage.IContainerStore. See the complete source for these interfaces here. These two stores allow the storage and retrieval of ECF Namespaces/IDs and IContainers, respectively.

Here's some example code that shows how to save and restore an ID and associated password with the IIDStore

// Store
IDStore idStore = getIDStoreOSGiService();
// Create an ID
ID newGUID = IDFactory.getDefault().createGUID();
// Store it using the idStore
IIDEntry newGUIDEntry = idStore.store(newGUID);
// Associate and save password to secure store also
newGUIDEntry.getPreferences().put("password",password,true);

// Retrieve
IDStore idStore = getIDStoreOSGiService();
// Get namespace entry from store
INamespaceEntry restoredNamespace = idStore.getNamespaceEntry(guidNamespace);
// Get previously stored IDs
IIDEntry[] idEntries = namespaceEntry.getIDEntries();
// Create ID instance from idEntries[0]
ID restoredNewGUID = idEntries[0].createID();
// Get password from idEntries[0]
String restoredPassword = (String) idEntries[0].getPreferences().get("password");

// Now can use restoredNewGUID and restoredPassword

Back to the top