@@ -57,11 +57,82 @@ public static partial class GlobalVar
5757 public const string HeaderCfAccessClientId = "CF-Access-Client-Id" ;
5858 public const string HeaderCfAccessClientSecret = "CF-Access-Client-Secret" ;
5959
60- public static bool QueueEnabled => string . Equals ( Environment . GetEnvironmentVariable ( EnvQueueEnabled ) , "1" , StringComparison . OrdinalIgnoreCase ) ;
61- public static string QueueBaseUrl => ( Environment . GetEnvironmentVariable ( EnvQueueBaseUrl ) ?? "https://queue.dlamanna.com" ) . TrimEnd ( '/' ) ;
62- public static string ? QueueKeyBase64 => Environment . GetEnvironmentVariable ( EnvQueueKeyBase64 ) ;
63- public static string ? CfAccessClientId => Environment . GetEnvironmentVariable ( EnvCfAccessClientId ) ;
64- public static string ? CfAccessClientSecret => Environment . GetEnvironmentVariable ( EnvCfAccessClientSecret ) ;
60+ private static string ? GetEnvValue ( string name )
61+ {
62+ // IMPORTANT: Environment.GetEnvironmentVariable(name) reads only the *process* environment.
63+ // If variables were set via registry (setx / System Properties), Explorer may not have picked
64+ // them up yet, and new processes can inherit stale values. Falling back to User/Machine makes
65+ // DesktopShell resilient without requiring logoff/rebootestart.
66+
67+ string ? processValue = Environment . GetEnvironmentVariable ( name ) ;
68+ if ( processValue != null )
69+ {
70+ return processValue . Trim ( ) ;
71+ }
72+
73+ try
74+ {
75+ string ? userValue = Environment . GetEnvironmentVariable ( name , EnvironmentVariableTarget . User ) ;
76+ if ( userValue != null )
77+ {
78+ return userValue . Trim ( ) ;
79+ }
80+ }
81+ catch
82+ {
83+ // ignore
84+ }
85+
86+ try
87+ {
88+ string ? machineValue = Environment . GetEnvironmentVariable ( name , EnvironmentVariableTarget . Machine ) ;
89+ if ( machineValue != null )
90+ {
91+ return machineValue . Trim ( ) ;
92+ }
93+ }
94+ catch
95+ {
96+ // ignore
97+ }
98+
99+ return null ;
100+ }
101+
102+ private static string GetEnvSource ( string name )
103+ {
104+ // Returns the first scope where the variable exists (even if empty string).
105+ if ( Environment . GetEnvironmentVariable ( name ) != null ) return "process" ;
106+ try
107+ {
108+ if ( Environment . GetEnvironmentVariable ( name , EnvironmentVariableTarget . User ) != null ) return "user" ;
109+ }
110+ catch { }
111+ try
112+ {
113+ if ( Environment . GetEnvironmentVariable ( name , EnvironmentVariableTarget . Machine ) != null ) return "machine" ;
114+ }
115+ catch { }
116+ return "missing" ;
117+ }
118+
119+ public static void LogQueueEnvSummary ( )
120+ {
121+ // Safe logging: no secret values, only presence/length and source.
122+ string enabledRaw = GetEnvValue ( EnvQueueEnabled ) ?? "" ;
123+ string ? id = GetEnvValue ( EnvCfAccessClientId ) ;
124+ string ? secret = GetEnvValue ( EnvCfAccessClientSecret ) ;
125+
126+ Log ( $ "^^^ Queue env: { EnvQueueEnabled } ='{ enabledRaw } ' (source={ GetEnvSource ( EnvQueueEnabled ) } ), " +
127+ $ "{ EnvCfAccessClientId } ={ ( string . IsNullOrWhiteSpace ( id ) ? "missing" : "set" ) } (len={ ( id ?? "" ) . Length } , source={ GetEnvSource ( EnvCfAccessClientId ) } ), " +
128+ $ "{ EnvCfAccessClientSecret } ={ ( string . IsNullOrWhiteSpace ( secret ) ? "missing" : "set" ) } (len={ ( secret ?? "" ) . Length } , source={ GetEnvSource ( EnvCfAccessClientSecret ) } )") ;
129+ }
130+
131+ public static bool QueueEnabled => string . Equals ( GetEnvValue ( EnvQueueEnabled ) , "1" , StringComparison . OrdinalIgnoreCase ) ;
132+ public static string QueueBaseUrl => ( GetEnvValue ( EnvQueueBaseUrl ) ?? "https://queue.dlamanna.com" ) . TrimEnd ( '/' ) ;
133+ public static string ? QueueKeyBase64 => GetEnvValue ( EnvQueueKeyBase64 ) ;
134+ public static string ? CfAccessClientId => GetEnvValue ( EnvCfAccessClientId ) ;
135+ public static string ? CfAccessClientSecret => GetEnvValue ( EnvCfAccessClientSecret ) ;
65136
66137 public static string NormalizeHostName ( string ? hostName )
67138 {
0 commit comments