Difference between revisions of "Features/Transfer to many options"

From Sugar Labs
Jump to navigation Jump to search
Line 18: Line 18:
 
         <code>cd /etc/ssl/certs/</code>
 
         <code>cd /etc/ssl/certs/</code>
 
         <code>sudo openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout ssl.key -out ssl.crt</code></del>
 
         <code>sudo openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout ssl.key -out ssl.crt</code></del>
** Configure </del>"/etc/httpd/conf.d/ssl.conf"</del> "/etc/httpd/conf/httpd.conf" to setup the WebDAV share. Sample file : [[media:httpd.conf]]
+
** Configure <del>"/etc/httpd/conf.d/ssl.conf"</del> "/etc/httpd/conf/httpd.conf" to setup the WebDAV share. Sample file : [[media:httpd.conf]]
 
*** <del>Firstly, this sets up the paths "SSLCertificateFile" and "SSLCertificateKeyFile", which are required for HTTPS over SSL.</del>
 
*** <del>Firstly, this sets up the paths "SSLCertificateFile" and "SSLCertificateKeyFile", which are required for HTTPS over SSL.</del>
 
*** <del>Secondly</del>This sets up "/var/www/web1/web" as the "webdav" folder. In other words, whetever entries are present in this folder, will be made available for the client XOs.
 
*** <del>Secondly</del>This sets up "/var/www/web1/web" as the "webdav" folder. In other words, whetever entries are present in this folder, will be made available for the client XOs.
Line 31: Line 31:
  
 
* '''[User-Workflow] Exporting Data to WebDav, on a server XO.'''
 
* '''[User-Workflow] Exporting Data to WebDav, on a server XO.'''
** <del>Sascha's JournalToWebDAV workflow.
+
** Sascha's JournalToWebDAV workflow.
 
*** step 1
 
*** step 1
 
*** step 2
 
*** step 2
 
*** step 3
 
*** step 3
*** step 4</del>
+
*** step 4
 
** Alternatively,  
 
** Alternatively,  
 
*** Add "Share" listview in the bottom panel-tray; that would make a total of 4 types of listview - Journal, Documents, Mounted-Drives, Share.
 
*** Add "Share" listview in the bottom panel-tray; that would make a total of 4 types of listview - Journal, Documents, Mounted-Drives, Share.
Line 53: Line 53:
 
** The popup appears, which has a new entry "Access Share" (in addition to "Make Friend").
 
** The popup appears, which has a new entry "Access Share" (in addition to "Make Friend").
 
** Clicks on "Access Share".
 
** Clicks on "Access Share".
** The "Browser" activity opens, with the url pointing to the "Server" buddy's webdav share.  
+
** <del>The "Browser" activity opens, with the url pointing to the "Server" buddy's webdav share.</del>
** Thereafter, client may navigate the webdav directory hierarchy, or download files (all of which is already built in the "Browse" activity). Most importantly, there is the "Keep Link" feature in "Browse", which nicely downloads the webdav-entry, and promptly saves it in the "Journal" - something that happens in the "Send To" feature as well.
+
** <del>Thereafter, client may navigate the webdav directory hierarchy, or download files (all of which is already built in the "Browse" activity). Most importantly, there is the "Keep Link" feature in "Browse", which nicely downloads the webdav-entry, and promptly saves it in the "Journal" - something that happens in the "Send To" feature as well.</del>
 +
** The server's share is mounted. A color-specific buddy-icon in the bottom tray signifies it. Clicking this icon displays the server's share's entries, on the lines of Journal/Documents/Shares/Mounted-Drives.
 +
** Now, the entries can be copied from the mounted folder, to Journal/Documents/Shares/Mounted-Drives.
  
  
Line 61: Line 63:
 
*** Luckily, in the method "def __buddy_updated_cb(self, account, contact_id, properties):" in "jarabe/model/neighborhood.py", there is the "properties['ip4-address']", which contains the IP address of the buddy. All that is needed is to persist it in the "BaseBuddyModel" in "jarabe/model/buddy.py".  
 
