@@ -9,7 +9,7 @@ import { ArcGISIdentityManager, request } from "@esri/arcgis-rest-request"
99import { FeatureServiceConfig } from './ArcGISConfig'
1010import { URL } from "node:url"
1111import express from 'express'
12- import { createArcGISIdentityService , getPortalUrl } from './ArcGISService'
12+ import { ArcGISIdentityService , createArcGISIdentityService , getPortalUrl } from './ArcGISService'
1313
1414const logPrefix = '[mage.arcgis]'
1515const logMethods = [ 'log' , 'debug' , 'info' , 'warn' , 'error' ] as const
@@ -35,9 +35,15 @@ const InjectedServices = {
3535
3636const pluginWebRoute = "plugins/@ngageoint/mage.arcgis.service"
3737
38- const sanitizeFeatureService = ( config : FeatureServiceConfig ) : Omit < FeatureServiceConfig , 'identityManager' > => {
38+ const sanitizeFeatureService = async ( config : FeatureServiceConfig , identityService : ArcGISIdentityService ) : Promise < Omit < FeatureServiceConfig & { authenticated : boolean } , 'identityManager' > > => {
39+ let authenticated = false
40+ try {
41+ await identityService . signin ( config )
42+ authenticated = true
43+ } catch ( ignore ) { }
44+
3945 const { identityManager, ...sanitized } = config ;
40- return sanitized ;
46+ return { ... sanitized , authenticated }
4147}
4248
4349/**
@@ -117,7 +123,7 @@ const arcgisPluginHooks: InitPluginHook<typeof InjectedServices> = {
117123 config . featureServices . push ( service )
118124
119125 await processor . putConfig ( config )
120- const sanitizedService = sanitizeFeatureService ( service )
126+ const sanitizedService = await sanitizeFeatureService ( service , identityService )
121127 res . send ( `
122128 <html>
123129 <head>
@@ -148,8 +154,13 @@ const arcgisPluginHooks: InitPluginHook<typeof InjectedServices> = {
148154 . get ( async ( req , res , next ) => {
149155 console . info ( 'Getting ArcGIS plugin config...' )
150156 const config = await processor . safeGetConfig ( )
151- const { featureServices, ...remaining } = config
152- res . json ( { ...remaining , featureServices : featureServices . map ( ( service ) => sanitizeFeatureService ( service ) ) } )
157+ const { featureServices, ...remaining } = config
158+
159+ const sanitizeFeatureServices = await Promise . all (
160+ featureServices . map ( async ( service ) => await sanitizeFeatureService ( service , identityService ) )
161+ )
162+
163+ res . json ( { ...remaining , featureServices : sanitizeFeatureServices } )
153164 } )
154165 . put ( async ( req , res , next ) => {
155166 console . info ( 'Applying ArcGIS plugin config...' )
@@ -209,7 +220,7 @@ const arcgisPluginHooks: InitPluginHook<typeof InjectedServices> = {
209220 }
210221
211222 await processor . patchConfig ( config )
212- return res . send ( sanitizeFeatureService ( service ) )
223+ return res . send ( sanitizeFeatureService ( service , identityService ) )
213224 } catch ( err ) {
214225 return res . send ( 'Invalid credentials provided to communicate with feature service' ) . status ( 400 )
215226 }
@@ -224,7 +235,7 @@ const arcgisPluginHooks: InitPluginHook<typeof InjectedServices> = {
224235 }
225236
226237 try {
227- const identityManager = await identityService . getIdentityManager ( featureService )
238+ const identityManager = await identityService . signin ( featureService )
228239 const response = await request ( url , {
229240 authentication : identityManager
230241 } )
0 commit comments