@@ -7,11 +7,13 @@ import {AppGuardResponse__Output} from './proto/appguard/AppGuardResponse'
77import { AppGuardTcpConnection } from './proto/appguard/AppGuardTcpConnection'
88import { AppGuardHttpResponse } from './proto/appguard/AppGuardHttpResponse'
99import { AppGuardTcpResponse__Output } from "./proto/appguard/AppGuardTcpResponse" ;
10- import { APP_ID_FILE , APP_SECRET_FILE , FIREWALL_DEFAULTS_FILE , TOKEN_FILE } from "./auth" ;
10+ import { APP_ID_FILE , APP_SECRET_FILE , CACHE_FILE , FIREWALL_DEFAULTS_FILE , TOKEN_FILE } from "./auth" ;
1111import { AuthorizationRequest } from "./proto/appguard_commands/AuthorizationRequest" ;
1212import { ClientMessage } from "./proto/appguard_commands/ClientMessage" ;
1313import { ServerMessage__Output } from "./proto/appguard_commands/ServerMessage" ;
1414import { FirewallDefaults , FirewallDefaults__Output } from "./proto/appguard_commands/FirewallDefaults" ;
15+ import { CacheKey } from "./cache" ;
16+ import { FirewallPolicy } from "./proto/appguard_commands/FirewallPolicy" ;
1517
1618const opts = { includeDirs : [
1719 'node_modules/@nullnet/appguard-express/node_modules/appguard-client-common/proto/' ,
@@ -186,6 +188,9 @@ export class AppGuardService {
186188 let firewallDefaults : FirewallDefaults = server_msg . setFirewallDefaults ;
187189 console . log ( "Received firewall defaults from server:" , firewallDefaults ) ;
188190 fs . writeFileSync ( FIREWALL_DEFAULTS_FILE , JSON . stringify ( firewallDefaults ) , { flag : 'w' } ) ;
191+ // empty and update cache
192+ let cache : Map < string , FirewallPolicy > = new Map ( [ ] ) ;
193+ writeCache ( cache ) ;
189194 }
190195 if ( server_msg . deviceDeauthorized ) {
191196 // delete saved app secret and app id
@@ -206,9 +211,49 @@ export class AppGuardService {
206211 } , 10000 ) ;
207212 } ) ;
208213 }
214+
215+ getFromCache ( key : CacheKey ) : FirewallPolicy | undefined {
216+ let defaults = readFirewallDefaults ( ) ;
217+ if ( defaults . cache ) {
218+ let cache = readCache ( ) ;
219+ return cache . get ( JSON . stringify ( key ) ) ;
220+ }
221+ }
222+
223+ insertToCache ( key : CacheKey , policy : FirewallPolicy ) {
224+ let defaults = readFirewallDefaults ( ) ;
225+ if ( defaults . cache ) {
226+ let cache = readCache ( ) ;
227+ cache . set ( JSON . stringify ( key ) , policy ) ;
228+ writeCache ( cache ) ;
229+ }
230+ }
209231}
210232
211233function readFirewallDefaults ( ) : FirewallDefaults {
212234 let text = fs . readFileSync ( FIREWALL_DEFAULTS_FILE , 'utf8' ) ;
213- return JSON . parse ( text ) ;
235+ if ( text . trim ( ) === '' ) {
236+ return {
237+ policy : FirewallPolicy . ALLOW ,
238+ timeout : 1000 ,
239+ cache : true ,
240+ } ;
241+ } else {
242+ return JSON . parse ( text ) ;
243+ }
244+ }
245+
246+ function readCache ( ) : Map < string , FirewallPolicy > {
247+ let text = fs . readFileSync ( CACHE_FILE , 'utf8' ) ;
248+ if ( text . trim ( ) === '' ) {
249+ return new Map ( [ ] ) ;
250+ } else {
251+ let map : Map < string , FirewallPolicy > = new Map ( JSON . parse ( text ) )
252+ return map ;
253+ }
254+ }
255+
256+ function writeCache ( cache : Map < string , FirewallPolicy > ) {
257+ let mySerialMap = JSON . stringify ( Array . from ( cache . entries ( ) ) ) ;
258+ fs . writeFileSync ( CACHE_FILE , mySerialMap , { flag : 'w' } ) ;
214259}
0 commit comments