You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
/* global window, postMessage, textsecure, close */
 | 
						|
 | 
						|
/* eslint-disable more/no-then, no-global-assign, no-restricted-globals, no-unused-vars */
 | 
						|
 | 
						|
/*
 | 
						|
*  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.error(e.data.keys);
 | 
						|
        }
 | 
						|
    };
 | 
						|
*/
 | 
						|
let store = {};
 | 
						|
window.textsecure.storage.impl = {
 | 
						|
  /** ***************************
 | 
						|
   *** Override Storage Routines ***
 | 
						|
   **************************** */
 | 
						|
  put(key, value) {
 | 
						|
    if (value === undefined) throw new Error('Tried to store undefined');
 | 
						|
    store[key] = value;
 | 
						|
    postMessage({ method: 'set', key, value });
 | 
						|
  },
 | 
						|
 | 
						|
  get(key, defaultValue) {
 | 
						|
    if (key in store) {
 | 
						|
      return store[key];
 | 
						|
    }
 | 
						|
    return defaultValue;
 | 
						|
  },
 | 
						|
 | 
						|
  remove(key) {
 | 
						|
    delete store[key];
 | 
						|
    postMessage({ method: 'remove', key });
 | 
						|
  },
 | 
						|
};
 | 
						|
// eslint-disable-next-line no-undef
 | 
						|
onmessage = e => {
 | 
						|
  store = e.data;
 | 
						|
  textsecure.protocol_wrapper.generateKeys().then(keys => {
 | 
						|
    postMessage({ method: 'done', keys });
 | 
						|
    close();
 | 
						|
  });
 | 
						|
};
 |