auth.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package functions
  2. import (
  3. "github.com/gravitl/netmaker/netclient/config"
  4. "fmt"
  5. // "os"
  6. "context"
  7. "io/ioutil"
  8. "google.golang.org/grpc/metadata"
  9. "google.golang.org/grpc/status"
  10. "google.golang.org/grpc/codes"
  11. nodepb "github.com/gravitl/netmaker/grpc"
  12. )
  13. // CreateJWT func will used to create the JWT while signing in and signing out
  14. func SetJWT(client nodepb.NodeServiceClient) (context.Context, error) {
  15. //home, err := os.UserHomeDir()
  16. home := "/etc/netclient"
  17. tokentext, err := ioutil.ReadFile(home + "/.nettoken")
  18. if err != nil {
  19. fmt.Println("Error reading token. Logging in to retrieve new token.")
  20. err = AutoLogin(client)
  21. if err != nil {
  22. return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong with Auto Login: %v", err))
  23. }
  24. tokentext, err = ioutil.ReadFile(home + "/.nettoken")
  25. if err != nil {
  26. return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong: %v", err))
  27. }
  28. }
  29. token := string(tokentext)
  30. // Anything linked to this variable will transmit request headers.
  31. md := metadata.New(map[string]string{"authorization": token})
  32. ctx := context.Background()
  33. ctx = metadata.NewOutgoingContext(ctx, md)
  34. return ctx, nil
  35. }
  36. func AutoLogin(client nodepb.NodeServiceClient) error {
  37. //home, err := os.UserHomeDir()
  38. home := "/etc/netclient"
  39. nodecfg := config.Config.Node
  40. login := &nodepb.LoginRequest{
  41. Password: nodecfg.Password,
  42. Macaddress: nodecfg.MacAddress,
  43. }
  44. // RPC call
  45. res, err := client.Login(context.TODO(), login)
  46. if err != nil {
  47. return err
  48. }
  49. tokenstring := []byte(res.Accesstoken)
  50. err = ioutil.WriteFile(home + "/.nettoken", tokenstring, 0644)
  51. if err != nil {
  52. return err
  53. }
  54. return err
  55. }
  56. type Configuration struct {
  57. MacAddress string
  58. Password string
  59. }