mirror of
https://github.com/putyy/res-downloader.git
synced 2026-01-12 14:14:55 +08:00
84 lines
2.2 KiB
Go
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
|
|
}
|