diff options
| author | Azul <azul@riseup.net> | 2012-11-19 15:58:46 +0100 | 
|---|---|---|
| committer | Azul <azul@riseup.net> | 2012-11-19 15:58:46 +0100 | 
| commit | 49bfe6ab74229ba4da5342382b87dcd6fca239fa (patch) | |
| tree | 05c70ca228e28a3a5fa3d35b9ffd441aac0a8ede | |
| parent | 2859af0287d7672df0a8965be43fb9859fca8bf8 (diff) | |
works - but not quite what i want. Exposing jqXHR to error function
| -rw-r--r-- | spec/helper.js | 4 | ||||
| -rw-r--r-- | spec/login_spec.js | 18 | ||||
| -rw-r--r-- | src/jqueryRest.js | 23 | ||||
| -rw-r--r-- | src/srp.js | 27 | 
4 files changed, 45 insertions, 27 deletions
| diff --git a/spec/helper.js b/spec/helper.js index 11327af..8bae2c6 100644 --- a/spec/helper.js +++ b/spec/helper.js @@ -30,11 +30,11 @@ var specHelper = (function() {      request.respond(200, header, body);    } -  function respondJSON(object) { +  function respondJSON(object, responseCode) {      var request = this.requests.pop();      header = { "Content-Type": "application/json;charset=utf-8" };      body = JSON.stringify(object); -    request.respond(200, header, body); +    request.respond(responseCode || 200, header, body);    }    return { diff --git a/spec/login_spec.js b/spec/login_spec.js index 4df62a8..3c30d28 100644 --- a/spec/login_spec.js +++ b/spec/login_spec.js @@ -48,7 +48,7 @@ describe("Login", function() {        expect(this.srp.session.key()).toBe(K);      }); -    it("works with JSON responses", function(){ +    it("authenticates successfully", function(){        var success = sinon.spy();        this.srp.identify(success); @@ -60,6 +60,20 @@ describe("Login", function() {        expect(success).toHaveBeenCalled();      }); +    it("reports errors during handshake", function(){ +      this.srp.error = sinon.spy(); +      var error = {login: "something went wrong on the server side"}; +      this.srp.identify(); + +      this.expectRequest('sessions.json', 'login=' +login+ '&A=' +A, 'POST'); +      this.respondJSON(error, 422); +      //this.expectNoMoreRequests(); + +      expect(this.srp.error).toHaveBeenCalled; +      var args = this.srp.error.args[0]; +      expect($.parseJSON(args[0].responseText)).toEqual(error); +    }); +          it("rejects B = 0", function(){        var success = sinon.spy();        var error = sinon.spy(); @@ -69,7 +83,7 @@ describe("Login", function() {        this.respondJSON({salt: salt, B: 0});        // aborting if B=0        expect(this.requests).toEqual([]); -      expect(error).toHaveBeenCalled(); +      expect(error).toHaveBeenCalledWith("Server send random number 0 - could not login.");        expect(success).not.toHaveBeenCalled();      });    }); diff --git a/src/jqueryRest.js b/src/jqueryRest.js index 54a0908..a7928d5 100644 --- a/src/jqueryRest.js +++ b/src/jqueryRest.js @@ -1,31 +1,30 @@  jqueryRest = function() {    // we do not fetch the salt from the server -  function register(session, callback) +  function register(session)    { -    sendVerifier(session, callback); +    return sendVerifier(session);    } -  function sendVerifier(session, callback) { +  function sendVerifier(session) {      var salt = session.getSalt(); -    $.post("users.json", { user: +    return $.post("users.json", { user:        { login: session.getI(),          password_salt: salt, -        password_verifier: session.getV(salt).toString(16)} -    }, callback); +        password_verifier: session.getV(salt).toString(16) +      } +    });    } -  function handshake(session, callback) { -    $.post("sessions.json", { login: session.getI(), -      A: session.getAstr()}, callback); +  function handshake(session) { +    return $.post("sessions.json", { login: session.getI(), A: session.getAstr()});    } -  function authenticate(session, success) { -    $.ajax({ +  function authenticate(session) { +    return $.ajax({        url: "sessions/" + session.getI() + ".json",        type: 'PUT',        data: {client_auth: session.getM()}, -      success: success      });    } @@ -2,8 +2,6 @@ function SRP(remote, session)  {    var srp = this;    session = session || new this.Session(); -  remote = remote || new this.Remote(); -  remote.onError = remote.onError || this.error;    session.onError = session.onError || this.error;    this.remote = remote;    this.session = session; @@ -12,7 +10,9 @@ function SRP(remote, session)    this.identify = function(success, error)    {      store_callbacks(success, error); -    remote.handshake(session, receive_salts); +    remote.handshake(session) +    .success(receive_salts) +    .error(srp.error);      // Receive login salts from the server, start calculations      function receive_salts(response) @@ -28,7 +28,9 @@ function SRP(remote, session)        else         {          session.calculations(response.salt, response.B); -        remote.authenticate(session, confirm_authentication); +        remote.authenticate(session) +        .success(confirm_authentication) +        .error(srp.error);        }      } @@ -47,12 +49,15 @@ function SRP(remote, session)    this.register = function(success, error)    {      store_callbacks(success, error); -    remote.register(session, srp.registered_user); +    remote.register(session) +    .success(srp.registered_user) +    .error(srp.error);    };    // The user has been registered successfully, now login    this.registered_user = function(response)    { +    // TODO: This can go if response has an error code      if(response.errors) {        srp.error(response.errors)      } @@ -61,12 +66,6 @@ function SRP(remote, session)      }    };   -  // Minimal error handling - set remote.onError to sth better to overwrite. -  this.error = function(text) -  { -    alert(text); -  }; -    // This function is called when authentication is successful.    // It's a dummy. Please hand the real thing to the call to identify.    this.success = function() @@ -74,6 +73,12 @@ function SRP(remote, session)      alert("Login successful.");    }; +  // Minimal error handling - set remote.onError to sth better to overwrite. +  this.error = function(text) +  { +    alert(text); +  }; +    function store_callbacks(success, error) {      if (typeof success == "function") {        srp.success = success; | 
