Files
res-downloader/core/system_windows.go
2024-12-22 16:21:30 +08:00

84 lines
2.2 KiB
Go

//go:build windows
package core
import (
"crypto/x509"
"encoding/pem"
"errors"
"golang.org/x/sys/windows"
"golang.org/x/sys/windows/registry"
"unsafe"
)
func (s *SystemSetup) setProxy() error {
key, err := registry.OpenKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Internet Settings`, registry.SET_VALUE)
if err != nil {
return err
}
defer key.Close()
err = key.SetStringValue("ProxyServer", "127.0.0.1:"+globalConfig.Port)
if err != nil {
return err
}
err = key.SetDWordValue("ProxyEnable", 1)
if err != nil {
return err
}
return nil
}
func (s *SystemSetup) unsetProxy() error {
key, err := registry.OpenKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Internet Settings`, registry.SET_VALUE)
if err != nil {
return err
}
defer key.Close()
err = key.SetDWordValue("ProxyEnable", 0)
if err != nil {
return err
}
return nil
}
func (s *SystemSetup) installCert() (string, error) {
certData, err := s.initCert()
if err != nil {
return "", errors.New("installCert1:" + err.Error())
}
block, _ := pem.Decode(certData)
if block == nil {
return "", errors.New("Failed to parse certificate PEM" + err.Error())
}
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
return "", errors.New("installCert3:" + err.Error())
}
rootStorePtr, err := windows.UTF16PtrFromString("ROOT")
if err != nil {
return "", errors.New("installCert4:" + err.Error())
}
store, err := windows.CertOpenStore(windows.CERT_STORE_PROV_SYSTEM, 0, 0, windows.CERT_SYSTEM_STORE_LOCAL_MACHINE, uintptr(unsafe.Pointer(rootStorePtr)))
if err != nil {
return "", errors.New("installCert5:" + err.Error())
}
defer windows.CertCloseStore(store, 0)
certContext, err := windows.CertCreateCertificateContext(windows.X509_ASN_ENCODING|windows.PKCS_7_ASN_ENCODING, &cert.Raw[0], uint32(len(cert.Raw)))
if err != nil {
return "", errors.New("installCert6:" + err.Error())
}
defer windows.CertFreeCertificateContext(certContext)
err = windows.CertAddCertificateContextToStore(store, certContext, windows.CERT_STORE_ADD_REPLACE_EXISTING, nil)
if err != nil {
return "", errors.New("installCert7:" + err.Error())
}
return "", nil
}