mirror of https://github.com/portainer/portainer
				
				
				
			
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
package jwt
 | 
						|
 | 
						|
import (
 | 
						|
	i "github.com/portainer/portainer/api/internal/testhelpers"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/dgrijalva/jwt-go"
 | 
						|
	portainer "github.com/portainer/portainer/api"
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
)
 | 
						|
 | 
						|
func TestGenerateSignedToken(t *testing.T) {
 | 
						|
	dataStore := i.NewDatastore(i.WithSettingsService(&portainer.Settings{}))
 | 
						|
	svc, err := NewService("24h", dataStore)
 | 
						|
	assert.NoError(t, err, "failed to create a copy of service")
 | 
						|
 | 
						|
	token := &portainer.TokenData{
 | 
						|
		Username: "Joe",
 | 
						|
		ID:       1,
 | 
						|
		Role:     1,
 | 
						|
	}
 | 
						|
	expiresAt := time.Now().Add(1 * time.Hour).Unix()
 | 
						|
 | 
						|
	generatedToken, err := svc.generateSignedToken(token, expiresAt, defaultScope)
 | 
						|
	assert.NoError(t, err, "failed to generate a signed token")
 | 
						|
 | 
						|
	parsedToken, err := jwt.ParseWithClaims(generatedToken, &claims{}, func(token *jwt.Token) (interface{}, error) {
 | 
						|
		return svc.secrets[defaultScope], nil
 | 
						|
	})
 | 
						|
	assert.NoError(t, err, "failed to parse generated token")
 | 
						|
 | 
						|
	tokenClaims, ok := parsedToken.Claims.(*claims)
 | 
						|
	assert.Equal(t, true, ok, "failed to claims out of generated ticket")
 | 
						|
 | 
						|
	assert.Equal(t, token.Username, tokenClaims.Username)
 | 
						|
	assert.Equal(t, int(token.ID), tokenClaims.UserID)
 | 
						|
	assert.Equal(t, int(token.Role), tokenClaims.Role)
 | 
						|
	assert.Equal(t, expiresAt, tokenClaims.ExpiresAt)
 | 
						|
}
 | 
						|
 | 
						|
func TestGenerateSignedToken_InvalidScope(t *testing.T) {
 | 
						|
	dataStore := i.NewDatastore(i.WithSettingsService(&portainer.Settings{}))
 | 
						|
	svc, err := NewService("24h", dataStore)
 | 
						|
	assert.NoError(t, err, "failed to create a copy of service")
 | 
						|
 | 
						|
	token := &portainer.TokenData{
 | 
						|
		Username: "Joe",
 | 
						|
		ID:       1,
 | 
						|
		Role:     1,
 | 
						|
	}
 | 
						|
	expiresAt := time.Now().Add(1 * time.Hour).Unix()
 | 
						|
 | 
						|
	_, err = svc.generateSignedToken(token, expiresAt, "testing")
 | 
						|
	assert.Error(t, err)
 | 
						|
	assert.Equal(t, "invalid scope: testing", err.Error())
 | 
						|
}
 |