*** Luckily, in the method "def __buddy_updated_cb(self, account, contact_id, properties):" in "jarabe/model/neighborhood.py", there is the "properties['ip4-address']", which contains the IP address of the buddy. All that is needed is to persist it in the "BaseBuddyModel" in "jarabe/model/buddy.py".  
 
*** When the client clicks on "Access Share" on the buddy, this IP Address can be easily retreived, and the URI formed "https://<IP Address>/webdav"
 
*** When the client clicks on "Access Share" on the buddy, this IP Address can be easily retreived, and the URI formed "https://<IP Address>/webdav"
** Opening up the server's webdav
+
** <del>Opening up the server's webdav</del>
*** The generated URI would be passed to the "Browse" activity; and thereafter, "Browse" would take over.
+
*** <del>The generated URI would be passed to the "Browse" activity; and thereafter, "Browse" would take over.</del>
** A minor query, regarding the last point, has been posted at http://lists.sugarlabs.org/archive/sugar-devel/2012-April/036425.html. (For resolving this, some additional code may have to be written, but that is something perfectly doable. However, currently awaiting a reply, to see if the code for this already exists :-) ).
+
** <del>A minor query, regarding the last point, has been posted at http://lists.sugarlabs.org/archive/sugar-devel/2012-April/036425.html. (For resolving this, some additional code may have to be written, but that is something perfectly doable. However, currently awaiting a reply, to see if the code for this already exists :-) ).</del>
  
  
Line 84: Line 86:
  
  
=== CLIENT enters the SERVER username and password in the opened "Browse" instance. ===
+
=== CLIENT sees the buddy icon in the bottom tray, with the server's share.. ===
  
**[[File:S3.png]]
+
**[[File:S12.png]]
  
  
  
  
=== CLIENT sees nothing shared as the SERVER has not shared anything yet. ===
+
=== CLIENT can copy the entries to Journal/Documents/Shares/Mounted-Drives. ===
  
**[[File:S4.png]]
+
** <to be attached>
  
  
  
  
=== SERVER copies data to "Shares". ===
 
  
**[[File:S5.png]]
 
 
 
 
 
=== SERVER now has some entries in "Shares" directory. ===
 
 
**[[File:S6.png]]
 
 
 
 
 
=== CLIENT clicks the refresh button in "Browse". ===
 
 
**[[File:S7.png]]
 
 
 
 
 
 
=== CLIENT is now able to see the SERVER's "Shares" listing. ===
 
 
**[[File:S8.png]]
 
 
 
 
 
 
=== CLIENT right clicks on the entry that she wishes to download and selects "Keep Link". ===
 
 
**[[File:S9.png]]
 
 
 
 
 
=== CLIENT Download completed. ===
 
 
**[[File:S10.png]]
 
 
 
 
 
=== CLIENT downloaded entry in Journal. ===
 
 
**[[File:S11.png]]
 
  
  

Revision as of 10:13, 13 April 2012

Proposal for a client-initiated journal transfer (1-to-N feature)

Workflow

  • The server XO would make its shares available via WebDAV, running in the context of "httpd" service.
  • The client XO would connect to the server XO via its browser.
  • Therafter, "Browse" would take over.
  • The client would mount the server's share locally.
  • Thereafter, the server's share's contents can be "copied" from, just as if it was just another local filesystem.


