From e04975ff682c6f5264fcfceb2f449ac7f121b876 Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Sat, 4 Jul 2020 20:19:13 +0300 Subject: [PATCH 1/5] Bug 564818 API revision | conditions | key keepers review side work: extend documentation Signed-off-by: elena.parovyshnaya --- .../passage/lic/internal/api/io/DigestExpectation.java | 3 ++- .../eclipse/passage/lic/base/io/LicensingPaths.java | 10 ++++------ .../internal/base/io/FileNameFromLicensedProduct.java | 9 ++++++--- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/DigestExpectation.java b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/DigestExpectation.java index 162196921..fc9953694 100644 --- a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/DigestExpectation.java +++ b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/DigestExpectation.java @@ -15,7 +15,8 @@ public interface DigestExpectation { /** - * @return is there is any expectation at all + * @return {@code true} if there is any expectation at all, {@code false} if + * digest is not intended to be used for a key verification */ boolean expected(); diff --git a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/base/io/LicensingPaths.java b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/base/io/LicensingPaths.java index d4e3341be..1a1b39912 100644 --- a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/base/io/LicensingPaths.java +++ b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/base/io/LicensingPaths.java @@ -18,11 +18,9 @@ import java.nio.file.Paths; import org.eclipse.passage.lic.api.LicensingConfiguration; -import org.eclipse.passage.lic.internal.base.io.PassageFileExtension.LicenseDecrypted; -import org.eclipse.passage.lic.internal.base.io.PassageFileExtension.LicenseEncrypted; -import org.eclipse.passage.lic.internal.base.io.PassageFileExtension.PublicKey; import org.eclipse.passage.lic.internal.base.io.FileNameFromLicensedProduct; import org.eclipse.passage.lic.internal.base.io.LicensingFolder; +import org.eclipse.passage.lic.internal.base.io.PassageFileExtension; import org.eclipse.passage.lic.internal.base.io.PathFromLicensedProduct; import org.eclipse.passage.lic.internal.base.io.PathFromLocalUrl; @@ -39,17 +37,17 @@ public final class LicensingPaths { public static final String FOLDER_LICENSING_BASE = ".passage"; //$NON-NLS-1$ /** - * @deprecated use {@link LicenseDecrypted} + * @deprecated use {@link PassageFileExtension.LicenseDecrypted} */ @Deprecated public static final String EXTENSION_LICENSE_DECRYPTED = ".lic"; //$NON-NLS-1$ /** - * @deprecated use {@link LicenseEncrypted} + * @deprecated use {@link PassageFileExtension.LicenseEncrypted} */ @Deprecated public static final String EXTENSION_LICENSE_ENCRYPTED = ".licen"; //$NON-NLS-1$ /** - * @deprecated use {@link PublicKey} + * @deprecated use {@link PassageFileExtension.PublicKey} */ @Deprecated public static final String EXTENSION_PRODUCT_PUBLIC = ".pub"; //$NON-NLS-1$ diff --git a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/io/FileNameFromLicensedProduct.java b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/io/FileNameFromLicensedProduct.java index 26a6d7244..ab9a9adc2 100644 --- a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/io/FileNameFromLicensedProduct.java +++ b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/io/FileNameFromLicensedProduct.java @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.passage.lic.internal.base.io; +import java.util.Objects; import java.util.function.Supplier; import org.eclipse.passage.lic.internal.api.LicensedProduct; @@ -19,9 +20,11 @@ public final class FileNameFromLicensedProduct implements Supplier { private final LicensedProduct product; - private final String extension; + private final PassageFileExtension extension; - public FileNameFromLicensedProduct(LicensedProduct product, String extension) { + public FileNameFromLicensedProduct(LicensedProduct product, PassageFileExtension extension) { + Objects.requireNonNull(product, "FileNameFromLicensedProduct::product"); //$NON-NLS-1$ + Objects.requireNonNull(extension, "FileNameFromLicensedProduct::extension"); //$NON-NLS-1$ this.product = product; this.extension = extension; } @@ -31,7 +34,7 @@ public String get() { return String.format("%s_%s%s", //$NON-NLS-1$ product.identifier(), // product.version(), // - extension); + extension.get()); } } From bb421f4f61eb470c4bb24fc4fdc0d99c5e03906e Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Sat, 4 Jul 2020 20:27:43 +0300 Subject: [PATCH 2/5] Bug 564818 API revision | conditions | key keepers review - reimplement BundleKeykeeper over the new (1.0) interfaces - deprecate obsolete implementation Signed-off-by: elena.parovyshnaya --- .../lic/equinox/io/BundleKeyKeeper.java | 11 ++- .../equinox/i18n/EquinoxMessages.java | 4 + .../equinox/i18n/EquinoxMessages.properties | 2 + .../internal/equinox/io/BundleKeyKeeper.java | 88 +++++++++++++++++++ .../equinox/io/EquinoxKeyKeeperRegistry.java | 4 + .../io/EquinoxStreamCodecRegistry.java | 4 + 6 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/BundleKeyKeeper.java diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/equinox/io/BundleKeyKeeper.java b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/equinox/io/BundleKeyKeeper.java index 778dae86c..525c32955 100644 --- a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/equinox/io/BundleKeyKeeper.java +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/equinox/io/BundleKeyKeeper.java @@ -12,7 +12,8 @@ *******************************************************************************/ package org.eclipse.passage.lic.equinox.io; -import static org.eclipse.passage.lic.base.io.LicensingPaths.*; +import static org.eclipse.passage.lic.base.io.LicensingPaths.EXTENSION_PRODUCT_PUBLIC; +import static org.eclipse.passage.lic.base.io.LicensingPaths.composeFileName; import java.io.FileNotFoundException; import java.io.IOException; @@ -26,12 +27,16 @@ import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; +/** + * @deprecated use internal (1.0) BundleKeyKeeper + */ +@Deprecated public class BundleKeyKeeper implements KeyKeeper { protected static final String PATH_DEFAULT = "OSGI-INF/"; //$NON-NLS-1$ - + private ComponentContext componentContext; - + @Activate public void activate(ComponentContext context) { this.componentContext = context; diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.java b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.java index c2b6d7d78..b8360be67 100644 --- a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.java +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.java @@ -30,6 +30,10 @@ public class EquinoxMessages extends NLS { public static String ComponentConfigurationResolver_error_invalid_component_rt; public static String ComponentRequirements_error_no_resource; public static String ComponentRequirements_requirement_for_resource; + public static String BundleKeyKeeper_failed_to_find_file; + + public static String BundleKeyKeeper_failed_to_open_stream; + public static String BundleRequirements_error_bundle_context; public static String BundleRequirements_no_context; diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.properties b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.properties index 3af0fd5e0..a84427c80 100644 --- a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.properties +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.properties @@ -23,6 +23,8 @@ ComponentConfigurationResolver_error_invalid_bundle_context=Unable to extract co ComponentConfigurationResolver_error_invalid_component_rt=Unable to extract configuration requirements: invalid ServiceComponentRuntime ComponentRequirements_error_no_resource=Unable to extract configuration requirements: invalid {0} ComponentRequirements_requirement_for_resource={0} for {1} OSGi-component +BundleKeyKeeper_failed_to_find_file=Filed to find public key for product [%s] in path [%s] of bundle [%s] +BundleKeyKeeper_failed_to_open_stream=Filed to open a stream from public key for product [%s] by url [%s] BundleRequirements_no_context=Bundle context for {0} OSGi-component BundleRequirements_error_bundle_context=Unable to extract configuration requirements: invalid BundleContext BundleVendor_unknown_vendor=Unknown vendor diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/BundleKeyKeeper.java b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/BundleKeyKeeper.java new file mode 100644 index 000000000..c66ab4e2a --- /dev/null +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/BundleKeyKeeper.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.equinox.io; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Supplier; + +import org.eclipse.passage.lic.internal.api.LicensedProduct; +import org.eclipse.passage.lic.internal.api.LicensingException; +import org.eclipse.passage.lic.internal.api.io.KeyKeeper; +import org.eclipse.passage.lic.internal.base.io.FileNameFromLicensedProduct; +import org.eclipse.passage.lic.internal.base.io.PassageFileExtension; +import org.eclipse.passage.lic.internal.equinox.i18n.EquinoxMessages; +import org.osgi.framework.Bundle; + +/** + * Look for the product's public key into OSGI-INF folder of the configured + * bundle. + */ +@SuppressWarnings("restriction") +public final class BundleKeyKeeper implements KeyKeeper { + + private final Supplier product; + private final Bundle bundle; + + public BundleKeyKeeper(Supplier product, Bundle bundle) { + Objects.requireNonNull(product, "BundleKeyKeeper::product"); //$NON-NLS-1$ + Objects.requireNonNull(bundle, "BundleKeyKeeper::bundle"); //$NON-NLS-1$ + this.product = product; + this.bundle = bundle; + } + + @Override + public LicensedProduct id() { + return product.get(); + } + + @Override + public InputStream productPublicKey() throws LicensingException { + URL resource = resource(Paths.get("OSGI-INF").resolve(keyFile())); //$NON-NLS-1$ + try { + return resource.openStream(); + } catch (IOException e) { + throw new LicensingException(String.format(// + EquinoxMessages.BundleKeyKeeper_failed_to_open_stream, // + product.get(), // + resource.toString())); + } + } + + /** + * Either returns functional URL for the given {@code path} under the configured + * {@code bundle}, or fails with properly explained + * {@linkplain LicensingException} + */ + private URL resource(Path path) throws LicensingException { + Optional url = Optional.ofNullable(bundle.getResource(path.toString())); + if (!url.isPresent()) { + throw new LicensingException(String.format(// + EquinoxMessages.BundleKeyKeeper_failed_to_find_file, // + product.get(), // + path.toString(), // + bundle.getSymbolicName())); + } + return url.get(); + } + + private String keyFile() { + return new FileNameFromLicensedProduct(product.get(), new PassageFileExtension.PublicKey()).get(); + } + +} diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/EquinoxKeyKeeperRegistry.java b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/EquinoxKeyKeeperRegistry.java index ab6b662d3..94b792e8c 100644 --- a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/EquinoxKeyKeeperRegistry.java +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/EquinoxKeyKeeperRegistry.java @@ -21,6 +21,10 @@ import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; +/** + * @deprecated use internal.api.io StreamCodecRegistry + */ +@Deprecated @Component public class EquinoxKeyKeeperRegistry extends BaseKeyKeeperRegistry implements KeyKeeperRegistry { diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/EquinoxStreamCodecRegistry.java b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/EquinoxStreamCodecRegistry.java index 770c39360..67ff7efe6 100644 --- a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/EquinoxStreamCodecRegistry.java +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/EquinoxStreamCodecRegistry.java @@ -21,6 +21,10 @@ import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; +/** + * @deprecated use internal.api.io StreamCodecRegistry + */ +@Deprecated @Component public class EquinoxStreamCodecRegistry extends BaseStreamCodecRegistry implements StreamCodecRegistry { From f10f50d1ebc44827585e21c25f520b46ea698890 Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Sat, 4 Jul 2020 20:47:51 +0300 Subject: [PATCH 3/5] Bug 564818 API revision | conditions | key keepers review - test set for BundleKeykeeper Signed-off-by: elena.parovyshnaya --- .../OSGI-INF/fake-product_1.0.0.pub | 11 +++ .../equinox/io/BundleKeyKeeperTest.java | 80 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 tests/org.eclipse.passage.lic.equinox.tests/OSGI-INF/fake-product_1.0.0.pub create mode 100644 tests/org.eclipse.passage.lic.equinox.tests/src/org/eclipse/passage/lic/internal/equinox/io/BundleKeyKeeperTest.java diff --git a/tests/org.eclipse.passage.lic.equinox.tests/OSGI-INF/fake-product_1.0.0.pub b/tests/org.eclipse.passage.lic.equinox.tests/OSGI-INF/fake-product_1.0.0.pub new file mode 100644 index 000000000..df0f6fe50 --- /dev/null +++ b/tests/org.eclipse.passage.lic.equinox.tests/OSGI-INF/fake-product_1.0.0.pub @@ -0,0 +1,11 @@ +This test .pub file +emulates public key file +for a product [fake-product] +of version [1.0.0] +for test BundleKeyKeeperTest. + +Totally fake. + +Illustrates, after all, +that the format is not checked +on an input stream opening. diff --git a/tests/org.eclipse.passage.lic.equinox.tests/src/org/eclipse/passage/lic/internal/equinox/io/BundleKeyKeeperTest.java b/tests/org.eclipse.passage.lic.equinox.tests/src/org/eclipse/passage/lic/internal/equinox/io/BundleKeyKeeperTest.java new file mode 100644 index 000000000..4d1f0a8ac --- /dev/null +++ b/tests/org.eclipse.passage.lic.equinox.tests/src/org/eclipse/passage/lic/internal/equinox/io/BundleKeyKeeperTest.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.equinox.io; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.IOException; +import java.io.InputStream; + +import org.eclipse.passage.lic.internal.api.LicensedProduct; +import org.eclipse.passage.lic.internal.api.LicensingException; +import org.eclipse.passage.lic.internal.base.BaseLicensedProduct; +import org.junit.Test; +import org.osgi.framework.Bundle; +import org.osgi.framework.FrameworkUtil; + +/** + * Integration test: demands OSGi running + */ +@SuppressWarnings("restriction") +public final class BundleKeyKeeperTest { + + @Test + public void exisgingKeyFileFound() throws IOException { + try { + InputStream stream = new BundleKeyKeeper(this::productWithKey, bundle()).productPublicKey(); + assertNotNull(stream); + stream.close(); + } catch (LicensingException e) { + fail("Public key file stream retrieval is not supposed to fail on valid data"); //$NON-NLS-1$ + } + } + + @SuppressWarnings("resource") // stream is not supposed to be opened + @Test + public void foreignProductKeyIsIgnired() throws IOException { + try { + + new BundleKeyKeeper(this::productWithoutKey, bundle()).productPublicKey(); + } catch (LicensingException e) { + assertTrue(e.getMessage().contains("find")); //$NON-NLS-1$ + return; + } + fail("Public key for the foreign product is not supposed to fit"); //$NON-NLS-1$ + } + + @Test(expected = NullPointerException.class) + public void productIsMandatory() { + new BundleKeyKeeper(null, bundle()); + } + + @Test(expected = NullPointerException.class) + public void bundleIsMandatory() { + new BundleKeyKeeper(this::productWithKey, null); + } + + private Bundle bundle() { + return FrameworkUtil.getBundle(getClass()); + } + + private LicensedProduct productWithKey() { + return new BaseLicensedProduct("fake-product", "1.0.0"); //$NON-NLS-1$ //$NON-NLS-2$ + } + + private LicensedProduct productWithoutKey() { + return new BaseLicensedProduct("another-fake-product", "1.0.0"); //$NON-NLS-1$ //$NON-NLS-2$ + } +} From 12d838ff58f70f41cfa17450e9358c3c5cdafbd6 Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Sat, 4 Jul 2020 20:48:58 +0300 Subject: [PATCH 4/5] Bug 564818 API revision | conditions | key keepers review - plug BundleKeyKeeper service to the sealed framework Signed-off-by: elena.parovyshnaya --- .../demo/SealedAccessCycleConfiguration.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.passage.seal.demo/src/org/eclipse/passage/seal/internal/demo/SealedAccessCycleConfiguration.java b/bundles/org.eclipse.passage.seal.demo/src/org/eclipse/passage/seal/internal/demo/SealedAccessCycleConfiguration.java index 140fce163..72f8e4511 100644 --- a/bundles/org.eclipse.passage.seal.demo/src/org/eclipse/passage/seal/internal/demo/SealedAccessCycleConfiguration.java +++ b/bundles/org.eclipse.passage.seal.demo/src/org/eclipse/passage/seal/internal/demo/SealedAccessCycleConfiguration.java @@ -22,6 +22,8 @@ import org.eclipse.passage.lic.internal.api.conditions.mining.ContentType; import org.eclipse.passage.lic.internal.api.conditions.mining.MinedConditions; import org.eclipse.passage.lic.internal.api.conditions.mining.MinedConditionsRegistry; +import org.eclipse.passage.lic.internal.api.io.KeyKeeper; +import org.eclipse.passage.lic.internal.api.io.KeyKeeperRegistry; import org.eclipse.passage.lic.internal.api.io.StreamCodec; import org.eclipse.passage.lic.internal.api.io.StreamCodecRegistry; import org.eclipse.passage.lic.internal.api.registry.Registry; @@ -30,10 +32,13 @@ import org.eclipse.passage.lic.internal.api.requirements.ResolvedRequirementsRegistry; import org.eclipse.passage.lic.internal.base.registry.ReadOnlyRegistry; import org.eclipse.passage.lic.internal.bc.BcStreamCodec; +import org.eclipse.passage.lic.internal.equinox.io.BundleKeyKeeper; import org.eclipse.passage.lic.internal.equinox.requirements.BundleRequirements; import org.eclipse.passage.lic.internal.equinox.requirements.ComponentRequirements; import org.eclipse.passage.lic.internal.hc.remote.impl.RemoteConditions; import org.eclipse.passage.lic.internal.json.tobemoved.JsonConditionTransport; +import org.osgi.framework.Bundle; +import org.osgi.framework.FrameworkUtil; @SuppressWarnings("restriction") final class SealedAccessCycleConfiguration implements AccessCycleConfiguration { @@ -42,6 +47,7 @@ final class SealedAccessCycleConfiguration implements AccessCycleConfiguration { private final Registry conditions; private final Registry transports; private final Registry codecs; + private final Registry keys; SealedAccessCycleConfiguration(Supplier product) { requirements = new ReadOnlyRegistry<>(Arrays.asList(// @@ -50,7 +56,6 @@ final class SealedAccessCycleConfiguration implements AccessCycleConfiguration { )); conditions = new ReadOnlyRegistry<>(Arrays.asList(// new RemoteConditions(product, transports())// - // FIXME: path condition minders require codecs )); transports = new ReadOnlyRegistry<>(Arrays.asList(// new JsonConditionTransport()// @@ -58,6 +63,9 @@ final class SealedAccessCycleConfiguration implements AccessCycleConfiguration { codecs = new ReadOnlyRegistry<>(Arrays.asList(// new BcStreamCodec(product) // )); + keys = new ReadOnlyRegistry<>(Arrays.asList(// + new BundleKeyKeeper(product, bundle()) // + )); } @Override @@ -74,8 +82,18 @@ private ConditionTransportRegistry transports() { return () -> transports; } + @SuppressWarnings("unused") // Under development: required for condition mining private StreamCodecRegistry codecs() { return () -> codecs; } + @SuppressWarnings("unused") // Under development: required for condition mining + private KeyKeeperRegistry keys() { + return () -> keys; + } + + private Bundle bundle() { + return FrameworkUtil.getBundle(getClass()); + } + } From f850888c307ab857dd49c30d56be2bc529cfaf09 Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Sun, 5 Jul 2020 10:39:18 +0300 Subject: [PATCH 5/5] Bug 564818 API revision | conditions | key keepers review - fix typos in error messages Signed-off-by: elena.parovyshnaya --- .../lic/internal/equinox/i18n/EquinoxMessages.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.properties b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.properties index a84427c80..26b8d2d17 100644 --- a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.properties +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/i18n/EquinoxMessages.properties @@ -23,8 +23,8 @@ ComponentConfigurationResolver_error_invalid_bundle_context=Unable to extract co ComponentConfigurationResolver_error_invalid_component_rt=Unable to extract configuration requirements: invalid ServiceComponentRuntime ComponentRequirements_error_no_resource=Unable to extract configuration requirements: invalid {0} ComponentRequirements_requirement_for_resource={0} for {1} OSGi-component -BundleKeyKeeper_failed_to_find_file=Filed to find public key for product [%s] in path [%s] of bundle [%s] -BundleKeyKeeper_failed_to_open_stream=Filed to open a stream from public key for product [%s] by url [%s] +BundleKeyKeeper_failed_to_find_file=Failed to find public key for product [%s] in path [%s] of bundle [%s] +BundleKeyKeeper_failed_to_open_stream=Failed to open a stream from public key for product [%s] by url [%s] BundleRequirements_no_context=Bundle context for {0} OSGi-component BundleRequirements_error_bundle_context=Unable to extract configuration requirements: invalid BundleContext BundleVendor_unknown_vendor=Unknown vendor