Updated in response to Sam H's comments
authorhttp://petefoth.myopenid.com/ <http://petefoth.myopenid.com/@web>
Mon, 5 Dec 2011 16:32:04 +0000 (11:32 -0500)
committerwww-data <www-data@project-moonshot.org>
Mon, 5 Dec 2011 16:32:04 +0000 (11:32 -0500)
design/revisedclientarchitecture.mdwn

index 0a13ad2..92d4a97 100644 (file)
@@ -27,64 +27,61 @@ This diagram shows the proposed new architecture.
 
 The re-factored Moonshot Client software will have the following components:
 
-*_identity-selector-ui_* an application allowing:
+*_identity-manager-app_* a GUI application allowing the User to manage identities which are provisioned on the client machine usign the APIs provided by:
 
-- the User to manage identities which are provisioned on the client machine
-- other applications needing access to identities to access internet services. 
+*_identity-selector-ui-lib_* a shared library offering C and Vala APIs allowing applications to access the identities which are provisioned on the client machine in order to access internet services. 
 
-*_identity-server_*  shared library offering C and Vala APIs.
+*_identity-lib_* a shared library offering C and Vala APIs providing Create / Read / Update / Delete functionality for Identities. It is the only means of accessing the _identity-storage-server_.
 
-- provides Create / Read / Update / Delete functionality for Identities
-- is the only means of accessing the _identity-storage-server_
-- includes the server functionality initially implemented in UI
+*_identity-storage-server_*  encapsulates the Identity Store in a library offering a CRUD API to access the store.
 
-*_identity-storage-server_*  encapsulates the Identity Store in a shared library offering a CRUD API to access the store.
-
-- protects the store from multiple concurrent write accesses
+- is accessed directly only by _identity-lib_. 
+- it protects the store from multiple concurrent write accesses
 - re-implemented per platform and per storage strategy so
 
-  * one version each for Linux, Mac OS and Windows, local storage. DBus provides an appropriate mechanism under Linux and Mac OSX for protecting the store from multiple concurrent write access. It is not supported on Windows, so the Windows implementation will use a different mechanism. This version will re-use storage-related code from src/moonshot-window.vala etc.
+  * one version each for Linux, Mac OS and Windows, local storage. DBus provides an appropriate mechanism under Linux (and possibly Mac OS X) for protecting the store from multiple concurrent write access. DBus is not supported on Windows, so the Windows implementation will use a different mechanism. This version will re-use storage-related code from src/moonshot-window.vala etc. The Mac implementation will either use DBus, or it will use the Mac OS X Keychain to store identities (see mailing list thread beginning [here](https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind1112&L=MOONSHOT-COMMUNITY&F=&S=&X=2C162240A9A66326F2&P=3272)).
   * one version for web storage, restful API. (Not in scope for this iteration).
   * other versions as required for different storage solutions  (Not in scope for this iteration).
 
-*_identity-provisioning_* - not implemented in the initial implementation. Provides CRUD operations via (for now) .msht and XML files, and via command line. Implemented in portable code as far as possible. Uses *_identity-server_*. Consists of
+*_identity-provisioning_* - not implemented in the initial implementation. Provides CRUD operations via (for now) .msht and XML files, and via command line. Implemented in portable code as far as possible. Uses *_identity-lib_*. Consists of
+
+- *_identity-provisioning-file-handler_* - processes .msht (and, in future iterations, json, and maybe other format) files for file-based provisioning operations. Currently implemented as *_moonshot-webp_*, allowing only install access. In future iterations it will also allow uninstall/revoke access. .msht is an an XML-based file format. The MIME type 'application/moonshot+xml'. An association is created on install so that these files are automatically opened by _identity-provisioning-file-handler_ when clicked.
 
-- *_identity-provisioning-file-handler_* - processes .msht (and, in future iterations, XML and/or json, and maybe other format) files for file-based provisioning operations. Currently implemented as *_moonshot-webp_*, allowing only install access. In future iterations it will also allow uninstall/revoke access.
 - *_identity-provisioning-cli-handler_* - provides a command line API to identity CRUD functions
 
 All of the components will be implemented in Vala. 
 
-### Detail _identity-server_ component
+### Detail _identity-selector-ui-lib_ component
 
 Implemented as a shared library in Vala. Built with the -H option to enable access from C code, and introspection generated to allow use from other languages.
 
-Replaces the _libmoonshot_ component from the initial implementation.
+Provides APIs which can be used by _identity-manager-app_, by _identity-provisioning_ components needing to interact with the user, and other applications which need to interact with the user in selecting the identity they will use to access an internet service. These are the APIs provided by _libmoonshot_ in the initial implementation.
 
-Owns the public APIs for accessing the Identity Store (rather than, as in the initial implementation, exposing the APIs provided via DBus by _moonshot-ui_).
+It *uses* APIs provided by _identity-lib_ to access the Identity store.
 
-Provides the APIs  provided in the initial implementation by _lib-moonshot_ (getIdentity(), GetDefaultIdentity(), InstallId_card()) which are used:
+Implemented in Vala using GTK widgets, reusing code from src/moonshot-window.vala and other UI related code..
 
-- by identity-selector-ui component
-- by other applications to obtain the identities they need to access internet services *without interacting with the user*;
-- by _identity-provisioning_ components
+### Detail _identity-lib_ component
 
-Provides new APIs needed by _identity-selector-ui_ and _identity-provisioning_ components, to manage identities (e.g. CreateNewIdCard(), UpdateIdCard(), DeleteIdCard()).
+Implemented as a shared library in Vala. Built with the -H option to enable access from C code, and introspection generated to allow use from other languages.
 
-Uses the APIs provided by the *_identity-storage-server_* component (_-dbus-local-storage-server_ on Linux and Mac, _-windows-local-storage-server_ on Windows).
+Owns the public APIs for accessing the Identity Store (rather than, as in the initial implementation, exposing the APIs provided via DBus by _moonshot-ui_).
 
-It has no UI, so that it can be used in circumstances where interaction with a user is not possible (e.g. in headless servers). Any needed interaction with the User is done by client software.
-### Detail _identity-selector-ui_ component
+Provides equivalent APIs to those provided by _identity-selector-ui-lib_ (and in the initial implementation by _lib-moonshot_) but with no UI. It is used
 
-This provides a UI which can be used both by the user, and by other application which need to interact with the user in selecting the identity they will use to access an internet service.
+- by _identity-selector-ui-lib_ ;
+- by other applications to obtain the identities they need to access internet services *without interacting with the user*;
+- by _identity-provisioning_ components to provision identities *without interacting with the user*.
 
-It no longer owns the Identity Store.
+Provides new APIs needed by _identity-selector-ui-lib_ and _identity-provisioning_ components, to manage identities (e.g. CreateNewIdCard(), UpdateIdCard(), DeleteIdCard()).
 
-It no longer *provides* the APIs (using DBus) that were used in the initial implementation by other components via _libmoonshot_ to access the Identity store.
+Uses the APIs provided by the *_identity-storage-server_* component (_-dbus-local-storage-server_ on Linux and Mac, _-windows-local-storage-server_ on Windows).
 
-Instead, it *uses* APIs provided by _identity-server_ to access the Identity store.
+It has no UI, so that it can be used in circumstances where interaction with a user is not possible (e.g. in headless servers). Any needed interaction with the User is done by client software.
 
-Implemented in Vala using GTK widgets, reusing code from src/moonshot-window.vala and other UI related code..
+### Detail _identity_manager_app_ component
+This app provides a UI allowing the USer to manage their stored identities.
 
 ### Detail _identity-provisioning_ component