Skip to content

Commit

Permalink
add auth token test
Browse files Browse the repository at this point in the history
  • Loading branch information
djelusic committed Mar 9, 2022
1 parent 3ca9ec2 commit dc7dbfb
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 17 deletions.
4 changes: 3 additions & 1 deletion cli/controller/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@ func NodeLogin(a NodeLoginArgs) error {
return err
}
w := fs.Workspace()
w.AddNodeToken(t)
if err := w.AddNodeToken(t); err != nil {
return err
}
return fs.Store()
}

Expand Down
4 changes: 3 additions & 1 deletion cli/controller/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,9 @@ func (c *Setup) create(n *domain.Node) error {
infrastructureDuration := tmr()

if n.GithubAuthEnabled() {
c.store.Workspace().AddNodeToken(rsp.Token)
if err := c.store.Workspace().AddNodeToken(rsp.Token); err != nil {
return err
}
}

log.Event(domain.Event{NodeCreate: &domain.NodeEvent{
Expand Down
4 changes: 2 additions & 2 deletions domain/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,11 @@ func (n *Node) AuthToken() (string, error) {
if t == "" {
return "", &TokenExpiredError{}
}
exp, err := token.ExpiresAt(t)
exp, err := token.ExpiresIn(t)
if err != nil {
return "", err
}
if exp.Before(time.Now()) {
if exp < 0 {
return "", &TokenExpiredError{}
}
return t, nil
Expand Down
53 changes: 46 additions & 7 deletions domain/node_test.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package domain_test
package domain

import (
"testing"
"time"

"github.com/mantil-io/mantil/domain"
"github.com/kataras/jwt"
"github.com/mantil-io/mantil/kit/token"
"github.com/stretchr/testify/require"
)

func TestNodeStore(t *testing.T) {
ns := &domain.NodeStore{}
ns := &NodeStore{}
_, privateKey, _ := token.KeyPair()

tk := nodeToken(&domain.Node{
tk := nodeToken(&Node{
Name: "node1",
Version: "1",
}, privateKey)
Expand Down Expand Up @@ -44,7 +44,7 @@ func TestNodeStore(t *testing.T) {
tkn := ns.Token("node1")
require.Equal(t, tk, tkn)

err = ns.UpsertNodeToken(nodeToken(&domain.Node{
err = ns.UpsertNodeToken(nodeToken(&Node{
Name: "node1",
Version: "2",
}, privateKey))
Expand All @@ -66,8 +66,47 @@ func TestNodeStore(t *testing.T) {
require.Nil(t, n)
}

func nodeToken(n *domain.Node, privateKey string) string {
c := domain.AccessTokenClaims{
func TestAuthToken(t *testing.T) {
// single developer auth
publicKey, privateKey, _ := token.KeyPair()
n := &Node{
Name: "node-sd",
Keys: NodeKeys{
Public: publicKey,
Private: privateKey,
},
workspace: &Workspace{
ID: "workspace",
},
}
token, err := n.AuthToken()
require.NoError(t, err)
require.NotEmpty(t, token)

// github auth
w := &Workspace{}
n = &Node{
Name: "node-gh",
GithubUser: "gh-user",
workspace: w,
}
token = nodeToken(n, privateKey)
err = w.AddNodeToken(token)
require.NoError(t, err)

tk, err := n.AuthToken()
require.NoError(t, err)
require.Equal(t, token, tk)

jwt.Clock = func() time.Time {
return time.Now().Add(2 * time.Hour)
}
_, err = n.AuthToken()
require.Error(t, err)
}

func nodeToken(n *Node, privateKey string) string {
c := AccessTokenClaims{
Node: n,
}
t, _ := token.JWT(privateKey, &c, time.Hour)
Expand Down
4 changes: 2 additions & 2 deletions domain/workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ func newWorkspace() *Workspace {
}
}

func (w *Workspace) AddNodeToken(token string) {
w.NodeStore.UpsertNodeToken(token)
func (w *Workspace) AddNodeToken(token string) error {
return w.NodeStore.UpsertNodeToken(token)
}

func (w *Workspace) AddNode(n *Node) {
Expand Down
7 changes: 3 additions & 4 deletions kit/token/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,12 @@ func Verify(token string, publicKey string, claims interface{}) error {
return verifiedToken.Claims(&claims)
}

func ExpiresAt(token string) (*time.Time, error) {
func ExpiresIn(token string) (time.Duration, error) {
var claims jwt.Claims
if err := Decode(token, &claims); err != nil {
return nil, err
return -1, err
}
e := claims.ExpiresAt()
return &e, nil
return claims.Timeleft(), nil
}

func Decode(token string, claims interface{}) error {
Expand Down

0 comments on commit dc7dbfb

Please sign in to comment.