1
- const error = require ( '../error' )
2
- const logger = require ( '../../logger' ) . global ;
3
- const internalAccessList = require ( '../../internal/access-list' ) ;
4
- const internalNginx = require ( '../../internal/nginx' ) ;
5
- const spawn = require ( 'child_process' ) . spawn ;
6
-
7
- const cmdHelper = {
8
- /**
9
- * Run the given command. Safer than using exec since args are passed as a list instead of in shell mode as a single string.
10
- * @param {string } cmd The command to run
11
- * @param {string } args The args to pass to the command
12
- * @returns Promise that resolves to stdout or an object with error code and stderr if there's an error
13
- */
14
- run : ( cmd , args ) => {
15
- return new Promise ( ( resolve , reject ) => {
16
- let stdout = '' ;
17
- let stderr = '' ;
18
- const proc = spawn ( cmd , args ) ;
19
- proc . stdout . on ( 'data' , ( data ) => {
20
- stdout += data ;
21
- } ) ;
22
- proc . stderr . on ( 'data' , ( data ) => {
23
- stderr += data ;
24
- } ) ;
25
-
26
- proc . on ( 'close' , ( exitCode ) => {
27
- if ( ! exitCode ) {
28
- resolve ( stdout . trim ( ) ) ;
29
- } else {
30
- reject ( {
31
- exitCode : exitCode ,
32
- stderr : stderr
33
- } ) ;
34
- }
35
- } ) ;
36
- } ) ;
37
- }
38
- } ;
1
+ const error = require ( './error' )
2
+ const logger = require ( '../logger' ) . ddns ;
3
+ const internalAccessList = require ( '../internal/access-list' ) ;
4
+ const utils = require ( './utils' ) ;
39
5
40
6
const ddnsResolver = {
41
7
/**
@@ -99,15 +65,13 @@ const ddnsResolver = {
99
65
/** Private **/
100
66
// Properties
101
67
_initialized : false ,
102
- _updateIntervalMs : 1000 * 60 * 60 , // 1 hr default (overriden with $DDNS_UPDATE_INTERVAL env var)
68
+ _updateIntervalMs : 60 * 60 * 1000 , // 1 hr default (overriden with $DDNS_UPDATE_INTERVAL env var)
103
69
/**
104
70
* cache mapping host to (ip address, last updated time)
105
71
*/
106
72
_cache : new Map ( ) ,
107
73
_interval : null , // reference to created interval id
108
74
_processingDDNSUpdate : false ,
109
-
110
- _originalGenerateConfig : null , // Used for patching config generation to resolve hosts
111
75
112
76
// Methods
113
77
@@ -126,16 +90,6 @@ const ddnsResolver = {
126
90
logger . warn ( `[DDNS] invalid value for update interval: '${ process . env . DDNS_UPDATE_INTERVAL } '` ) ;
127
91
}
128
92
}
129
-
130
- // Patch nginx config generation if needed (check env var)
131
- if ( typeof process . env . DDNS_UPDATE_PATCH !== 'undefined' ) {
132
- const enabled = Number ( process . env . DDNS_UPDATE_PATCH . toLowerCase ( ) ) ;
133
- if ( ! isNaN ( enabled ) && enabled ) {
134
- logger . info ( 'Patching nginx config generation' ) ;
135
- ddnsResolver . _originalGenerateConfig = internalNginx . generateConfig ;
136
- internalNginx . generateConfig = ddnsResolver . _patchedGenerateConfig ;
137
- }
138
- }
139
93
ddnsResolver . _initialized = true ;
140
94
} ,
141
95
@@ -146,7 +100,7 @@ const ddnsResolver = {
146
100
*/
147
101
_queryHost : ( host ) => {
148
102
logger . info ( 'Looking up IP for ' , host ) ;
149
- return cmdHelper . run ( 'getent' , [ 'hosts' , host ] )
103
+ return utils . execSafe ( 'getent' , [ 'hosts' , host ] )
150
104
. then ( ( result ) => {
151
105
if ( result . length < 8 ) {
152
106
logger . error ( 'IP lookup returned invalid output: ' , result ) ;
@@ -162,35 +116,12 @@ const ddnsResolver = {
162
116
} ) ;
163
117
} ,
164
118
165
- _patchedGenerateConfig : ( host_type , host ) => {
166
- const promises = [ ] ;
167
- if ( host_type === 'proxy_host' ) {
168
- if ( typeof host . access_list !== 'undefined' && typeof host . access_list . clients !== 'undefined' ) {
169
- for ( const client of host . access_list . clients ) {
170
- if ( ddnsResolver . requiresResolution ( client . address ) ) {
171
- const p = ddnsResolver . resolveAddress ( client . address )
172
- . then ( ( resolvedIP ) => {
173
- client . address = `${ resolvedIP } ; # ${ client . address } ` ;
174
- return Promise . resolve ( ) ;
175
- } ) ;
176
- promises . push ( p ) ;
177
- }
178
- }
179
- }
180
- }
181
- if ( promises . length ) {
182
- return Promise . all ( promises )
183
- . then ( ( ) => {
184
- return ddnsResolver . _originalGenerateConfig ( host_type , host ) ;
185
- } ) ;
186
- }
187
- return ddnsResolver . _originalGenerateConfig ( host_type , host ) ;
188
- } ,
189
-
190
119
/**
191
120
* Triggered by a timer, will check for and update ddns hosts in access list clients
192
121
*/
193
122
_checkForDDNSUpdates : ( ) => {
123
+ const internalNginx = require ( '../internal/nginx' ) ; // Prevent circular import
124
+
194
125
logger . info ( 'Checking for DDNS updates...' ) ;
195
126
if ( ! ddnsResolver . _processingDDNSUpdate ) {
196
127
ddnsResolver . _processingDDNSUpdate = true ;
0 commit comments