63 lines
		
	
	
	
		
			1.6 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.6 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 * vim: ts=4:sw=4:expandtab
 | 
						|
 */
 | 
						|
 | 
						|
'use strict';
 | 
						|
 | 
						|
/*
 | 
						|
*  Load this script in a Web Worker to generate new prekeys without
 | 
						|
*  tying up the main thread.
 | 
						|
*  https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
 | 
						|
*
 | 
						|
*  Because workers don't have access to the window or localStorage, we
 | 
						|
*  create our own version that proxies back to the caller for actual
 | 
						|
*  storage.
 | 
						|
*
 | 
						|
*  Example usage:
 | 
						|
*
 | 
						|
    var myWorker = new Worker('/js/key_worker.js');
 | 
						|
    myWorker.onmessage = function(e) {
 | 
						|
        switch(e.data.method) {
 | 
						|
            case 'set':
 | 
						|
                localStorage.setItem(e.data.key, e.data.value);
 | 
						|
                break;
 | 
						|
            case 'remove':
 | 
						|
                localStorage.removeItem(e.data.key);
 | 
						|
                break;
 | 
						|
            case 'done':
 | 
						|
                console.log(e.data.keys);
 | 
						|
        }
 | 
						|
    };
 | 
						|
*/
 | 
						|
var store = {};
 | 
						|
window.textsecure.storage.impl = {
 | 
						|
    /*****************************
 | 
						|
    *** Override Storage Routines ***
 | 
						|
    *****************************/
 | 
						|
    put: function(key, value) {
 | 
						|
        if (value === undefined)
 | 
						|
            throw new Error("Tried to store undefined");
 | 
						|
        store[key] = value;
 | 
						|
        postMessage({method: 'set', key: key, value: value});
 | 
						|
    },
 | 
						|
 | 
						|
    get: function(key, defaultValue) {
 | 
						|
        if (key in store) {
 | 
						|
            return store[key];
 | 
						|
        } else {
 | 
						|
            return defaultValue;
 | 
						|
        }
 | 
						|
    },
 | 
						|
 | 
						|
    remove: function(key) {
 | 
						|
        delete store[key];
 | 
						|
        postMessage({method: 'remove', key: key});
 | 
						|
    },
 | 
						|
};
 | 
						|
onmessage = function(e) {
 | 
						|
    store = e.data;
 | 
						|
    textsecure.protocol_wrapper.generateKeys().then(function(keys) {
 | 
						|
        postMessage({method: 'done', keys: keys});
 | 
						|
        close();
 | 
						|
    });
 | 
						|
}
 |