Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 4285c04

Browse files
committedMay 9, 2024·
Fix getExpirationDate breaking when the certificate is expired
1 parent 7f4cdf6 commit 4285c04

File tree

4 files changed

+13
-11
lines changed

4 files changed

+13
-11
lines changed
 

‎certificates/certificates.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,10 @@ func DeleteCertificates(certDir *paths.Path) {
271271
// IsExpired checks if a certificate is expired or about to expire (less than 1 month)
272272
func IsExpired() (bool, error) {
273273
bound := time.Now().AddDate(0, 1, 0)
274-
dateS, err := GetExpirationDate()
274+
date, err := GetExpirationDate()
275275
if err != nil {
276276
return false, err
277277
}
278-
date, _ := time.Parse(time.DateTime, dateS)
279278
return date.Before(bound), nil
280279
}
281280

‎certificates/install_darwin.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@ const char *getExpirationDate(char *expirationDate){
111111
}
112112
113113
// Get data from the certificate. We just need the "invalidity date" property.
114-
CFDictionaryRef valuesDict = SecCertificateCopyValues(cert, (__bridge CFArrayRef)@[(__bridge id)kSecOIDInvalidityDate], NULL);
114+
CFDictionaryRef valuesDict = SecCertificateCopyValues(cert, (__bridge CFArrayRef)@[(__bridge id)kSecOIDX509V1ValidityNotAfter], NULL);
115115
116116
id expirationDateValue;
117117
if(valuesDict){
118-
CFDictionaryRef invalidityDateDictionaryRef = CFDictionaryGetValue(valuesDict, kSecOIDInvalidityDate);
118+
CFDictionaryRef invalidityDateDictionaryRef = CFDictionaryGetValue(valuesDict, kSecOIDX509V1ValidityNotAfter);
119119
if(invalidityDateDictionaryRef){
120120
CFTypeRef invalidityRef = CFDictionaryGetValue(invalidityDateDictionaryRef, kSecPropertyKeyValue);
121121
if(invalidityRef){
@@ -173,7 +173,8 @@ const char *certInKeychain() {
173173
import "C"
174174
import (
175175
"errors"
176-
"strings"
176+
"strconv"
177+
"time"
177178
"unsafe"
178179

179180
log "github.com/sirupsen/logrus"
@@ -212,7 +213,7 @@ func UninstallCertificates() error {
212213
}
213214

214215
// GetExpirationDate returns the expiration date of a certificate stored in the keychain
215-
func GetExpirationDate() (string, error) {
216+
func GetExpirationDate() (time.Time, error) {
216217
log.Infof("Retrieving certificate's expiration date")
217218
dateString := C.CString("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") // 32 characters string
218219
defer C.free(unsafe.Pointer(dateString))
@@ -222,8 +223,8 @@ func GetExpirationDate() (string, error) {
222223
utilities.UserPrompt(s, "\"OK\"", "OK", "Arduino Agent: Error retrieving expiration date")
223224
return "", errors.New(s)
224225
}
225-
date := C.GoString(dateString)
226-
return strings.ReplaceAll(date, " +0000", ""), nil
226+
dateValue, _ := strconv.Atoi(C.GoString(dateString))
227+
return time.Unix(dateValue, 0).AddDate(31, 0, 0), nil
227228
}
228229

229230
// GetDefaultBrowserName returns the name of the default browser

‎certificates/install_default.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package certificates
1919

2020
import (
2121
"errors"
22+
"time"
2223

2324
log "github.com/sirupsen/logrus"
2425

@@ -38,9 +39,9 @@ func UninstallCertificates() error {
3839
}
3940

4041
// GetExpirationDate won't do anything on unsupported Operative Systems
41-
func GetExpirationDate() (string, error) {
42+
func GetExpirationDate() (time.Time, error) {
4243
log.Warn("platform not supported for retrieving certificates expiration date")
43-
return "", errors.New("platform not supported for retrieving certificates expiration date")
44+
return time.Time{}, errors.New("platform not supported for retrieving certificates expiration date")
4445
}
4546

4647
// GetDefaultBrowserName won't do anything on unsupported Operative Systems

‎systray/systray_real.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ package systray
2222
import (
2323
"os"
2424
"runtime"
25+
"time"
2526

2627
"fyne.io/systray"
2728
cert "github.com/arduino/arduino-create-agent/certificates"
@@ -102,7 +103,7 @@ func (s *Systray) start() {
102103
if err != nil {
103104
log.Errorf("cannot get certificates expiration date, something went wrong: %s", err)
104105
}
105-
infoMsg = infoMsg + "- Certificate installed: Yes\n- Certificate trusted: Yes\n- Certificate expiration date: " + expDate
106+
infoMsg = infoMsg + "- Certificate installed: Yes\n- Certificate trusted: Yes\n- Certificate expiration date: " + expDate.Format(time.DateTime)
106107
buttons = "{\"OK\", \"Uninstall the certificate for Safari\"}"
107108
defaultButton = "Uninstall the certificate for Safari"
108109
pressedButton := utilities.UserPrompt(infoMsg, buttons, defaultButton, "Arduino Agent: Manage HTTPS certificate")

0 commit comments

Comments
 (0)
Please sign in to comment.