@@ -58,9 +58,12 @@ public static async Task<bool> StartTeamSyncAsync(RenderedInput inputs, IInstall
5858 var clientSecretCredential = new ClientSecretCredential (
5959 tenantId , clientId , clientSecret , options ) ;
6060 var graphClient = new GraphServiceClient ( clientSecretCredential ) ;
61- var activeDirectoryFacade = new ActiveDirectoryFacade ( graphClient ) ;
61+ var activeDirectoryFacade = new ActiveDirectoryFacade ( graphClient ) ;
6262
63- var emailToCloudIdBuilder = EmailToCloudIdBuilder . Build ( emailPrepend , emailAppend , itemsToReplace ) ;
63+ var emailReplaceRules = GetEmailReplaceRules ( inputs . EmailReplaceRules ) ;
64+ var itemsToReplaceRules = GetItemsToReplaceRules ( Enumerable . Empty < string > ( ) ) ;
65+
66+ var emailToCloudIdBuilder = EmailToCloudIdBuilder . Build ( string . Empty , inputs . EmailAppend , itemsToReplaceRules , emailReplaceRules ) ;
6467
6568 var groupSyncer = GroupSyncerBuilder . Build ( activeDirectoryFacade , gitHubFacade , emailToCloudIdBuilder ) ;
6669
@@ -108,11 +111,12 @@ public static async Task<bool> StartTeamSyncAsync(IActiveDirectoryFacade activeD
108111 // Azure AD Group and GitHub Team Name must match (my opinion, baked into this tool)
109112 var groupDisplayNames = inputs . GitHubTeamNames . Concat ( new [ ] { inputs . OrganizationMembersGroup } ) . Distinct ( ) . ToDictionary ( t => t ) ;
110113
111- var org = gitHubFacade . OrgName ;
112-
113- var itemsToReplace = inputs . EmailTextToReplaceRules ;
114+ var org = gitHubFacade . OrgName ;
115+
116+ var emailReplaceRules = GetEmailReplaceRules ( inputs . EmailReplaceRules ) ;
117+ var itemsToReplaceRules = GetItemsToReplaceRules ( inputs . EmailTextToReplaceRules ) ;
114118
115- var emailToCloudIdBuilder = EmailToCloudIdBuilder . Build ( string . Empty , inputs . EmailAppend , itemsToReplace ) ;
119+ var emailToCloudIdBuilder = EmailToCloudIdBuilder . Build ( string . Empty , inputs . EmailAppend , itemsToReplaceRules , emailReplaceRules ) ;
116120
117121 var groupSyncer = GroupSyncerBuilder . Build ( activeDirectoryFacade , gitHubFacade , emailToCloudIdBuilder ) ;
118122
@@ -147,6 +151,26 @@ public static async Task<bool> StartTeamSyncAsync(IActiveDirectoryFacade activeD
147151 return true ;
148152 }
149153
154+ private static IEnumerable < string > GetItemsToReplaceRules ( IEnumerable < string > emailTextToReplaceRules )
155+ {
156+ // TODO: use proper config fetching here...
157+ var fromEnvAsString = Environment . GetEnvironmentVariable ( "EmailTextToReplaceRules" ) ?? "{}" ;
158+
159+ var fromEnv = JsonConvert . DeserializeObject < IEnumerable < string > > ( fromEnvAsString ) ?? Enumerable . Empty < string > ( ) ;
160+
161+ return emailTextToReplaceRules . Any ( ) ? emailTextToReplaceRules : fromEnv ;
162+ }
163+
164+ private static IReadOnlyDictionary < string , string > GetEmailReplaceRules ( IReadOnlyDictionary < string , string > emailReplaceRules )
165+ {
166+ // TODO: use proper config fetching here...
167+ var fromEnvAsString = Environment . GetEnvironmentVariable ( "EmailReplaceRules" ) ?? "{}" ;
168+
169+ var fromEnv = JsonConvert . DeserializeObject < IReadOnlyDictionary < string , string > > ( fromEnvAsString ) ?? new Dictionary < string , string > ( ) ;
170+
171+ return emailReplaceRules . Any ( ) ? emailReplaceRules : fromEnv ;
172+ }
173+
150174 static void WriteConsoleOutput ( ISet < GitHubUser > usersWithSyncIssues )
151175 {
152176 if ( usersWithSyncIssues . Any ( ) )
0 commit comments