Skip to content

Commit d3755dd

Browse files
authored
feat: Support offline licensing for all plugins from a specific team (#1517)
Co-authored-by: Kemal Hadimli <[email protected]>
1 parent 54baf21 commit d3755dd

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

premium/offline.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ func validateLicenseFile(logger zerolog.Logger, meta plugin.Meta, licenseFile st
104104

105105
if len(l.Plugins) > 0 {
106106
ref := strings.Join([]string{meta.Team, string(meta.Kind), meta.Name}, "/")
107-
if !slices.Contains(l.Plugins, ref) {
107+
teamRef := meta.Team + "/*"
108+
if !slices.Contains(l.Plugins, ref) && !slices.Contains(l.Plugins, teamRef) {
108109
return ErrLicenseNotApplicable
109110
}
110111
}

premium/offline_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,41 @@ func TestValidateSpecificLicenseMultiFile(t *testing.T) {
113113
t.Run("NotApplicable", licenseTest(dir, invalidMeta, validTime, ErrLicenseNotApplicable))
114114
}
115115

116+
func TestValidateTeamLicense(t *testing.T) {
117+
publicKey = `de452e6028fe488f56ee0dfcf5b387ee773f03d24de66f00c40ec5b17085c549`
118+
licData := `{"license":"eyJsaWNlbnNlZF90byI6IlVOTElDRU5TRUQgVEVTVCIsInBsdWdpbnMiOlsidGVzdC10ZWFtLyoiXSwiaXNzdWVkX2F0IjoiMjAyNC0wMi0wNVQxNjozOTozMy4zMzkxMjZaIiwidmFsaWRfZnJvbSI6IjIwMjQtMDItMDVUMTY6Mzk6MzMuMzM5MTI2WiIsImV4cGlyZXNfYXQiOiIyMDI0LTAyLTA2VDE2OjM5OjMzLjMzOTEyNloifQ==","signature":"cba85dcbd48d909f92d6e84d1d56b47075484efb2a7db1c478fc09659bb498e2a761add3c743c2d9a50b82b29b1730600cd8f68d6571896ca7d08f3107751e07"}`
119+
validTime := time.Date(2024, 2, 5, 18, 0, 0, 0, time.UTC)
120+
expiredTime := time.Date(2024, 2, 6, 18, 0, 0, 0, time.UTC)
121+
invalidMeta := plugin.Meta{Team: "cloudquery", Kind: "source", Name: "test"}
122+
validMeta1 := plugin.Meta{Team: "test-team", Kind: "source", Name: "some-plugin"}
123+
validMeta2 := plugin.Meta{Team: "test-team", Kind: "destination", Name: "some-plugin2"}
124+
125+
t.Run("SingleFile", func(t *testing.T) {
126+
dir := t.TempDir()
127+
f := filepath.Join(dir, "testlicense.cqlicense")
128+
if err := os.WriteFile(f, []byte(licData), 0644); err != nil {
129+
require.NoError(t, err)
130+
}
131+
132+
t.Run("Expired1", licenseTest(f, validMeta1, expiredTime, ErrLicenseExpired))
133+
t.Run("Expired2", licenseTest(f, validMeta2, expiredTime, ErrLicenseExpired))
134+
t.Run("Success1", licenseTest(f, validMeta1, validTime, nil))
135+
t.Run("Success2", licenseTest(f, validMeta2, validTime, nil))
136+
t.Run("NotApplicable", licenseTest(f, invalidMeta, validTime, ErrLicenseNotApplicable))
137+
})
138+
t.Run("SingleDir", func(t *testing.T) {
139+
dir := t.TempDir()
140+
if err := os.WriteFile(filepath.Join(dir, "testlicense.cqlicense"), []byte(licData), 0644); err != nil {
141+
require.NoError(t, err)
142+
}
143+
t.Run("Expired1", licenseTest(dir, validMeta1, expiredTime, ErrLicenseExpired))
144+
t.Run("Expired2", licenseTest(dir, validMeta2, expiredTime, ErrLicenseExpired))
145+
t.Run("Success1", licenseTest(dir, validMeta1, validTime, nil))
146+
t.Run("Success2", licenseTest(dir, validMeta2, validTime, nil))
147+
t.Run("NotApplicable", licenseTest(dir, invalidMeta, validTime, ErrLicenseNotApplicable))
148+
})
149+
}
150+
116151
func licenseTest(inputPath string, meta plugin.Meta, timeIs time.Time, expectError error) func(t *testing.T) {
117152
return func(t *testing.T) {
118153
timeFunc = func() time.Time {

0 commit comments

Comments
 (0)