-
Notifications
You must be signed in to change notification settings - Fork 174
Expand file tree
/
Copy pathcertificate_check_callback.go
More file actions
54 lines (47 loc) · 1.14 KB
/
certificate_check_callback.go
File metadata and controls
54 lines (47 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package git
import (
"log"
git2go "github.com/libgit2/git2go/v33"
"github.com/pkg/errors"
)
func certificateCheckCallback(logger *log.Logger) git2go.CertificateCheckCallback {
return func(cert *git2go.Certificate, valid bool, hostname string) error {
if valid {
return nil
}
if cert.Kind == git2go.CertificateX509 {
if cert.X509 != nil {
err := cert.X509.VerifyHostname(hostname)
if err != nil {
msg := "host name could not be verified"
logger.Println(msg)
return errors.Wrap(err, msg)
}
}
} else if cert.Kind == git2go.CertificateHostkey {
if cert.Hostkey.Kind == git2go.HostkeyMD5 {
if !isByteArrayEmpty(cert.Hostkey.HashMD5[:]) {
msg := "invalid host key MD5"
logger.Println(msg)
return errors.New(msg)
}
} else if cert.Hostkey.Kind == git2go.HostkeySHA1 {
if !isByteArrayEmpty(cert.Hostkey.HashSHA1[:]) {
msg := "invalid host key SHA1"
logger.Println(msg)
return errors.New(msg)
}
}
}
return nil
}
}
func isByteArrayEmpty(byteArray []byte) bool {
isEmpty := true
for _, v := range byteArray {
if v != 0 {
isEmpty = false
}
}
return isEmpty
}