rework javascript interface for authentication modules
authorLunar <lunar@anargeek.net>
Tue, 14 Feb 2012 18:08:22 +0000 (19:08 +0100)
committerLunar <lunar@anargeek.net>
Fri, 24 Feb 2012 18:43:01 +0000 (19:43 +0100)
README
public/javascripts/coquelicot.auth.imap.js
public/javascripts/coquelicot.auth.simplepass.js
public/javascripts/coquelicot.js

diff --git a/README b/README
index 43ab9a0..71c7ce0 100644 (file)
--- a/README
+++ b/README
@@ -261,14 +261,20 @@ with the following responsabilities:
 
  * `public/javascripts/coquelicot.auth.<METHOD>.js:`
 
 
  * `public/javascripts/coquelicot.auth.<METHOD>.js:`
 
-    We expect 3 javascript methods in that file:
-
-    - `authenticationData()`: returns a hash of all the necessary data
-      to authenticate on the app side.
-    - `authenticationFocus()`: set the focus on the first authentication
-      form field.
-    - `authenticationReset()`: reset authentication fields after
-      a failed authentication.
+    This file should define 'authentication' as an object with the following
+    methods:
+
+    - `getData()`: returns an object of all the necessary data
+      to authenticate on the app side. Keys should have the same name
+      as the input fields used to authenticate without Javascript.
+    - `focus()`: set the focus on the first authentication form field.
+    - (optional) `handleSuccess()`: arbitrary action upon successful
+      authentication. This is called after the livebox is closed.
+    - (optional) `handleReject()`: arbitrary action when access
+      get rejected. One can reset authentication fields after a failed
+      authentication.
+    - (optional) `handleFailure()`: arbitrary action when there was
+      a problem in the authentication procedure.
 
  * `views/auth/<METHOD>.haml`:
 
 
  * `views/auth/<METHOD>.haml`:
 
index d3c2a1d..c29d09a 100644 (file)
@@ -1,15 +1,15 @@
-function authenticationData(){
-  return {
-    imap_user: $('#imap_user').val(),
-    imap_password: $('#imap_password').val()
-  };
-}
-
-function authenticationFocus(){
-  $('#imap_user').focus();
-}
-
-function authenticationReset() {
-  $('#imap_user').val('');
-  $('#imap_password').val('');
-}
+var authentication = {
+  getData: function() {
+    return {
+      imap_user: $('#imap_user').val(),
+      imap_password: $('#imap_password').val()
+    };
+  },
+  focus: function() {
+    $('#imap_user').focus();
+  },
+  handleReject: function() {
+    $('#imap_user').val('');
+    $('#imap_password').val('');
+  },
+};
index ad3a142..48967f5 100644 (file)
@@ -1,13 +1,15 @@
-function authenticationData(){
-  return {
-    upload_password: $('#upload_password').val()
-  };
-}
-
-function authenticationFocus(){
-  $('#upload_password').focus();
-}
-
-function authenticationReset() {
-  $('#upload_password').val('');
-}
+var authentication = {
+  getData: function() {
+    return {
+      upload_password: $('#upload_password').val()
+    };
+  },
+  focus: function() {
+    $('#upload_password').focus();
+  },
+  handleAccept: function() { alert('success!'); },
+  handleReject: function() {
+    $('#upload_password').val('');
+  },
+  handleFailure: function(status) { alert('failure!' + status); },
+};
index ad6b69f..6ef4694 100644 (file)
@@ -55,22 +55,30 @@ function authenticate() {
       type: 'POST',
       url: 'authenticate',
       dataType: 'text',
       type: 'POST',
       url: 'authenticate',
       dataType: 'text',
-      data: authenticationData.call(),
+      data: authentication.getData(),
       complete: function(res, status) {
         if (status === 'success') {
       complete: function(res, status) {
         if (status === 'success') {
-          $.each(authenticationData.call(), function(key, value) {
+          $.each(authentication.getData(), function(key, value) {
             var hiddenField = $('<input type="hidden" />');
             hiddenField.attr('name', key);
             hiddenField.val(value);
             $('#upload').append(hiddenField);
           });
           lb.close();
             var hiddenField = $('<input type="hidden" />');
             hiddenField.attr('name', key);
             hiddenField.val(value);
             $('#upload').append(hiddenField);
           });
           lb.close();
+          if (authentication.handleAccept) {
+            authentication.handleAccept();
+          }
         } else if (res.responseText == 'Forbidden') {
           $('#auth-message').text(i18n.pleaseTryAgain);
         } else if (res.responseText == 'Forbidden') {
           $('#auth-message').text(i18n.pleaseTryAgain);
+          if (authentication.handleReject) {
+            authentication.handleReject();
+          }
         } else {
         } else {
-          $('#auth-message').text(i18n.error + alert(status));
+          $('#auth-message').text(i18n.error + status);
+          if (authentication.handleFailure) {
+            authentication.handleFailure(status);
+          }
         }
         }
-        authenticationReset();
       }
     });
     return false;
       }
     });
     return false;
@@ -82,5 +90,5 @@ function authenticate() {
   });
   if ( $('#jssubmit')[0] ) { $('#jssubmit').show(); }
   $('#authabout').show();
   });
   if ( $('#jssubmit')[0] ) { $('#jssubmit').show(); }
   $('#authabout').show();
-  authenticationFocus();
+  authentication.focus();
 }
 }