Skip to content

Commit

Permalink
fix: Validate Control Center feature when used (#20024)
Browse files Browse the repository at this point in the history
* fix: Validate Control Center feature when used

Changes production build info to validate Control Center feature only when VaadinActuatorEndpoint is in the class path. Class will be included with `control-center-starter` Vaadin platform dependency.

Fixes: #20013

* chore: formatting
  • Loading branch information
tltv authored Sep 23, 2024
1 parent 30d9351 commit 387f868
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -766,11 +766,13 @@ public static void updateBuildFile(PluginAdapterBuild adapter,
adapter.logInfo("Daily Active User tracking enabled");
buildInfo.put(Constants.DAU_TOKEN, true);
}
if (LicenseChecker.isValidLicense("vaadin-commercial-cc-client",
null, BuildType.PRODUCTION)) {
adapter.logInfo("Premium Features are enabled");
buildInfo.put(Constants.PREMIUM_FEATURES, true);
}
}
if (isControlCenterAvailable(adapter.getClassFinder())
&& LicenseChecker.isValidLicense(
"vaadin-commercial-cc-client", null,
BuildType.PRODUCTION)) {
adapter.logInfo("Premium Features are enabled");
buildInfo.put(Constants.PREMIUM_FEATURES, true);
}

FileUtils.write(tokenFile, JsonUtil.stringify(buildInfo, 2) + "\n",
Expand All @@ -780,6 +782,19 @@ public static void updateBuildFile(PluginAdapterBuild adapter,
}
}

private static boolean isControlCenterAvailable(ClassFinder classFinder) {
if (classFinder == null) {
return false;
}
try {
classFinder.loadClass(
"com.vaadin.controlcenter.starter.actuate.endpoint.VaadinActuatorEndpoint");
return true;
} catch (ClassNotFoundException e) {
return false;
}
}

/**
* Delete the build token file. This is used with dev-bundle build as token
* file should never be added to the package.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright 2000-2024 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package com.vaadin.controlcenter.starter.actuate.endpoint;

/**
* Fake class to have mojo tests see Control Center.
*/
public class VaadinActuatorEndpoint {
}
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,14 @@ public void updateBuildFile_tokenExisting_licenseRequiredAndIsPremiumLike_premiu

addPremiumFeatureAndDAUFlagTrue(tokenFile);

ClassLoader classLoader = new URLClassLoader(
new URL[] { new File(baseDir, "target/test-classes/").toURI()
.toURL() },
BuildFrontendUtilTest.class.getClassLoader());
ClassFinder classFinder = new ClassFinder.DefaultClassFinder(
classLoader);
Mockito.when(adapter.getClassFinder()).thenReturn(classFinder);

withMockedLicenseChecker(true, () -> {
BuildFrontendUtil.updateBuildFile(adapter, true);
Assert.assertTrue("Token file should still exist",
Expand Down Expand Up @@ -520,7 +528,8 @@ public void runNodeUpdater_generateFeatureFlagsJsFile() throws Exception {
File generatedFeatureFlagsFile = new File(adapter.generatedTsFolder(),
FEATURE_FLAGS_FILE_NAME);
String featureFlagsJs = Files
.readString(generatedFeatureFlagsFile.toPath());
.readString(generatedFeatureFlagsFile.toPath())
.replace("\r\n", "\n");

Assert.assertTrue("Example feature flag is not set",
featureFlagsJs.contains(
Expand Down

0 comments on commit 387f868

Please sign in to comment.