github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/grpc/interop/alts/server/server.go (about)

     1  /*
     2   *
     3   * Copyright 2018 gRPC authors.
     4   *
     5   * Licensed under the Apache License, Version 2.0 (the "License");
     6   * you may not use this file except in compliance with the License.
     7   * You may obtain a copy of the License at
     8   *
     9   *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   */
    18  
    19  // This binary can only run on Google Cloud Platform (GCP).
    20  package main
    21  
    22  import (
    23  	"context"
    24  	"flag"
    25  	"net"
    26  	"strings"
    27  
    28  	grpc "github.com/hxx258456/ccgo/grpc"
    29  	"github.com/hxx258456/ccgo/grpc/credentials/alts"
    30  	"github.com/hxx258456/ccgo/grpc/grpclog"
    31  	"github.com/hxx258456/ccgo/grpc/interop"
    32  	"github.com/hxx258456/ccgo/grpc/tap"
    33  
    34  	testgrpc "github.com/hxx258456/ccgo/grpc/interop/grpc_testing"
    35  )
    36  
    37  const (
    38  	udsAddrPrefix = "unix:"
    39  )
    40  
    41  var (
    42  	hsAddr     = flag.String("alts_handshaker_service_address", "", "ALTS handshaker gRPC service address")
    43  	serverAddr = flag.String("server_address", ":8080", "The address on which the server is listening. Only two types of addresses are supported, 'host:port' and 'unix:/path'.")
    44  
    45  	logger = grpclog.Component("interop")
    46  )
    47  
    48  func main() {
    49  	flag.Parse()
    50  
    51  	// If the server address starts with `unix:`, then we have a UDS address.
    52  	network := "tcp"
    53  	address := *serverAddr
    54  	if strings.HasPrefix(address, udsAddrPrefix) {
    55  		network = "unix"
    56  		address = strings.TrimPrefix(address, udsAddrPrefix)
    57  	}
    58  	lis, err := net.Listen(network, address)
    59  	if err != nil {
    60  		logger.Fatalf("gRPC Server: failed to start the server at %v: %v", address, err)
    61  	}
    62  	opts := alts.DefaultServerOptions()
    63  	if *hsAddr != "" {
    64  		opts.HandshakerServiceAddress = *hsAddr
    65  	}
    66  	altsTC := alts.NewServerCreds(opts)
    67  	grpcServer := grpc.NewServer(grpc.Creds(altsTC), grpc.InTapHandle(authz))
    68  	testgrpc.RegisterTestServiceServer(grpcServer, interop.NewTestServer())
    69  	grpcServer.Serve(lis)
    70  }
    71  
    72  // authz shows how to access client information at the server side to perform
    73  // application-layer authorization checks.
    74  func authz(ctx context.Context, info *tap.Info) (context.Context, error) {
    75  	authInfo, err := alts.AuthInfoFromContext(ctx)
    76  	if err != nil {
    77  		return nil, err
    78  	}
    79  	// Access all alts.AuthInfo data:
    80  	logger.Infof("authInfo.ApplicationProtocol() = %v", authInfo.ApplicationProtocol())
    81  	logger.Infof("authInfo.RecordProtocol() = %v", authInfo.RecordProtocol())
    82  	logger.Infof("authInfo.SecurityLevel() = %v", authInfo.SecurityLevel())
    83  	logger.Infof("authInfo.PeerServiceAccount() = %v", authInfo.PeerServiceAccount())
    84  	logger.Infof("authInfo.LocalServiceAccount() = %v", authInfo.LocalServiceAccount())
    85  	logger.Infof("authInfo.PeerRPCVersions() = %v", authInfo.PeerRPCVersions())
    86  	logger.Infof("info.FullMethodName = %v", info.FullMethodName)
    87  	return ctx, nil
    88  }