github.com/simpleiot/simpleiot@v0.18.3/client/auth.go (about)

     1  package client
     2  
     3  import (
     4  	"errors"
     5  	"time"
     6  
     7  	"github.com/nats-io/nats.go"
     8  	"github.com/simpleiot/simpleiot/data"
     9  )
    10  
    11  // UserCheck sends a nats message to check auth of user
    12  // This function returns user nodes and a JWT node which includes a token
    13  func UserCheck(nc *nats.Conn, email, pass string) ([]data.NodeEdge, error) {
    14  	points := data.Points{
    15  		{Type: data.PointTypeEmail, Text: email, Key: "0"},
    16  		{Type: data.PointTypePass, Text: pass, Key: "0"},
    17  	}
    18  
    19  	pointsData, err := points.ToPb()
    20  	if err != nil {
    21  		return []data.NodeEdge{}, err
    22  	}
    23  
    24  	nodeMsg, err := nc.Request("auth.user", pointsData, time.Second*20)
    25  	if err != nil {
    26  		return []data.NodeEdge{}, err
    27  	}
    28  
    29  	nodes, err := data.PbDecodeNodesRequest(nodeMsg.Data)
    30  
    31  	if err != nil {
    32  		return []data.NodeEdge{}, err
    33  	}
    34  
    35  	return nodes, nil
    36  }
    37  
    38  // GetNatsURI returns the nats URI and auth token for the SIOT server
    39  // this can be used to set up new NATS connections with different requirements
    40  // (no echo, etc)
    41  // return URI, authToken, error
    42  func GetNatsURI(nc *nats.Conn) (string, string, error) {
    43  	resp, err := nc.Request("auth.getNatsURI", nil, time.Second*1)
    44  
    45  	if err != nil {
    46  		return "", "", err
    47  	}
    48  
    49  	points, err := data.PbDecodePoints(resp.Data)
    50  	if err != nil {
    51  		return "", "", err
    52  	}
    53  
    54  	var uri, token string
    55  
    56  	for _, p := range points {
    57  		switch p.Type {
    58  		case data.PointTypeURI:
    59  			uri = p.Text
    60  		case data.PointTypeToken:
    61  			token = p.Text
    62  		}
    63  	}
    64  
    65  	if uri == "" {
    66  		return "", "", errors.New("URI not returned")
    67  	}
    68  
    69  	return uri, token, nil
    70  }