...
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
32 conn, err := grpc.Dial(
33 *easyopsClientAddress,
34
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)
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
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