Details

  • Setting up WebDAV on a server XO.
    • Install package "httpd".
    • Generate openssl "server.crt" and "server.key".
       cd /etc/ssl/certs/
       sudo openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout ssl.key -out ssl.crt
    • Configure "/etc/httpd/conf.d/ssl.conf" "/etc/httpd/conf/httpd.conf" to setup the WebDAV share. Sample file : media:httpd.conf
      • Firstly, this sets up the paths "SSLCertificateFile" and "SSLCertificateKeyFile", which are required for HTTPS over SSL.
      • SecondlyThis sets up "/var/www/web1/web" as the "webdav" folder. In other words, whetever entries are present in this folder, will be made available for the client XOs.
    • Generate authentication file for the webdav folder. These user-password credentials will be asked whenever a client tries to access the webdav folder. For example, the following list of commands sets "test" as the user, and "olpc" as the password.
       sudo htpasswd -c /var/www/web1/passwd.dav test
       New password:  <olpc>
       Re-type new password:  <olpc> 
       Adding password for user test
    • Start service "httd".
    • ALL THESE STEPS WOULD BE DONE AS PART OF OOB STAGE.


  • [User-Workflow] Exporting Data to WebDav, on a server XO.
    • Sascha's JournalToWebDAV workflow.
      • step 1
      • step 2
      • step 3
      • step 4
    • Alternatively,
      • Add "Share" listview in the bottom panel-tray; that would make a total of 4 types of listview - Journal, Documents, Mounted-Drives, Share.
      • "Share" would follow all the schematics of "Documents" type. After all, "Share" is just a folder in the filesystem (like "Documents").
      • The corresponding folder is "/var/www/web1/web" (as configured in "/etc/httpd/conf.d/ssl.conf").
      • All entries in the "Share" folder would be available to client XOs.


  • [Code-Requirements] Exporting Data to WebDav, on a server XO.
    • Sascha has already coded the first alternative.
    • For the second alternative, "Share" listview needs to be added on the lines of "Documents" listview. Code-reuse should be done as much as possible. Ideally, there should just be a difference of the "folder-path".


  • [User-Workflow] Client XO wishes to access the share of Server XO.
    • Navigates to the "Neighborhood" view.
    • Hovers over the "Server" buddy.
    • The popup appears, which has a new entry "Access Share" (in addition to "Make Friend").
    • Clicks on "Access Share".
    • The "Browser" activity opens, with the url pointing to the "Server" buddy's webdav share.
    • Thereafter, client may navigate the webdav directory hierarchy, or download files (all of which is already built in the "Browse" activity). Most importantly, there is the "Keep Link" feature in "Browse", which nicely downloads the webdav-entry, and promptly saves it in the "Journal" - something that happens in the "Send To" feature as well.
    • The server's share is mounted. A color-specific buddy-icon in the bottom tray signifies it. Clicking this icon displays the server's share's entries, on the lines of Journal/Documents/Shares/Mounted-Drives.
    • Now, the entries can be copied from the mounted folder, to Journal/Documents/Shares/Mounted-Drives.


  • [Code-Requirements] Client XO wishes to access the share of Server XO.
    • Mapping a neighborhood-buddy to its IP Address
      • Luckily, in the method "def __buddy_updated_cb(self, account, contact_id, properties):" in "jarabe/model/neighborhood.py", there is the "properties['ip4-address']", which contains the IP address of the buddy. All that is needed is to persist it in the "BaseBuddyModel" in "jarabe/model/buddy.py".
      • When the client clicks on "Access Share" on the buddy, this IP Address can be easily retreived, and the URI formed "https://<IP Address>/webdav"
    • Opening up the server's webdav
      • The generated URI would be passed to the "Browse" activity; and thereafter, "Browse" would take over.
    • A minor query, regarding the last point, has been posted at http://lists.sugarlabs.org/archive/sugar-devel/2012-April/036425.html. (For resolving this, some additional code may have to be written, but that is something perfectly doable. However, currently awaiting a reply, to see if the code for this already exists :-) ).


SCREENSHOTS

SERVER has initially empty "Shares" icon in bottom tray.

    • [To be decided] Is "Shares" the correct terminology ?
    • [To be decided] Icon for "Shares".
    • S1.png



CLIENT clicks on "Access Shares" in Neighborhood View.

    • S2.png



CLIENT sees the buddy icon in the bottom tray, with the server's share..

    • S12.png



CLIENT can copy the entries to Journal/Documents/Shares/Mounted-Drives.

    • <to be attached>





[ARCHIVE] Possible options

In a server-initiated operation, the server is responsible for adequate delivery to all the clients, whatever the number may be. In a client-initiated operation, each client is responsible for herself only.


Option Server-Initiated / Client-Initiated Secure Data Transfer Proxy Support Peer to Peer Support (Gabble/Salut)
Looping over "Send To" Server-Initiated Yes/Yes
Sascha's JournalToWebDAV Client-Initiated
Each XO acts as an independent WebDAV server; client uses browser Client-Initiated Yes (HTTPS over SSL) /Yes