@@ -8,11 +8,8 @@ const authRouter = require('./authRouter')
88const clientRouter = require ( './clientRouter' )
99const { Event, Db } = require ( '../services/initialization' )
1010const { version } = require ( '../../../package.json' )
11- const buildDefaultFilters = require ( '../services/filters/builder/base' )
12- const advMenus = require ( '../services/ui/advMenus' )
1311const areaPerms = require ( '../services/functions/areaPerms' )
14- const generateUi = require ( '../services/ui/primary' )
15- const clientOptions = require ( '../services/ui/clientOptions' )
12+ const getServerSettings = require ( '../services/functions/getServerSettings' )
1613
1714const rootRouter = express . Router ( )
1815
@@ -128,7 +125,7 @@ rootRouter.get('/api/settings', async (req, res, next) => {
128125 try {
129126 if (
130127 config . authentication . alwaysEnabledPerms . length ||
131- ! config . authMethods . length
128+ ! config . authentication . methods . length
132129 ) {
133130 if ( req . session . tutorial === undefined ) {
134131 req . session . tutorial = ! config . map . forceTutorial
@@ -163,186 +160,63 @@ rootRouter.get('/api/settings', async (req, res, next) => {
163160 }
164161 req . session . save ( )
165162
166- const getUser = async ( ) => {
167- if ( config . authMethods . length && req . user ) {
168- try {
169- const user = await Db . query ( 'User' , 'getOne' , req . user . id )
170- if ( user ) {
171- if ( ! user . selectedWebhook ) {
172- const newWebhook = req . user . perms . webhooks . find (
173- ( n ) => n in Event . webhookObj ,
174- )
175- await Db . query ( 'User' , 'updateWebhook' , user . id , newWebhook )
176- if ( req . session ?. user ) {
177- req . session . user . selectedWebhook = newWebhook
178- req . session . save ( )
179- }
180- }
181- delete user . password
182-
183- return {
184- ...req . user ,
185- ...user ,
186- valid : true ,
187- username : user . username || req . user . username ,
163+ if ( config . authentication . methods . length && req . user ) {
164+ try {
165+ const user = await Db . query ( 'User' , 'getOne' , req . user . id )
166+ if ( user ) {
167+ if ( ! user . selectedWebhook ) {
168+ const newWebhook = req . user . perms . webhooks . find (
169+ ( n ) => n in Event . webhookObj ,
170+ )
171+ await Db . query ( 'User' , 'updateWebhook' , user . id , newWebhook )
172+ if ( req . session ?. user ) {
173+ req . session . user . selectedWebhook = newWebhook
174+ req . session . save ( )
188175 }
189176 }
190- log . info (
191- HELPERS . session ,
192- 'Legacy user detected, forcing logout, User ID:' ,
193- req ?. user ?. id ,
194- )
195- req . logout ( ( ) => { } )
196- return { valid : false , tutorial : ! config . map . forceTutorial }
197- } catch ( e ) {
198- log . warn (
199- HELPERS . session ,
200- 'Issue finding user, User ID:' ,
201- req ?. user ?. id ,
202- e ,
203- )
204- return { valid : false , tutorial : ! config . map . forceTutorial }
205177 }
206- } else if ( req . session . perms ) {
207- return { ...req . session , valid : true }
178+ } catch ( e ) {
179+ log . warn (
180+ HELPERS . session ,
181+ 'Issue finding user, User ID:' ,
182+ req ?. user ?. id ,
183+ e ,
184+ )
208185 }
209- return { valid : false , tutorial : ! config . map . forceTutorial }
210- }
211- const serverSettings = {
212- user : await getUser ( ) ,
213- settings : { } ,
214- authMethods : config . authMethods ,
215- userBackupLimits : config . database . settings . userBackupLimits ,
216- config : {
217- map : {
218- ...config . map ,
219- ...config . multiDomainsObj [ req . headers . host . replaceAll ( '.' , '_' ) ] ,
220- general : undefined ,
221- customRoutes : undefined ,
222- links : undefined ,
223- misc : undefined ,
224- loginPage : ! ! config . map . loginPage . components . length ,
225- donationPage : undefined ,
226- messageOfTheDay : undefined ,
227- customFloatingIcons : undefined ,
228- excludeList : config . authentication . excludeFromTutorial ,
229- polling : config . api . polling ,
230- authCounts : {
231- areaRestrictions : config . authentication . areaRestrictions . length ,
232- webhooks : config . webhooks . filter ( ( w ) => w . enabled ) . length ,
233- scanner : Object . values ( config . scanner ) . filter ( ( s ) => s . enabled )
234- . length ,
235- } ,
236- } ,
237- tileServers : Object . fromEntries (
238- config . tileServers . map ( ( s ) => [ s . name , s ] ) ,
239- ) ,
240- navigation : Object . fromEntries (
241- config . navigation . map ( ( n ) => [ n . name , n ] ) ,
242- ) ,
243- navigationControls : {
244- react : { } ,
245- leaflet : { } ,
246- } ,
247- gymValidDataLimit :
248- Date . now ( ) / 1000 - config . api . gymValidDataLimit * 86400 ,
249- } ,
250- extraUserFields : config . database . settings . extraUserFields ,
251186 }
187+ const settings = getServerSettings ( req )
252188
253- // add user options here from the config that are structured as objects
254- if ( serverSettings . user . valid ) {
255- serverSettings . loggedIn = ! ! req . user
256-
257- // keys that are being sent to the frontend but are not options
258- const ignoreKeys = [
259- 'map' ,
260- 'limit' ,
261- 'icons' ,
262- 'scanner' ,
263- 'gymValidDataLimit' ,
264- ]
265-
266- Object . keys ( serverSettings . config ) . forEach ( ( setting ) => {
267- try {
268- if ( ! ignoreKeys . includes ( setting ) ) {
269- const category = serverSettings . config [ setting ]
270- Object . keys ( category ) . forEach ( ( option ) => {
271- category [ option ] . name = option
272- } )
273- if (
274- config . map [ setting ] &&
275- typeof config . map [ setting ] !== 'object'
276- ) {
277- serverSettings . settings [ setting ] = config . map [ setting ]
278- } else {
279- serverSettings . settings [ setting ] =
280- category [ Object . keys ( category ) [ 0 ] ] . name
281- }
282- }
283- } catch ( e ) {
284- log . warn (
285- HELPERS . config ,
286- `Error setting ${ setting } , most likely means there are no options set in the config` ,
287- e ,
288- )
289- }
290- } )
291-
189+ if ( 'perms' in settings . user ) {
292190 if (
293- serverSettings . user . perms . pokemon &&
191+ settings . user . perms . pokemon &&
294192 config . api . queryOnSessionInit . pokemon
295193 ) {
296194 Event . setAvailable ( 'pokemon' , 'Pokemon' , Db , false )
297195 }
298196 if (
299197 config . api . queryOnSessionInit . raids &&
300- ( serverSettings . user . perms . raids || serverSettings . user . perms . gyms )
198+ ( settings . user . perms . raids || settings . user . perms . gyms )
301199 ) {
302200 Event . setAvailable ( 'gyms' , 'Gym' , Db , false )
303201 }
304202 if (
305203 config . api . queryOnSessionInit . quests &&
306- ( serverSettings . user . perms . quests ||
307- serverSettings . user . perms . pokestops ||
308- serverSettings . user . perms . invasions ||
309- serverSettings . user . perms . lures )
204+ ( settings . user . perms . quests ||
205+ settings . user . perms . pokestops ||
206+ settings . user . perms . invasions ||
207+ settings . user . perms . lures )
310208 ) {
311209 Event . setAvailable ( 'pokestops' , 'Pokestop' , Db , false )
312210 }
313- if (
314- serverSettings . user . perms . nests &&
315- config . api . queryOnSessionInit . nests
316- ) {
211+ if ( settings . user . perms . nests && config . api . queryOnSessionInit . nests ) {
317212 Event . setAvailable ( 'nests' , 'Nest' , Db , false )
318213 }
319- if ( Object . values ( config . api . queryOnSessionInit ) . some ( ( v ) => v ) ) {
214+ if ( Object . values ( config . api . queryOnSessionInit ) . some ( Boolean ) ) {
320215 Event . addAvailable ( )
321216 }
322-
323- serverSettings . defaultFilters = buildDefaultFilters (
324- serverSettings . user . perms ,
325- Db ,
326- )
327-
328- // Backup in case there are Pokemon/Quests/Raids etc that are not in the masterfile
329- // Primary for quest rewards that are form unset, despite normally have a set form
330-
331- serverSettings . ui = generateUi (
332- serverSettings . defaultFilters ,
333- serverSettings . user . perms ,
334- )
335-
336- serverSettings . menus = advMenus ( )
337-
338- const { clientValues, clientMenus } = clientOptions (
339- serverSettings . user . perms ,
340- )
341-
342- serverSettings . userSettings = clientValues
343- serverSettings . clientMenus = clientMenus
344217 }
345- res . status ( 200 ) . json ( { serverSettings } )
218+
219+ res . status ( 200 ) . json ( settings )
346220 } catch ( error ) {
347221 res . status ( 500 ) . json ( { error : error . message , status : 500 } )
348222 next ( error )
0 commit comments