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();
 | |
|   });
 | |
| };
 |