@@ -37,6 +37,8 @@ public CSCGlobalCAPlugin()
3737
3838 public bool EnableTemplateSync { get ; set ; }
3939
40+ public int SyncFilterDays { get ; set ; }
41+
4042 //done
4143 public void Initialize ( IAnyCAPluginConfigProvider configProvider , ICertificateDataReader certificateDataReader )
4244 {
@@ -45,6 +47,16 @@ public void Initialize(IAnyCAPluginConfigProvider configProvider, ICertificateDa
4547 CscGlobalClient = new CscGlobalClient ( configProvider ) ;
4648 var templateSync = configProvider . CAConnectionData [ "TemplateSync" ] . ToString ( ) ;
4749 if ( templateSync . ToUpper ( ) == "ON" ) EnableTemplateSync = true ;
50+
51+ if ( configProvider . CAConnectionData . ContainsKey ( Constants . SyncFilterDays ) )
52+ {
53+ var syncFilterDaysStr = configProvider . CAConnectionData [ Constants . SyncFilterDays ] ? . ToString ( ) ;
54+ if ( int . TryParse ( syncFilterDaysStr , out var syncFilterDays ) )
55+ {
56+ SyncFilterDays = syncFilterDays ;
57+ Logger . LogDebug ( $ "SyncFilterDays configured to { SyncFilterDays } days") ;
58+ }
59+ }
4860 Logger . MethodExit ( LogLevel . Debug ) ;
4961 }
5062
@@ -98,49 +110,19 @@ public async Task Synchronize(BlockingCollection<AnyCAPluginCertificate> blockin
98110 {
99111 if ( fullSync )
100112 {
101- var certs = await CscGlobalClient . SubmitCertificateListRequestAsync ( ) ;
102-
103- foreach ( var currentResponseItem in certs . Results )
104- {
105- cancelToken . ThrowIfCancellationRequested ( ) ;
106- Logger . LogTrace ( $ "Took Certificate ID { currentResponseItem ? . Uuid } from Queue") ;
107- var certStatus = _requestManager . MapReturnStatus ( currentResponseItem ? . Status ) ;
108-
109- //Keyfactor sync only seems to work when there is a valid cert and I can only get Active valid certs from Csc Global
110- if ( certStatus == Convert . ToInt32 ( EndEntityStatus . GENERATED ) ||
111- certStatus == Convert . ToInt32 ( EndEntityStatus . REVOKED ) )
112- {
113- //One click renewal/reissue won't work for this implementation so there is an option to disable it by not syncing back template
114- var productId = "CscGlobal" ;
115- if ( EnableTemplateSync ) productId = currentResponseItem ? . CertificateType ;
116-
117- var fileContent =
118- PreparePemTextFromApi (
119- currentResponseItem ? . Certificate ?? string . Empty ) ;
120-
121- if ( fileContent . Length > 0 )
122- {
123- Logger . LogTrace ( $ "File Content { fileContent } ") ;
124- var certData = fileContent . Replace ( "\r \n " , string . Empty ) ;
125- var certString = GetEndEntityCertificate ( certData ) ;
126- //var currentCert = new X509Certificate2(Encoding.ASCII.GetBytes(certString));
127- if ( certString . Length > 0 )
128- blockingBuffer . Add ( new AnyCAPluginCertificate
129- {
130- CARequestID = $ "{ currentResponseItem ? . Uuid } ",
131- Certificate = certString ,
132- //SubmissionDate = currentResponseItem?.OrderDate == null
133- //? Convert.ToDateTime(currentCert.NotBefore)
134- //: Convert.ToDateTime(currentResponseItem.OrderDate),
135- Status = certStatus ,
136- ProductID = productId
137- } , cancelToken ) ;
138- }
139- }
140- }
141-
142- blockingBuffer . CompleteAdding ( ) ;
113+ Logger . LogDebug ( "Performing full sync - no date filter applied" ) ;
114+ await SyncCertificates ( blockingBuffer , cancelToken , null ) ;
115+ }
116+ else
117+ {
118+ var filterDays = SyncFilterDays > 0 ? SyncFilterDays : 5 ;
119+ var filterDate = DateTime . Today . AddDays ( filterDays ) ;
120+ var dateFilter = filterDate . ToString ( "yyyy/MM/dd" ) ;
121+ Logger . LogDebug ( $ "Performing incremental sync with expiration date filter: { dateFilter } ") ;
122+ await SyncCertificates ( blockingBuffer , cancelToken , dateFilter ) ;
143123 }
124+
125+ blockingBuffer . CompleteAdding ( ) ;
144126 }
145127 catch ( Exception e )
146128 {
@@ -153,6 +135,47 @@ public async Task Synchronize(BlockingCollection<AnyCAPluginCertificate> blockin
153135 Logger . MethodExit ( LogLevel . Debug ) ;
154136 }
155137
138+ private async Task SyncCertificates ( BlockingCollection < AnyCAPluginCertificate > blockingBuffer ,
139+ CancellationToken cancelToken , string ? dateFilter )
140+ {
141+ var certs = await CscGlobalClient . SubmitCertificateListRequestAsync ( dateFilter ) ;
142+
143+ foreach ( var currentResponseItem in certs . Results )
144+ {
145+ cancelToken . ThrowIfCancellationRequested ( ) ;
146+ Logger . LogTrace ( $ "Took Certificate ID { currentResponseItem ? . Uuid } from Queue") ;
147+ var certStatus = _requestManager . MapReturnStatus ( currentResponseItem ? . Status ) ;
148+
149+ //Keyfactor sync only seems to work when there is a valid cert and I can only get Active valid certs from Csc Global
150+ if ( certStatus == Convert . ToInt32 ( EndEntityStatus . GENERATED ) ||
151+ certStatus == Convert . ToInt32 ( EndEntityStatus . REVOKED ) )
152+ {
153+ //One click renewal/reissue won't work for this implementation so there is an option to disable it by not syncing back template
154+ var productId = "CscGlobal" ;
155+ if ( EnableTemplateSync ) productId = currentResponseItem ? . CertificateType ;
156+
157+ var fileContent =
158+ PreparePemTextFromApi (
159+ currentResponseItem ? . Certificate ?? string . Empty ) ;
160+
161+ if ( fileContent . Length > 0 )
162+ {
163+ Logger . LogTrace ( $ "File Content { fileContent } ") ;
164+ var certData = fileContent . Replace ( "\r \n " , string . Empty ) ;
165+ var certString = GetEndEntityCertificate ( certData ) ;
166+ if ( certString . Length > 0 )
167+ blockingBuffer . Add ( new AnyCAPluginCertificate
168+ {
169+ CARequestID = $ "{ currentResponseItem ? . Uuid } ",
170+ Certificate = certString ,
171+ Status = certStatus ,
172+ ProductID = productId
173+ } , cancelToken ) ;
174+ }
175+ }
176+ }
177+ }
178+
156179 //done
157180 public async Task < int > Revoke ( string caRequestID , string hexSerialNumber , uint revocationReason )
158181 {
@@ -371,6 +394,13 @@ public Dictionary<string, PropertyConfigInfo> GetCAConnectorAnnotations()
371394 Hidden = false ,
372395 DefaultValue = "false" ,
373396 Type = "Bool"
397+ } ,
398+ [ Constants . SyncFilterDays ] = new ( )
399+ {
400+ Comments = "Number of days from today to filter certificates by expiration date during incremental sync." ,
401+ Hidden = false ,
402+ DefaultValue = "5" ,
403+ Type = "Number"
374404 }
375405 } ;
376406 }
0 commit comments