| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | package authimport (	"encoding/json"	"fmt"	"github.com/gravitl/netmaker/models"	"github.com/gravitl/netmaker/netclient/config"	"github.com/gravitl/netmaker/netclient/ncutils"	//    "os"	"context"	"io/ioutil"	nodepb "github.com/gravitl/netmaker/grpc"	"google.golang.org/grpc/codes"	"google.golang.org/grpc/metadata"	"google.golang.org/grpc/status")// SetJWT func will used to create the JWT while signing in and signing outfunc SetJWT(client nodepb.NodeServiceClient, network string) (context.Context, error) {	home := ncutils.GetNetclientPathSpecific()	tokentext, err := ioutil.ReadFile(home + "nettoken-" + network)	if err != nil {		err = AutoLogin(client, network)		if err != nil {			return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong with Auto Login: %v", err))		}		tokentext, err = ioutil.ReadFile(home + "nettoken-" + network)		if err != nil {			return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong: %v", err))		}	}	token := string(tokentext)	// Anything linked to this variable will transmit request headers.	md := metadata.New(map[string]string{"authorization": token})	ctx := context.Background()	ctx = metadata.NewOutgoingContext(ctx, md)	return ctx, nil}// AutoLogin - auto logins whenever client needs to request from serverfunc AutoLogin(client nodepb.NodeServiceClient, network string) error {	home := ncutils.GetNetclientPathSpecific()	cfg, err := config.ReadConfig(network)	if err != nil {		return err	}	pass, err := RetrieveSecret(network)	if err != nil {		return err	}	node := models.Node{		Password:   pass,		MacAddress: cfg.Node.MacAddress,		Network:    network,	}	data, err := json.Marshal(&node)	if err != nil {		return nil	}	login := &nodepb.Object{		Data: string(data),	}	// RPC call	res, err := client.Login(context.TODO(), login)	if err != nil {		return err	}	tokenstring := []byte(res.Data)	err = ioutil.WriteFile(home+"nettoken-"+network, tokenstring, 0644)	if err != nil {		return err	}	return err}// StoreSecret - stores auth secret locallyfunc StoreSecret(key string, network string) error {	d1 := []byte(key)	err := ioutil.WriteFile(ncutils.GetNetclientPathSpecific()+"secret-"+network, d1, 0644)	return err}// RetrieveSecret - fetches secret locallyfunc RetrieveSecret(network string) (string, error) {	dat, err := ioutil.ReadFile(ncutils.GetNetclientPathSpecific() + "secret-" + network)	return string(dat), err}// Configuraion - struct for mac and passtype Configuration struct {	MacAddress string	Password   string}
 |