diff --git a/logic/enrollmentkey.go b/logic/enrollmentkey.go index 778f28de..6d865e85 100644 --- a/logic/enrollmentkey.go +++ b/logic/enrollmentkey.go @@ -117,7 +117,7 @@ func TryToUseEnrollmentKey(k *models.EnrollmentKey) bool { // Tokenize - tokenizes an enrollment key to be used via registration // and attaches it to the Token field on the struct func Tokenize(k *models.EnrollmentKey, serverAddr string) error { - if len(serverAddr) == 0 { + if len(serverAddr) == 0 || k == nil { return EnrollmentKeyErrors.FailedToTokenize } newToken := models.EnrollmentToken{ @@ -128,8 +128,9 @@ func Tokenize(k *models.EnrollmentKey, serverAddr string) error { if err != nil { return err } - k.Token = b64.StdEncoding.EncodeToString([]byte(data)) + k.Token = b64.StdEncoding.EncodeToString(data) return nil + } // DeTokenize - detokenizes a base64 encoded string diff --git a/logic/enrollmentkey_test.go b/logic/enrollmentkey_test.go index ddee0d43..f89f7f70 100644 --- a/logic/enrollmentkey_test.go +++ b/logic/enrollmentkey_test.go @@ -1,6 +1,7 @@ package logic import ( + "fmt" "testing" "time" @@ -127,3 +128,73 @@ func TestUsability_EnrollmentKey(t *testing.T) { func removeAllEnrollments() { database.DeleteAllRecords(database.ENROLLMENT_KEYS_TABLE_NAME) } + +//Test that cheks if it can tokenize +//Test that cheks if it can't tokenize + +func TestTokenize_EnrollmentKeys(t *testing.T) { + database.InitializeDatabase() + defer database.CloseDB() + newKey, _ := CreateEnrollmentKey(0, time.Time{}, []string{"mynet", "skynet"}, nil, true) + fmt.Println(newKey.Value) + const defaultValue = "MwEtpqTSrGd4HTO3ahYDTExKAehh6udJ" + const b64value = "eyJzZXJ2ZXIiOiJhcGkubXlzZXJ2ZXIuY29tIiwidmFsdWUiOiJNd0V0cHFUU3JHZDRIVE8zYWhZRFRFeEtBZWhoNnVkSiJ9" + const serverAddr = "api.myserver.com" + t.Run("Can_Not_Tokenize_Nil_Key", func(t *testing.T) { + err := Tokenize(nil, "ServerAddress") + assert.NotNil(t, err) + assert.Equal(t, err, EnrollmentKeyErrors.FailedToTokenize) + }) + t.Run("Can_Not_Tokenize_Empty_Server_Address", func(t *testing.T) { + err := Tokenize(newKey, "") + assert.NotNil(t, err) + assert.Equal(t, err, EnrollmentKeyErrors.FailedToTokenize) + }) + + t.Run("Can_Tokenize", func(t *testing.T) { + err := Tokenize(newKey, serverAddr) + assert.Nil(t, err) + assert.True(t, len(newKey.Token) > 0) + }) + + t.Run("Is_Correct_B64_Token", func(t *testing.T) { + newKey.Value = defaultValue + err := Tokenize(newKey, serverAddr) + assert.Nil(t, err) + assert.Equal(t, newKey.Token, b64value) + }) + removeAllEnrollments() +} + +func TestDeTokenize_EnrollmentKeys(t *testing.T) { + database.InitializeDatabase() + defer database.CloseDB() + newKey, _ := CreateEnrollmentKey(0, time.Time{}, []string{"mynet", "skynet"}, nil, true) + fmt.Println(newKey.Value) + const defaultValue = "MwEtpqTSrGd4HTO3ahYDTExKAehh6udJ" + const b64Value = "eyJzZXJ2ZXIiOiJhcGkubXlzZXJ2ZXIuY29tIiwidmFsdWUiOiJNd0V0cHFUU3JHZDRIVE8zYWhZRFRFeEtBZWhoNnVkSiJ9" + const serverAddr = "api.myserver.com" + + t.Run("Can_Not_DeTokenize", func(t *testing.T) { + value, err := DeTokenize("") + assert.Nil(t, value) + assert.NotNil(t, err) + assert.Equal(t, err, EnrollmentKeyErrors.FailedToDeTokenize) + }) + t.Run("Can_Not_Find_Key", func(t *testing.T) { + value, err := DeTokenize(b64Value) + assert.Nil(t, value) + assert.NotNil(t, err) + assert.Equal(t, err, EnrollmentKeyErrors.NoKeyFound) + }) + t.Run("Can_DeTokenize", func(t *testing.T) { + err := Tokenize(newKey, serverAddr) + assert.Nil(t, err) + output, err := DeTokenize(newKey.Token) + assert.Nil(t, err) + assert.NotNil(t, output) + assert.Equal(t, newKey.Value, output.Value) + }) + + removeAllEnrollments() +} diff --git a/models/enrollment_key.go b/models/enrollment_key.go index ae89ee48..1a58bdc1 100644 --- a/models/enrollment_key.go +++ b/models/enrollment_key.go @@ -7,7 +7,7 @@ import ( // EnrollmentToken - the tokenized version of an enrollmentkey; // to be used for host registration type EnrollmentToken struct { - Server string `json:"value"` + Server string `json:"server"` Value string `json:"value"` }