@@ -9,6 +9,8 @@ import { EntryStorage, ManagedStorage } from "./models/storage";
99import { Dropbox , Drive } from "./models/backup" ;
1010
1111let cachedPassphrase = "" ;
12+ let autolockTimeout : number ;
13+
1214chrome . runtime . onMessage . addListener ( ( message , sender , sendResponse ) => {
1315 if ( message . action === "position" ) {
1416 if ( ! sender . tab ) {
@@ -23,13 +25,20 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
2325 message . info . windowWidth
2426 ) ;
2527 } else if ( message . action === "cachePassphrase" ) {
28+ document . cookie = `passphrase="${ message . value } ${ getCookieExpiry ( ) } "` ;
2629 cachedPassphrase = message . value ;
30+ clearTimeout ( autolockTimeout ) ;
31+ setAutolock ( ) ;
2732 } else if ( message . action === "passphrase" ) {
28- sendResponse ( cachedPassphrase ) ;
33+ sendResponse ( getCachedPassphrase ( ) ) ;
2934 } else if ( [ "dropbox" , "drive" ] . indexOf ( message . action ) > - 1 ) {
3035 getBackupToken ( message . action ) ;
3136 } else if ( message . action === "lock" ) {
3237 cachedPassphrase = "" ;
38+ document . cookie = 'passphrase=";expires=Thu, 01 Jan 1970 00:00:00 GMT"' ;
39+ } else if ( message . action === "resetAutolock" ) {
40+ clearTimeout ( autolockTimeout ) ;
41+ setAutolock ( ) ;
3342 }
3443} ) ;
3544
@@ -276,12 +285,12 @@ function getBackupToken(service: string) {
276285 xhr . open (
277286 "POST" ,
278287 "https://www.googleapis.com/oauth2/v4/token?client_id=" +
279- getCredentials ( ) . drive . client_id +
280- "&client_secret=" +
281- getCredentials ( ) . drive . client_secret +
282- "&code=" +
283- value +
284- "&redirect_uri=https://authenticator.cc/oauth&grant_type=authorization_code"
288+ getCredentials ( ) . drive . client_id +
289+ "&client_secret=" +
290+ getCredentials ( ) . drive . client_secret +
291+ "&code=" +
292+ value +
293+ "&redirect_uri=https://authenticator.cc/oauth&grant_type=authorization_code"
285294 ) ;
286295 xhr . setRequestHeader ( "Accept" , "application/json" ) ;
287296 xhr . setRequestHeader (
@@ -395,3 +404,42 @@ chrome.commands.onCommand.addListener(async (command: string) => {
395404 break ;
396405 }
397406} ) ;
407+
408+ function setAutolock ( ) {
409+ if ( Number ( localStorage . autolock ) > 0 ) {
410+ document . cookie = `passphrase="${ getCachedPassphrase ( ) } ${ getCookieExpiry ( ) } "` ;
411+ autolockTimeout = setTimeout ( ( ) => {
412+ cachedPassphrase = "" ;
413+ } , Number ( localStorage . autolock ) * 60000 ) ;
414+ }
415+ }
416+
417+ function getCookieExpiry ( ) {
418+ if ( localStorage . autolock && Number ( localStorage . autolock ) > 0 ) {
419+ const offset = Number ( localStorage . autolock ) * 60000 ;
420+ const now = new Date ( ) . getTime ( ) ;
421+ const autolockExpiry = new Date ( now + offset ) . toUTCString ( ) ;
422+
423+ return `;expires=${ autolockExpiry } ` ;
424+ } else {
425+ return "" ;
426+ }
427+ }
428+
429+ function getCachedPassphrase ( ) {
430+ if ( cachedPassphrase ) {
431+ return cachedPassphrase ;
432+ }
433+
434+ const cookie = document . cookie ;
435+ const cookieMatch = cookie
436+ ? document . cookie . match ( / p a s s p h r a s e = ( [ ^ ; ] * ) / )
437+ : null ;
438+ const cookiePassphrase =
439+ cookieMatch && cookieMatch . length > 1 ? cookieMatch [ 1 ] : null ;
440+ if ( cookiePassphrase ) {
441+ return cookiePassphrase ;
442+ }
443+
444+ return "" ;
445+ }
0 commit comments