Source File
utils.go
Belonging Package
google.golang.org/grpc/credentials/alts
package alts
import (
)
const (
linuxProductNameFile = "/sys/class/dmi/id/product_name"
windowsCheckCommand = "powershell.exe"
windowsCheckCommandArgs = "Get-WmiObject -Class Win32_BIOS"
powershellOutputFilter = "Manufacturer"
windowsManufacturerRegex = ":(.*)"
)
type platformError string
func ( platformError) () string {
return fmt.Sprintf("%s is not supported", string())
}
runningOS = runtime.GOOS
manufacturerReader = func() (io.Reader, error) {
switch runningOS {
case "linux":
return os.Open(linuxProductNameFile)
case "windows":
:= exec.Command(windowsCheckCommand, windowsCheckCommandArgs)
, := .Output()
if != nil {
return nil,
}
for , := range strings.Split(strings.TrimSuffix(string(), "\n"), "\n") {
if strings.HasPrefix(, powershellOutputFilter) {
:= regexp.MustCompile(windowsManufacturerRegex)
:= .FindString()
= strings.TrimLeft(, ":")
return strings.NewReader(), nil
}
}
return nil, errors.New("cannot determine the machine's manufacturer")
default:
return nil, platformError(runningOS)
}
}
vmOnGCP bool
)
func () bool {
, := readManufacturer()
if os.IsNotExist() {
return false
}
if != nil {
log.Fatalf("failure to read manufacturer information: %v", )
}
:= string()
switch runningOS {
case "linux":
= strings.TrimSpace()
return == "Google" || == "Google Compute Engine"
case "windows":
= strings.Replace(, " ", "", -1)
= strings.Replace(, "\n", "", -1)
= strings.Replace(, "\r", "", -1)
return == "Google"
default:
log.Fatal(platformError(runningOS))
}
return false
}
func () ([]byte, error) {
, := manufacturerReader()
if != nil {
return nil,
}
if == nil {
return nil, errors.New("got nil reader")
}
, := ioutil.ReadAll()
if != nil {
return nil, fmt.Errorf("failed reading %v: %v", linuxProductNameFile, )
}
return , nil
}
func ( context.Context) (AuthInfo, error) {
, := peer.FromContext()
if ! {
return nil, errors.New("no Peer found in Context")
}
return AuthInfoFromPeer()
}
func ( context.Context, []string) error {
, := AuthInfoFromContext()
if != nil {
return status.Newf(codes.PermissionDenied, "The context is not an ALTS-compatible context: %v", ).Err()
}
for , := range {
if .PeerServiceAccount() == {
return nil
}
}
return status.Newf(codes.PermissionDenied, "Client %v is not authorized", .PeerServiceAccount()).Err()
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |