services/sync/tests/unit/test_service_passwordUTF8.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 Cu.import("resource://services-sync/resource.js");
     5 Cu.import("resource://services-sync/util.js");
     6 Cu.import("resource://services-sync/service.js");
     7 Cu.import("resource://testing-common/services/sync/utils.js");
     9 const JAPANESE = "\u34ff\u35ff\u36ff\u37ff";
    10 const APPLES = "\uf8ff\uf8ff\uf8ff\uf8ff";
    11 const LOWBYTES = "\xff\xff\xff\xff";
    13 // Poor man's /etc/passwd.  Static since there's no btoa()/atob() in xpcshell.
    14 let basicauth = {};
    15 basicauth[LOWBYTES] = "Basic am9obmRvZTr/////";
    16 basicauth[Utils.encodeUTF8(JAPANESE)] = "Basic am9obmRvZTrjk7/jl7/jm7/jn78=";
    18 // Global var for the server password, read by info_collections(),
    19 // modified by change_password().
    20 let server_password;
    22 function login_handling(handler) {
    23   return function (request, response) {
    24     let basic = basicauth[server_password];
    26     if (basic && (request.getHeader("Authorization") == basic)) {
    27       handler(request, response);
    28     } else {
    29       let body = "Unauthorized";
    30       response.setStatusLine(request.httpVersion, 401, "Unauthorized");
    31       response.setHeader("WWW-Authenticate", 'Basic realm="secret"', false);
    32       response.bodyOutputStream.write(body, body.length);
    33     }
    34   };
    35 }
    37 function change_password(request, response) {
    38   let body, statusCode, status;
    39   let basic = basicauth[server_password];
    41   if (basic && (request.getHeader("Authorization") == basic)) {
    42     server_password = readBytesFromInputStream(request.bodyInputStream);
    43     body = "";
    44     statusCode = 200;
    45     status = "OK";
    46   } else {
    47     statusCode = 401;
    48     body = status = "Unauthorized";
    49   }
    50   response.setStatusLine(request.httpVersion, statusCode, status);
    51   response.setHeader("WWW-Authenticate", 'Basic realm="secret"', false);
    52   response.bodyOutputStream.write(body, body.length);
    53 }
    55 function run_test() {
    56   initTestLogging("Trace");
    57   let collectionsHelper = track_collections_helper();
    58   let upd = collectionsHelper.with_updated_collection;
    59   let collections = collectionsHelper.collections;
    61   ensureLegacyIdentityManager();
    63   do_test_pending();
    64   let server = httpd_setup({
    65     "/1.1/johndoe/info/collections":    login_handling(collectionsHelper.handler),
    66     "/1.1/johndoe/storage/meta/global": upd("meta",   new ServerWBO("global").handler()),
    67     "/1.1/johndoe/storage/crypto/keys": upd("crypto", new ServerWBO("keys").handler()),
    68     "/user/1.0/johndoe/password":       change_password
    69   });
    71   setBasicCredentials("johndoe", JAPANESE, "irrelevant");
    72   Service.serverURL = server.baseURI;
    74   try {
    75     _("Try to log in with the password.");
    76     server_password = "foobar";
    77     do_check_false(Service.verifyLogin());
    78     do_check_eq(server_password, "foobar");
    80     _("Make the server password the low byte version of our password.");
    81     server_password = LOWBYTES;
    82     do_check_false(Service.verifyLogin());
    83     do_check_eq(server_password, LOWBYTES);
    85     _("Can't use a password that has the same low bytes as ours.");
    86     server_password = Utils.encodeUTF8(JAPANESE);
    87     Service.identity.basicPassword = APPLES;
    88     do_check_false(Service.verifyLogin());
    89     do_check_eq(server_password, Utils.encodeUTF8(JAPANESE));
    91   } finally {
    92     server.stop(do_test_finished);
    93     Svc.Prefs.resetBranch("");
    94   }
    95 }

mercurial