...

Source file src/golang.conradwood.net/tests/shared/rpc/createContext.go

Documentation: golang.conradwood.net/tests/shared/rpc

     1  package rpc
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"fmt"
     7  	apb "golang.conradwood.net/apis/auth"
     8  	ge "golang.conradwood.net/apis/getestservice"
     9  	"golang.conradwood.net/go-easyops/client"
    10  	"golang.conradwood.net/go-easyops/errors"
    11  	"golang.conradwood.net/go-easyops/tokens"
    12  	"golang.conradwood.net/go-easyops/utils"
    13  	"google.golang.org/grpc"
    14  )
    15  
    16  var (
    17  	easyopsClient        ge.EasyOpsClient
    18  	easyopsClientAddress = flag.String("ge_service", "localhost:5002", "go easyops service ip:port")
    19  	myServiceUser        *apb.User
    20  )
    21  
    22  const (
    23  	CTXKEY = "go_easyops_ctx_key"
    24  )
    25  
    26  func initclient() {
    27  	if easyopsClient != nil {
    28  		return
    29  	}
    30  
    31  	// NOT loadbalanced on purpose. Each "cluster", "server", "workstation" has their own instance
    32  	conn, err := grpc.Dial(
    33  		*easyopsClientAddress,
    34  		//	grpc.WithBlock(),
    35  		grpc.WithTransportCredentials(client.GetClientCreds()),
    36  	)
    37  	utils.Bail("Misconfigured ip stack. Unable to connect to easyopsService", err)
    38  	easyopsClient = ge.NewEasyOpsClient(conn)
    39  	ctx := context.Background()
    40  	ubl := ge.UserByTokenRequest{Token: tokens.GetServiceTokenParameter()}
    41  	ar, err := easyopsClient.UserByToken(ctx, &ubl)
    42  	if err != nil {
    43  		utils.Bail("Failed to get serviceaccount: \n", err) // should not happen
    44  	}
    45  	if !ar.Valid {
    46  		fmt.Printf("Invalid service token.\n")
    47  	}
    48  	myServiceUser = ar.User
    49  }
    50  
    51  func PrintContext(ctx context.Context) {
    52  	fmt.Println(ContextToString(ctx))
    53  }
    54  
    55  func ContextToString(ctx context.Context) string {
    56  	co := fromContext(ctx)
    57  	return co.PrettyString()
    58  }
    59  func ContextWithLogin(username string, password string) (context.Context, error) {
    60  	initclient()
    61  	ctx := context.Background()
    62  	ubl := ge.UserByLoginRequest{Username: username, Password: password}
    63  	ar, err := easyopsClient.UserByLogin(ctx, &ubl)
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  	if !ar.Valid {
    68  		return nil, errors.AccessDenied(ctx, "no such user: %s ", username)
    69  	}
    70  	ctx = NewContextWithUserAndService(ctx, ar.User, myServiceUser)
    71  	return ctx, nil
    72  }
    73  
    74  // adds this services' user & service accounts to context and returns it
    75  func NewContextWithUserAndService(ctx context.Context, user, service *apb.User) context.Context {
    76  	co := &contextObject{
    77  		user:    user,
    78  		service: service,
    79  	}
    80  
    81  	return co.NewContext(ctx)
    82  }
    83  

View as plain text