Merge pull request elastic/elasticsearch#2958 from rjernst/move_license
Move License into xpack Original commit: elastic/x-pack-elasticsearch@6b86ce6f14
This commit is contained in:
commit
9d6d858449
|
@ -1,9 +1,13 @@
|
||||||
apply plugin: 'elasticsearch.build'
|
apply plugin: 'elasticsearch.build'
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile project(':x-plugins:elasticsearch:license:base')
|
compile project(':x-plugins:elasticsearch:x-pack')
|
||||||
compile "org.elasticsearch:elasticsearch:${version}"
|
compile "org.elasticsearch:elasticsearch:${version}"
|
||||||
testCompile "org.elasticsearch.test:framework:${version}"
|
testCompile "org.elasticsearch.test:framework:${version}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
project.forbiddenPatterns {
|
||||||
|
exclude '**/*.key'
|
||||||
|
}
|
||||||
|
|
||||||
dependencyLicenses.enabled = false
|
dependencyLicenses.enabled = false
|
|
@ -7,13 +7,12 @@ package org.elasticsearch.license.licensor;
|
||||||
|
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util.BytesRefIterator;
|
import org.apache.lucene.util.BytesRefIterator;
|
||||||
import org.elasticsearch.common.bytes.BytesReference;
|
|
||||||
import org.elasticsearch.common.xcontent.ToXContent;
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.CryptUtils;
|
import org.elasticsearch.license.CryptUtils;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
|
@ -20,8 +20,8 @@ import java.security.KeyPair;
|
||||||
import java.security.KeyPairGenerator;
|
import java.security.KeyPairGenerator;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
|
|
||||||
import static org.elasticsearch.license.core.CryptUtils.writeEncryptedPrivateKey;
|
import static org.elasticsearch.license.CryptUtils.writeEncryptedPrivateKey;
|
||||||
import static org.elasticsearch.license.core.CryptUtils.writeEncryptedPublicKey;
|
import static org.elasticsearch.license.CryptUtils.writeEncryptedPublicKey;
|
||||||
|
|
||||||
public class KeyPairGeneratorTool extends Command {
|
public class KeyPairGeneratorTool extends Command {
|
||||||
|
|
|
@ -20,7 +20,7 @@ import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.license.licensor.LicenseSigner;
|
import org.elasticsearch.license.licensor.LicenseSigner;
|
||||||
|
|
||||||
public class LicenseGeneratorTool extends Command {
|
public class LicenseGeneratorTool extends Command {
|
|
@ -20,8 +20,8 @@ import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.license.core.LicenseVerifier;
|
import org.elasticsearch.license.LicenseVerifier;
|
||||||
|
|
||||||
public class LicenseVerificationTool extends Command {
|
public class LicenseVerificationTool extends Command {
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
package org.elasticsearch.license.licensor;
|
package org.elasticsearch.license.licensor;
|
||||||
|
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.DateUtils;
|
import org.elasticsearch.license.DateUtils;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.license.core.LicenseVerifier;
|
import org.elasticsearch.license.LicenseVerifier;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
|
@ -13,8 +13,8 @@ import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.DateUtils;
|
import org.elasticsearch.license.DateUtils;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.hamcrest.MatcherAssert;
|
import org.hamcrest.MatcherAssert;
|
||||||
import org.joda.time.format.DateTimeFormatter;
|
import org.joda.time.format.DateTimeFormatter;
|
|
@ -13,7 +13,7 @@ import org.elasticsearch.cli.Command;
|
||||||
import org.elasticsearch.cli.CommandTestCase;
|
import org.elasticsearch.cli.CommandTestCase;
|
||||||
import org.elasticsearch.cli.ExitCodes;
|
import org.elasticsearch.cli.ExitCodes;
|
||||||
import org.elasticsearch.cli.UserException;
|
import org.elasticsearch.cli.UserException;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.license.licensor.TestUtils;
|
import org.elasticsearch.license.licensor.TestUtils;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
|
@ -14,7 +14,7 @@ import org.elasticsearch.cli.CommandTestCase;
|
||||||
import org.elasticsearch.cli.ExitCodes;
|
import org.elasticsearch.cli.ExitCodes;
|
||||||
import org.elasticsearch.cli.UserException;
|
import org.elasticsearch.cli.UserException;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.license.licensor.TestUtils;
|
import org.elasticsearch.license.licensor.TestUtils;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
elasticsearch-license
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Elasticsearch Licensing core, tools and plugin
|
|
||||||
|
|
||||||
## Core
|
|
||||||
|
|
||||||
Contains core data structures, utilities used by **Licensor** and **Plugin**.
|
|
||||||
|
|
||||||
See `core/` and `core-shaded/`
|
|
||||||
|
|
||||||
## Licensor
|
|
||||||
|
|
||||||
Contains a collection of tools to generate key-pairs, licenses and validate licenses.
|
|
||||||
|
|
||||||
See `licensor/`
|
|
||||||
|
|
||||||
see [wiki] (https://github.com/elasticsearch/elasticsearch-license/wiki) for documentation on
|
|
||||||
[Licensing Tools Usage & Reference] (https://github.com/elasticsearch/elasticsearch-license/wiki/License-Tools-Usage-&-Reference)
|
|
||||||
|
|
||||||
## Plugin
|
|
||||||
|
|
||||||
**NOTE**: The license plugin has to be packaged with the right public key when being deployed to public repositories in maven
|
|
||||||
or uploaded to s3. Use `-Dkeys.path=<PATH_TO_KEY_DIR>` with maven command to package the plugin with a specified key.
|
|
||||||
|
|
||||||
See `plugin/`
|
|
||||||
|
|
||||||
see [Getting Started] (https://github.com/elasticsearch/elasticsearch-license/blob/master/docs/getting-started.asciidoc) to install license plugin.
|
|
||||||
|
|
||||||
see [Licensing REST APIs] (https://github.com/elasticsearch/elasticsearch-license/blob/master/docs/license.asciidoc)
|
|
||||||
to use the license plugin from an elasticsearch deployment.
|
|
||||||
|
|
||||||
see [wiki] (https://github.com/elasticsearch/elasticsearch-license/wiki) for documentation on
|
|
||||||
- [License Plugin Consumer Interface] (https://github.com/elasticsearch/elasticsearch-license/wiki/License---Consumer-Interface)
|
|
||||||
- [License Plugin Release Process] (https://github.com/elasticsearch/elasticsearch-license/wiki/Plugin-Release-Process)
|
|
||||||
- [License Plugin Design] (https://github.com/elasticsearch/elasticsearch-license/wiki/License-Plugin--Design)
|
|
|
@ -1,20 +0,0 @@
|
||||||
apply plugin: 'elasticsearch.build'
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compile "org.elasticsearch:elasticsearch:${version}"
|
|
||||||
testCompile "org.elasticsearch.test:framework:${version}"
|
|
||||||
}
|
|
||||||
|
|
||||||
compactProfile = 'full'
|
|
||||||
|
|
||||||
dependencyLicenses.enabled = false
|
|
||||||
|
|
||||||
jar {
|
|
||||||
baseName = 'license-core'
|
|
||||||
}
|
|
||||||
|
|
||||||
modifyPom {
|
|
||||||
project {
|
|
||||||
artifactId 'license-core'
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,201 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
|
||||||
*/
|
|
||||||
package org.elasticsearch.license.core;
|
|
||||||
|
|
||||||
import org.elasticsearch.common.joda.DateMathParser;
|
|
||||||
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
|
|
||||||
import org.elasticsearch.common.joda.Joda;
|
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
|
||||||
import org.hamcrest.MatcherAssert;
|
|
||||||
import org.joda.time.format.DateTimeFormatter;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
|
|
||||||
import static com.carrotsearch.randomizedtesting.RandomizedTest.randomBoolean;
|
|
||||||
import static com.carrotsearch.randomizedtesting.RandomizedTest.randomInt;
|
|
||||||
import static com.carrotsearch.randomizedtesting.RandomizedTest.randomIntBetween;
|
|
||||||
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
|
||||||
import static org.elasticsearch.test.ESTestCase.randomFrom;
|
|
||||||
import static org.hamcrest.core.IsEqual.equalTo;
|
|
||||||
|
|
||||||
public class TestUtils {
|
|
||||||
|
|
||||||
private static final FormatDateTimeFormatter formatDateTimeFormatter = Joda.forPattern("yyyy-MM-dd");
|
|
||||||
private static final DateMathParser dateMathParser = new DateMathParser(formatDateTimeFormatter);
|
|
||||||
private static final DateTimeFormatter dateTimeFormatter = formatDateTimeFormatter.printer();
|
|
||||||
|
|
||||||
public static String dateMathString(String time, final long now) {
|
|
||||||
return dateTimeFormatter.print(dateMathParser.parse(time, new Callable<Long>() {
|
|
||||||
@Override
|
|
||||||
public Long call() throws Exception {
|
|
||||||
return now;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static long dateMath(String time, final long now) {
|
|
||||||
return dateMathParser.parse(time, new Callable<Long>() {
|
|
||||||
@Override
|
|
||||||
public Long call() throws Exception {
|
|
||||||
return now;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LicenseSpec generateRandomLicenseSpec(int version) {
|
|
||||||
boolean datesInMillis = randomBoolean();
|
|
||||||
long now = System.currentTimeMillis();
|
|
||||||
String uid = UUID.randomUUID().toString();
|
|
||||||
String feature = "feature__" + randomInt();
|
|
||||||
String issuer = "issuer__" + randomInt();
|
|
||||||
String issuedTo = "issuedTo__" + randomInt();
|
|
||||||
final String type;
|
|
||||||
final String subscriptionType;
|
|
||||||
if (version < License.VERSION_NO_FEATURE_TYPE) {
|
|
||||||
subscriptionType = randomFrom("gold", "silver", "platinum");
|
|
||||||
type = "subscription";//randomFrom("subscription", "internal", "development");
|
|
||||||
} else {
|
|
||||||
subscriptionType = null;
|
|
||||||
type = randomFrom("basic", "dev", "gold", "silver", "platinum");
|
|
||||||
}
|
|
||||||
int maxNodes = randomIntBetween(5, 100);
|
|
||||||
if (datesInMillis) {
|
|
||||||
long issueDateInMillis = dateMath("now", now);
|
|
||||||
long expiryDateInMillis = dateMath("now+10d/d", now);
|
|
||||||
return new LicenseSpec(version, uid, feature, issueDateInMillis, expiryDateInMillis, type, subscriptionType, issuedTo, issuer,
|
|
||||||
maxNodes);
|
|
||||||
} else {
|
|
||||||
String issueDate = dateMathString("now", now);
|
|
||||||
String expiryDate = dateMathString("now+10d/d", now);
|
|
||||||
return new LicenseSpec(version, uid, feature, issueDate, expiryDate, type, subscriptionType, issuedTo, issuer, maxNodes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String generateLicenseSpecString(LicenseSpec licenseSpec) throws IOException {
|
|
||||||
XContentBuilder licenses = jsonBuilder();
|
|
||||||
licenses.startObject();
|
|
||||||
licenses.startArray("licenses");
|
|
||||||
licenses.startObject()
|
|
||||||
.field("uid", licenseSpec.uid)
|
|
||||||
.field("type", licenseSpec.type)
|
|
||||||
.field("subscription_type", licenseSpec.subscriptionType)
|
|
||||||
.field("issued_to", licenseSpec.issuedTo)
|
|
||||||
.field("issuer", licenseSpec.issuer)
|
|
||||||
.field("feature", licenseSpec.feature)
|
|
||||||
.field("max_nodes", licenseSpec.maxNodes);
|
|
||||||
|
|
||||||
if (licenseSpec.issueDate != null) {
|
|
||||||
licenses.field("issue_date", licenseSpec.issueDate);
|
|
||||||
} else {
|
|
||||||
licenses.field("issue_date_in_millis", licenseSpec.issueDateInMillis);
|
|
||||||
}
|
|
||||||
if (licenseSpec.expiryDate != null) {
|
|
||||||
licenses.field("expiry_date", licenseSpec.expiryDate);
|
|
||||||
} else {
|
|
||||||
licenses.field("expiry_date_in_millis", licenseSpec.expiryDateInMillis);
|
|
||||||
}
|
|
||||||
licenses.field("version", licenseSpec.version);
|
|
||||||
licenses.endObject();
|
|
||||||
licenses.endArray();
|
|
||||||
licenses.endObject();
|
|
||||||
return licenses.string();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static License generateLicenses(LicenseSpec spec) {
|
|
||||||
License.Builder builder = License.builder()
|
|
||||||
.uid(spec.uid)
|
|
||||||
.feature(spec.feature)
|
|
||||||
.type(spec.type)
|
|
||||||
.subscriptionType(spec.subscriptionType)
|
|
||||||
.issuedTo(spec.issuedTo)
|
|
||||||
.issuer(spec.issuer)
|
|
||||||
.maxNodes(spec.maxNodes);
|
|
||||||
|
|
||||||
if (spec.expiryDate != null) {
|
|
||||||
builder.expiryDate(DateUtils.endOfTheDay(spec.expiryDate));
|
|
||||||
} else {
|
|
||||||
builder.expiryDate(spec.expiryDateInMillis);
|
|
||||||
}
|
|
||||||
if (spec.issueDate != null) {
|
|
||||||
builder.issueDate(DateUtils.beginningOfTheDay(spec.issueDate));
|
|
||||||
} else {
|
|
||||||
builder.issueDate(spec.issueDateInMillis);
|
|
||||||
}
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void assertLicenseSpec(LicenseSpec spec, License license) {
|
|
||||||
MatcherAssert.assertThat(license.uid(), equalTo(spec.uid));
|
|
||||||
MatcherAssert.assertThat(license.issuedTo(), equalTo(spec.issuedTo));
|
|
||||||
MatcherAssert.assertThat(license.issuer(), equalTo(spec.issuer));
|
|
||||||
MatcherAssert.assertThat(license.type(), equalTo(spec.type));
|
|
||||||
MatcherAssert.assertThat(license.maxNodes(), equalTo(spec.maxNodes));
|
|
||||||
if (spec.issueDate != null) {
|
|
||||||
MatcherAssert.assertThat(license.issueDate(), equalTo(DateUtils.beginningOfTheDay(spec.issueDate)));
|
|
||||||
} else {
|
|
||||||
MatcherAssert.assertThat(license.issueDate(), equalTo(spec.issueDateInMillis));
|
|
||||||
}
|
|
||||||
if (spec.expiryDate != null) {
|
|
||||||
MatcherAssert.assertThat(license.expiryDate(), equalTo(DateUtils.endOfTheDay(spec.expiryDate)));
|
|
||||||
} else {
|
|
||||||
MatcherAssert.assertThat(license.expiryDate(), equalTo(spec.expiryDateInMillis));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class LicenseSpec {
|
|
||||||
public final int version;
|
|
||||||
public final String feature;
|
|
||||||
public final String issueDate;
|
|
||||||
public final long issueDateInMillis;
|
|
||||||
public final String expiryDate;
|
|
||||||
public final long expiryDateInMillis;
|
|
||||||
public final String uid;
|
|
||||||
public final String type;
|
|
||||||
public final String subscriptionType;
|
|
||||||
public final String issuedTo;
|
|
||||||
public final String issuer;
|
|
||||||
public final int maxNodes;
|
|
||||||
|
|
||||||
public LicenseSpec(String issueDate, String expiryDate) {
|
|
||||||
this(License.VERSION_CURRENT, UUID.randomUUID().toString(), "feature", issueDate, expiryDate, "trial", "none", "customer",
|
|
||||||
"elasticsearch", 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LicenseSpec(int version, String uid, String feature, long issueDateInMillis, long expiryDateInMillis, String type,
|
|
||||||
String subscriptionType, String issuedTo, String issuer, int maxNodes) {
|
|
||||||
this.version = version;
|
|
||||||
this.feature = feature;
|
|
||||||
this.issueDateInMillis = issueDateInMillis;
|
|
||||||
this.issueDate = null;
|
|
||||||
this.expiryDateInMillis = expiryDateInMillis;
|
|
||||||
this.expiryDate = null;
|
|
||||||
this.uid = uid;
|
|
||||||
this.type = type;
|
|
||||||
this.subscriptionType = subscriptionType;
|
|
||||||
this.issuedTo = issuedTo;
|
|
||||||
this.issuer = issuer;
|
|
||||||
this.maxNodes = maxNodes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LicenseSpec(int version, String uid, String feature, String issueDate, String expiryDate, String type,
|
|
||||||
String subscriptionType, String issuedTo, String issuer, int maxNodes) {
|
|
||||||
this.version = version;
|
|
||||||
this.feature = feature;
|
|
||||||
this.issueDate = issueDate;
|
|
||||||
this.issueDateInMillis = -1;
|
|
||||||
this.expiryDate = expiryDate;
|
|
||||||
this.expiryDateInMillis = -1;
|
|
||||||
this.uid = uid;
|
|
||||||
this.type = type;
|
|
||||||
this.subscriptionType = subscriptionType;
|
|
||||||
this.issuedTo = issuedTo;
|
|
||||||
this.issuer = issuer;
|
|
||||||
this.maxNodes = maxNodes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
subprojects {
|
|
||||||
project.afterEvaluate {
|
|
||||||
project.forbiddenPatterns {
|
|
||||||
exclude '**/*.key'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
es.logger.level=INFO
|
|
||||||
log4j.rootLogger=${es.logger.level}, out
|
|
||||||
|
|
||||||
log4j.logger.org.apache.http=INFO, out
|
|
||||||
log4j.additivity.org.apache.http=false
|
|
||||||
|
|
||||||
log4j.logger.org.elasticsearch.license=TRACE
|
|
||||||
|
|
||||||
log4j.appender.out=org.apache.log4j.ConsoleAppender
|
|
||||||
log4j.appender.out.layout=org.apache.log4j.PatternLayout
|
|
||||||
log4j.appender.out.layout.conversionPattern=[%d{ISO8601}][%-5p][%-25c] %m%n
|
|
Binary file not shown.
|
@ -1,6 +1,5 @@
|
||||||
import org.elasticsearch.gradle.MavenFilteringHack
|
import org.elasticsearch.gradle.MavenFilteringHack
|
||||||
import org.elasticsearch.gradle.test.NodeInfo
|
import org.elasticsearch.gradle.test.NodeInfo
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets
|
import java.nio.charset.StandardCharsets
|
||||||
|
|
||||||
group 'org.elasticsearch.plugin'
|
group 'org.elasticsearch.plugin'
|
||||||
|
@ -27,10 +26,6 @@ licenseHeaders {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// license deps
|
|
||||||
compile project(':x-plugins:elasticsearch:license:base')
|
|
||||||
testCompile project(':x-plugins:elasticsearch:license:licensor')
|
|
||||||
|
|
||||||
// security deps
|
// security deps
|
||||||
compile project(path: ':modules:transport-netty3', configuration: 'runtime')
|
compile project(path: ':modules:transport-netty3', configuration: 'runtime')
|
||||||
compile 'dk.brics.automaton:automaton:1.11-8'
|
compile 'dk.brics.automaton:automaton:1.11-8'
|
||||||
|
@ -78,6 +73,11 @@ for (String module : ['', 'license-plugin/', 'security/', 'watcher/', 'monitorin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make LicenseSigner available for testing signed licenses
|
||||||
|
sourceSets.test.java {
|
||||||
|
srcDir '../license-tools/src/main/java'
|
||||||
|
}
|
||||||
|
|
||||||
compileJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
compileJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
||||||
compileTestJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
compileTestJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
||||||
|
|
||||||
|
@ -238,29 +238,3 @@ thirdPartyAudit.excludes = [
|
||||||
'javax.activation.URLDataSource',
|
'javax.activation.URLDataSource',
|
||||||
'javax.activation.UnsupportedDataTypeException'
|
'javax.activation.UnsupportedDataTypeException'
|
||||||
]
|
]
|
||||||
|
|
||||||
modifyPom { MavenPom pom ->
|
|
||||||
pom.withXml { XmlProvider xml ->
|
|
||||||
// first find if we have dependencies at all, and grab the node
|
|
||||||
NodeList depsNodes = xml.asNode().get('dependencies')
|
|
||||||
if (depsNodes.isEmpty()) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// find the 'base' dependency and replace it with the correct name because the project name is
|
|
||||||
// always used even when the pom of the other project is correct
|
|
||||||
Iterator<Node> childNodeIter = depsNodes.get(0).children().iterator()
|
|
||||||
while (childNodeIter.hasNext()) {
|
|
||||||
Node depNode = childNodeIter.next()
|
|
||||||
String groupId = depNode.get('groupId').get(0).text()
|
|
||||||
Node artifactIdNode = depNode.get('artifactId').get(0)
|
|
||||||
String artifactId = artifactIdNode.text()
|
|
||||||
String scope = depNode.get("scope").get(0).text()
|
|
||||||
if (groupId.equals('org.elasticsearch') && artifactId.equals('base')) {
|
|
||||||
artifactIdNode.replaceNode(new Node(null, 'artifactId', 'license-core'))
|
|
||||||
} else if ('test'.equals(scope)) {
|
|
||||||
childNodeIter.remove()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
|
|
||||||
import javax.crypto.BadPaddingException;
|
import javax.crypto.BadPaddingException;
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
|
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
|
||||||
import org.elasticsearch.common.joda.Joda;
|
import org.elasticsearch.common.joda.Joda;
|
|
@ -7,7 +7,6 @@ package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.common.logging.LoggerMessageFormat;
|
import org.elasticsearch.common.logging.LoggerMessageFormat;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.xpack.scheduler.SchedulerEngine;
|
import org.elasticsearch.xpack.scheduler.SchedulerEngine;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
|
@ -8,7 +8,6 @@ package org.elasticsearch.license;
|
||||||
import org.elasticsearch.action.ActionResponse;
|
import org.elasticsearch.action.ActionResponse;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.apache.lucene.util.CollectionUtil;
|
import org.apache.lucene.util.CollectionUtil;
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
|
@ -25,9 +25,6 @@ import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.gateway.GatewayService;
|
import org.elasticsearch.gateway.GatewayService;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.license.core.LicenseVerifier;
|
|
||||||
import org.elasticsearch.license.core.OperationModeFileWatcher;
|
|
||||||
import org.elasticsearch.watcher.ResourceWatcherService;
|
import org.elasticsearch.watcher.ResourceWatcherService;
|
||||||
import org.elasticsearch.xpack.XPackPlugin;
|
import org.elasticsearch.xpack.XPackPlugin;
|
||||||
import org.elasticsearch.xpack.scheduler.SchedulerEngine;
|
import org.elasticsearch.xpack.scheduler.SchedulerEngine;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util.BytesRefIterator;
|
import org.apache.lucene.util.BytesRefIterator;
|
|
@ -11,7 +11,6 @@ import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
|
|
@ -7,7 +7,6 @@ package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
import org.elasticsearch.client.ElasticsearchClient;
|
import org.elasticsearch.client.ElasticsearchClient;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
|
|
||||||
import org.elasticsearch.common.logging.ESLogger;
|
import org.elasticsearch.common.logging.ESLogger;
|
||||||
import org.elasticsearch.license.core.License.OperationMode;
|
import org.elasticsearch.license.License.OperationMode;
|
||||||
import org.elasticsearch.watcher.FileChangesListener;
|
import org.elasticsearch.watcher.FileChangesListener;
|
||||||
import org.elasticsearch.watcher.FileWatcher;
|
import org.elasticsearch.watcher.FileWatcher;
|
||||||
import org.elasticsearch.watcher.ResourceWatcherService;
|
import org.elasticsearch.watcher.ResourceWatcherService;
|
|
@ -10,7 +10,6 @@ import org.elasticsearch.action.ValidateActions;
|
||||||
import org.elasticsearch.action.support.master.AcknowledgedRequest;
|
import org.elasticsearch.action.support.master.AcknowledgedRequest;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -29,7 +28,7 @@ public class PutLicenseRequest extends AcknowledgedRequest<PutLicenseRequest> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses license from json format to an instance of {@link org.elasticsearch.license.core.License}
|
* Parses license from json format to an instance of {@link License}
|
||||||
*
|
*
|
||||||
* @param licenseDefinition licenses definition
|
* @param licenseDefinition licenses definition
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -7,7 +7,6 @@ package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.action.support.master.AcknowledgedRequestBuilder;
|
import org.elasticsearch.action.support.master.AcknowledgedRequestBuilder;
|
||||||
import org.elasticsearch.client.ElasticsearchClient;
|
import org.elasticsearch.client.ElasticsearchClient;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register license request builder
|
* Register license request builder
|
||||||
|
|
|
@ -9,7 +9,6 @@ import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.xcontent.ToXContent;
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.rest.BytesRestResponse;
|
import org.elasticsearch.rest.BytesRestResponse;
|
||||||
import org.elasticsearch.rest.RestChannel;
|
import org.elasticsearch.rest.RestChannel;
|
||||||
import org.elasticsearch.rest.RestController;
|
import org.elasticsearch.rest.RestController;
|
||||||
|
|
|
@ -11,15 +11,14 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
import static org.elasticsearch.license.core.CryptUtils.decrypt;
|
import static org.elasticsearch.license.CryptUtils.decrypt;
|
||||||
import static org.elasticsearch.license.core.CryptUtils.encrypt;
|
import static org.elasticsearch.license.CryptUtils.encrypt;
|
||||||
|
|
||||||
class TrialLicense {
|
class TrialLicense {
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
/**
|
/**
|
||||||
* Licensing for xpack.
|
* Licensing for xpack.
|
||||||
*
|
*
|
||||||
* A {@link org.elasticsearch.license.core.License} is a signed set of json properties that determine what features
|
* A {@link org.elasticsearch.license.License} is a signed set of json properties that determine what features
|
||||||
* are available in a running cluster. Licenses are registered through a
|
* are available in a running cluster. Licenses are registered through a
|
||||||
* {@link org.elasticsearch.license.PutLicenseRequest}. This action is handled by the master node, which places
|
* {@link org.elasticsearch.license.PutLicenseRequest}. This action is handled by the master node, which places
|
||||||
* the signed license into the cluster state. Each node listens for cluster state updates via the
|
* the signed license into the cluster state. Each node listens for cluster state updates via the
|
||||||
|
|
|
@ -17,7 +17,6 @@ import org.elasticsearch.common.component.Lifecycle;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.transport.LocalTransportAddress;
|
import org.elasticsearch.common.transport.LocalTransportAddress;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.watcher.ResourceWatcherService;
|
import org.elasticsearch.watcher.ResourceWatcherService;
|
||||||
import org.elasticsearch.xpack.support.clock.ClockMock;
|
import org.elasticsearch.xpack.support.clock.ClockMock;
|
||||||
|
|
|
@ -11,8 +11,6 @@ import org.elasticsearch.cluster.ClusterStateUpdateTask;
|
||||||
import org.elasticsearch.cluster.metadata.MetaData;
|
import org.elasticsearch.cluster.metadata.MetaData;
|
||||||
import org.elasticsearch.common.Nullable;
|
import org.elasticsearch.common.Nullable;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.license.LicensesMetaData;
|
|
||||||
import org.elasticsearch.xpack.monitoring.Monitoring;
|
import org.elasticsearch.xpack.monitoring.Monitoring;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.xpack.security.Security;
|
import org.elasticsearch.xpack.security.Security;
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
package org.elasticsearch.license;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
||||||
import static org.elasticsearch.common.unit.TimeValue.timeValueMillis;
|
import static org.elasticsearch.common.unit.TimeValue.timeValueMillis;
|
||||||
|
|
|
@ -15,7 +15,6 @@ import org.elasticsearch.cluster.node.DiscoveryNode;
|
||||||
import org.elasticsearch.cluster.node.DiscoveryNodes;
|
import org.elasticsearch.cluster.node.DiscoveryNodes;
|
||||||
import org.elasticsearch.common.transport.LocalTransportAddress;
|
import org.elasticsearch.common.transport.LocalTransportAddress;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import static org.elasticsearch.license.core.License.OperationMode;
|
import static org.elasticsearch.license.License.OperationMode;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.watcher.FileWatcher;
|
import org.elasticsearch.watcher.FileWatcher;
|
||||||
|
@ -12,7 +12,6 @@ import org.junit.Before;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import static org.elasticsearch.license.core.OperationModeFileWatcherTests.writeMode;
|
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
import static org.mockito.Matchers.eq;
|
import static org.mockito.Matchers.eq;
|
||||||
|
@ -47,7 +46,7 @@ public class LicenseOperationModeUpdateTests extends ESTestCase {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
assertThat(license.operationMode(), equalTo(License.OperationMode.resolve(type)));
|
assertThat(license.operationMode(), equalTo(License.OperationMode.resolve(type)));
|
||||||
writeMode("gold", licenseModeFile);
|
OperationModeFileWatcherTests.writeMode("gold", licenseModeFile);
|
||||||
license.setOperationModeFileWatcher(operationModeFileWatcher);
|
license.setOperationModeFileWatcher(operationModeFileWatcher);
|
||||||
verifyZeroInteractions(resourceWatcherService);
|
verifyZeroInteractions(resourceWatcherService);
|
||||||
assertThat(license.operationMode(), equalTo(License.OperationMode.resolve(type)));
|
assertThat(license.operationMode(), equalTo(License.OperationMode.resolve(type)));
|
||||||
|
@ -65,7 +64,7 @@ public class LicenseOperationModeUpdateTests extends ESTestCase {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
assertThat(license.operationMode(), equalTo(License.OperationMode.PLATINUM));
|
assertThat(license.operationMode(), equalTo(License.OperationMode.PLATINUM));
|
||||||
writeMode("gold", licenseModeFile);
|
OperationModeFileWatcherTests.writeMode("gold", licenseModeFile);
|
||||||
license.setOperationModeFileWatcher(operationModeFileWatcher);
|
license.setOperationModeFileWatcher(operationModeFileWatcher);
|
||||||
verify(resourceWatcherService, times(1)).add(any(FileWatcher.class), eq(ResourceWatcherService.Frequency.HIGH));
|
verify(resourceWatcherService, times(1)).add(any(FileWatcher.class), eq(ResourceWatcherService.Frequency.HIGH));
|
||||||
assertThat(license.operationMode(), equalTo(License.OperationMode.GOLD));
|
assertThat(license.operationMode(), equalTo(License.OperationMode.GOLD));
|
|
@ -6,7 +6,6 @@
|
||||||
package org.elasticsearch.license;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.xpack.scheduler.SchedulerEngine;
|
import org.elasticsearch.xpack.scheduler.SchedulerEngine;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.common.xcontent.ToXContent;
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
|
@ -9,7 +9,6 @@ import org.elasticsearch.common.network.NetworkModule;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
||||||
import org.elasticsearch.xpack.MockNetty3Plugin;
|
import org.elasticsearch.xpack.MockNetty3Plugin;
|
||||||
|
|
|
@ -8,7 +8,6 @@ package org.elasticsearch.license;
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
import org.elasticsearch.cluster.ClusterStateUpdateTask;
|
import org.elasticsearch.cluster.ClusterStateUpdateTask;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
|
|
||||||
import static org.elasticsearch.license.TestUtils.generateSignedLicense;
|
import static org.elasticsearch.license.TestUtils.generateSignedLicense;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
|
|
@ -15,7 +15,6 @@ import org.elasticsearch.cluster.ack.ClusterStateUpdateResponse;
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
import org.elasticsearch.cluster.service.ClusterService;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.test.ESSingleNodeTestCase;
|
import org.elasticsearch.test.ESSingleNodeTestCase;
|
||||||
import org.elasticsearch.xpack.XPackPlugin;
|
import org.elasticsearch.xpack.XPackPlugin;
|
||||||
|
|
|
@ -17,7 +17,6 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
|
@ -8,7 +8,6 @@ package org.elasticsearch.license;
|
||||||
import org.elasticsearch.action.ActionFuture;
|
import org.elasticsearch.action.ActionFuture;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.xpack.monitoring.Monitoring;
|
import org.elasticsearch.xpack.monitoring.Monitoring;
|
||||||
import org.elasticsearch.node.Node;
|
import org.elasticsearch.node.Node;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license.core;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.license;
|
package org.elasticsearch.license;
|
||||||
|
|
||||||
|
import com.carrotsearch.randomizedtesting.RandomizedTest;
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
import org.elasticsearch.common.io.PathUtils;
|
import org.elasticsearch.common.io.PathUtils;
|
||||||
import org.elasticsearch.common.joda.DateMathParser;
|
import org.elasticsearch.common.joda.DateMathParser;
|
||||||
|
@ -15,10 +16,12 @@ import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.license.licensor.LicenseSigner;
|
import org.elasticsearch.license.licensor.LicenseSigner;
|
||||||
|
import org.hamcrest.MatcherAssert;
|
||||||
|
import org.joda.time.format.DateTimeFormatter;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -27,6 +30,9 @@ import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
|
import static com.carrotsearch.randomizedtesting.RandomizedTest.randomBoolean;
|
||||||
|
import static com.carrotsearch.randomizedtesting.RandomizedTest.randomInt;
|
||||||
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||||
import static org.elasticsearch.test.ESTestCase.assertNotNull;
|
import static org.elasticsearch.test.ESTestCase.assertNotNull;
|
||||||
import static org.elasticsearch.test.ESTestCase.awaitBusy;
|
import static org.elasticsearch.test.ESTestCase.awaitBusy;
|
||||||
import static org.elasticsearch.test.ESTestCase.randomAsciiOfLength;
|
import static org.elasticsearch.test.ESTestCase.randomAsciiOfLength;
|
||||||
|
@ -39,6 +45,16 @@ public class TestUtils {
|
||||||
|
|
||||||
private static final FormatDateTimeFormatter formatDateTimeFormatter = Joda.forPattern("yyyy-MM-dd");
|
private static final FormatDateTimeFormatter formatDateTimeFormatter = Joda.forPattern("yyyy-MM-dd");
|
||||||
private static final DateMathParser dateMathParser = new DateMathParser(formatDateTimeFormatter);
|
private static final DateMathParser dateMathParser = new DateMathParser(formatDateTimeFormatter);
|
||||||
|
private static final DateTimeFormatter dateTimeFormatter = formatDateTimeFormatter.printer();
|
||||||
|
|
||||||
|
public static String dateMathString(String time, final long now) {
|
||||||
|
return dateTimeFormatter.print(dateMathParser.parse(time, new Callable<Long>() {
|
||||||
|
@Override
|
||||||
|
public Long call() throws Exception {
|
||||||
|
return now;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
public static long dateMath(String time, final long now) {
|
public static long dateMath(String time, final long now) {
|
||||||
return dateMathParser.parse(time, new Callable<Long>() {
|
return dateMathParser.parse(time, new Callable<Long>() {
|
||||||
|
@ -48,6 +64,159 @@ public class TestUtils {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static LicenseSpec generateRandomLicenseSpec(int version) {
|
||||||
|
boolean datesInMillis = randomBoolean();
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
String uid = UUID.randomUUID().toString();
|
||||||
|
String feature = "feature__" + randomInt();
|
||||||
|
String issuer = "issuer__" + randomInt();
|
||||||
|
String issuedTo = "issuedTo__" + randomInt();
|
||||||
|
final String type;
|
||||||
|
final String subscriptionType;
|
||||||
|
if (version < License.VERSION_NO_FEATURE_TYPE) {
|
||||||
|
subscriptionType = randomFrom("gold", "silver", "platinum");
|
||||||
|
type = "subscription";//randomFrom("subscription", "internal", "development");
|
||||||
|
} else {
|
||||||
|
subscriptionType = null;
|
||||||
|
type = randomFrom("basic", "dev", "gold", "silver", "platinum");
|
||||||
|
}
|
||||||
|
int maxNodes = RandomizedTest.randomIntBetween(5, 100);
|
||||||
|
if (datesInMillis) {
|
||||||
|
long issueDateInMillis = dateMath("now", now);
|
||||||
|
long expiryDateInMillis = dateMath("now+10d/d", now);
|
||||||
|
return new LicenseSpec(version, uid, feature, issueDateInMillis, expiryDateInMillis, type, subscriptionType, issuedTo, issuer,
|
||||||
|
maxNodes);
|
||||||
|
} else {
|
||||||
|
String issueDate = dateMathString("now", now);
|
||||||
|
String expiryDate = dateMathString("now+10d/d", now);
|
||||||
|
return new LicenseSpec(version, uid, feature, issueDate, expiryDate, type, subscriptionType, issuedTo, issuer, maxNodes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String generateLicenseSpecString(LicenseSpec licenseSpec) throws IOException {
|
||||||
|
XContentBuilder licenses = jsonBuilder();
|
||||||
|
licenses.startObject();
|
||||||
|
licenses.startArray("licenses");
|
||||||
|
licenses.startObject()
|
||||||
|
.field("uid", licenseSpec.uid)
|
||||||
|
.field("type", licenseSpec.type)
|
||||||
|
.field("subscription_type", licenseSpec.subscriptionType)
|
||||||
|
.field("issued_to", licenseSpec.issuedTo)
|
||||||
|
.field("issuer", licenseSpec.issuer)
|
||||||
|
.field("feature", licenseSpec.feature)
|
||||||
|
.field("max_nodes", licenseSpec.maxNodes);
|
||||||
|
|
||||||
|
if (licenseSpec.issueDate != null) {
|
||||||
|
licenses.field("issue_date", licenseSpec.issueDate);
|
||||||
|
} else {
|
||||||
|
licenses.field("issue_date_in_millis", licenseSpec.issueDateInMillis);
|
||||||
|
}
|
||||||
|
if (licenseSpec.expiryDate != null) {
|
||||||
|
licenses.field("expiry_date", licenseSpec.expiryDate);
|
||||||
|
} else {
|
||||||
|
licenses.field("expiry_date_in_millis", licenseSpec.expiryDateInMillis);
|
||||||
|
}
|
||||||
|
licenses.field("version", licenseSpec.version);
|
||||||
|
licenses.endObject();
|
||||||
|
licenses.endArray();
|
||||||
|
licenses.endObject();
|
||||||
|
return licenses.string();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static License generateLicenses(LicenseSpec spec) {
|
||||||
|
License.Builder builder = License.builder()
|
||||||
|
.uid(spec.uid)
|
||||||
|
.feature(spec.feature)
|
||||||
|
.type(spec.type)
|
||||||
|
.subscriptionType(spec.subscriptionType)
|
||||||
|
.issuedTo(spec.issuedTo)
|
||||||
|
.issuer(spec.issuer)
|
||||||
|
.maxNodes(spec.maxNodes);
|
||||||
|
|
||||||
|
if (spec.expiryDate != null) {
|
||||||
|
builder.expiryDate(DateUtils.endOfTheDay(spec.expiryDate));
|
||||||
|
} else {
|
||||||
|
builder.expiryDate(spec.expiryDateInMillis);
|
||||||
|
}
|
||||||
|
if (spec.issueDate != null) {
|
||||||
|
builder.issueDate(DateUtils.beginningOfTheDay(spec.issueDate));
|
||||||
|
} else {
|
||||||
|
builder.issueDate(spec.issueDateInMillis);
|
||||||
|
}
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void assertLicenseSpec(LicenseSpec spec, License license) {
|
||||||
|
MatcherAssert.assertThat(license.uid(), equalTo(spec.uid));
|
||||||
|
MatcherAssert.assertThat(license.issuedTo(), equalTo(spec.issuedTo));
|
||||||
|
MatcherAssert.assertThat(license.issuer(), equalTo(spec.issuer));
|
||||||
|
MatcherAssert.assertThat(license.type(), equalTo(spec.type));
|
||||||
|
MatcherAssert.assertThat(license.maxNodes(), equalTo(spec.maxNodes));
|
||||||
|
if (spec.issueDate != null) {
|
||||||
|
MatcherAssert.assertThat(license.issueDate(), equalTo(DateUtils.beginningOfTheDay(spec.issueDate)));
|
||||||
|
} else {
|
||||||
|
MatcherAssert.assertThat(license.issueDate(), equalTo(spec.issueDateInMillis));
|
||||||
|
}
|
||||||
|
if (spec.expiryDate != null) {
|
||||||
|
MatcherAssert.assertThat(license.expiryDate(), equalTo(DateUtils.endOfTheDay(spec.expiryDate)));
|
||||||
|
} else {
|
||||||
|
MatcherAssert.assertThat(license.expiryDate(), equalTo(spec.expiryDateInMillis));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class LicenseSpec {
|
||||||
|
public final int version;
|
||||||
|
public final String feature;
|
||||||
|
public final String issueDate;
|
||||||
|
public final long issueDateInMillis;
|
||||||
|
public final String expiryDate;
|
||||||
|
public final long expiryDateInMillis;
|
||||||
|
public final String uid;
|
||||||
|
public final String type;
|
||||||
|
public final String subscriptionType;
|
||||||
|
public final String issuedTo;
|
||||||
|
public final String issuer;
|
||||||
|
public final int maxNodes;
|
||||||
|
|
||||||
|
public LicenseSpec(String issueDate, String expiryDate) {
|
||||||
|
this(License.VERSION_CURRENT, UUID.randomUUID().toString(), "feature", issueDate, expiryDate, "trial", "none", "customer",
|
||||||
|
"elasticsearch", 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LicenseSpec(int version, String uid, String feature, long issueDateInMillis, long expiryDateInMillis, String type,
|
||||||
|
String subscriptionType, String issuedTo, String issuer, int maxNodes) {
|
||||||
|
this.version = version;
|
||||||
|
this.feature = feature;
|
||||||
|
this.issueDateInMillis = issueDateInMillis;
|
||||||
|
this.issueDate = null;
|
||||||
|
this.expiryDateInMillis = expiryDateInMillis;
|
||||||
|
this.expiryDate = null;
|
||||||
|
this.uid = uid;
|
||||||
|
this.type = type;
|
||||||
|
this.subscriptionType = subscriptionType;
|
||||||
|
this.issuedTo = issuedTo;
|
||||||
|
this.issuer = issuer;
|
||||||
|
this.maxNodes = maxNodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LicenseSpec(int version, String uid, String feature, String issueDate, String expiryDate, String type,
|
||||||
|
String subscriptionType, String issuedTo, String issuer, int maxNodes) {
|
||||||
|
this.version = version;
|
||||||
|
this.feature = feature;
|
||||||
|
this.issueDate = issueDate;
|
||||||
|
this.issueDateInMillis = -1;
|
||||||
|
this.expiryDate = expiryDate;
|
||||||
|
this.expiryDateInMillis = -1;
|
||||||
|
this.uid = uid;
|
||||||
|
this.type = type;
|
||||||
|
this.subscriptionType = subscriptionType;
|
||||||
|
this.issuedTo = issuedTo;
|
||||||
|
this.issuer = issuer;
|
||||||
|
this.maxNodes = maxNodes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Path getTestPriKeyPath() throws Exception {
|
public static Path getTestPriKeyPath() throws Exception {
|
||||||
return getResourcePath("/private.key");
|
return getResourcePath("/private.key");
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,8 +11,6 @@ import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.license.TrialLicense;
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -21,7 +19,7 @@ import java.util.Base64;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.elasticsearch.license.core.CryptUtils.encrypt;
|
import static org.elasticsearch.license.CryptUtils.encrypt;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
package org.elasticsearch.xpack.monitoring.agent.collector.cluster;
|
package org.elasticsearch.xpack.monitoring.agent.collector.cluster;
|
||||||
|
|
||||||
import org.elasticsearch.action.admin.cluster.stats.ClusterStatsResponse;
|
import org.elasticsearch.action.admin.cluster.stats.ClusterStatsResponse;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.xpack.monitoring.agent.exporter.MonitoringDoc;
|
import org.elasticsearch.xpack.monitoring.agent.exporter.MonitoringDoc;
|
||||||
|
|
||||||
public class ClusterInfoMonitoringDoc extends MonitoringDoc {
|
public class ClusterInfoMonitoringDoc extends MonitoringDoc {
|
||||||
|
|
|
@ -10,7 +10,7 @@ import org.elasticsearch.common.collect.MapBuilder;
|
||||||
import org.elasticsearch.common.hash.MessageDigests;
|
import org.elasticsearch.common.hash.MessageDigests;
|
||||||
import org.elasticsearch.common.xcontent.ToXContent;
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.xpack.monitoring.agent.collector.cluster.ClusterInfoMonitoringDoc;
|
import org.elasticsearch.xpack.monitoring.agent.collector.cluster.ClusterInfoMonitoringDoc;
|
||||||
import org.elasticsearch.xpack.monitoring.agent.resolver.MonitoringIndexNameResolver;
|
import org.elasticsearch.xpack.monitoring.agent.resolver.MonitoringIndexNameResolver;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.transport.LocalTransportAddress;
|
import org.elasticsearch.common.transport.LocalTransportAddress;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.xpack.monitoring.agent.collector.cluster.ClusterInfoMonitoringDoc;
|
import org.elasticsearch.xpack.monitoring.agent.collector.cluster.ClusterInfoMonitoringDoc;
|
||||||
import org.elasticsearch.xpack.monitoring.agent.exporter.MonitoringTemplateUtils;
|
import org.elasticsearch.xpack.monitoring.agent.exporter.MonitoringTemplateUtils;
|
||||||
import org.elasticsearch.xpack.monitoring.agent.resolver.MonitoringIndexNameResolverTestCase;
|
import org.elasticsearch.xpack.monitoring.agent.resolver.MonitoringIndexNameResolverTestCase;
|
||||||
|
|
|
@ -10,7 +10,7 @@ import org.elasticsearch.action.get.GetResponse;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.index.query.QueryBuilders;
|
import org.elasticsearch.index.query.QueryBuilders;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
||||||
import org.elasticsearch.xpack.monitoring.MonitoringSettings;
|
import org.elasticsearch.xpack.monitoring.MonitoringSettings;
|
||||||
import org.elasticsearch.xpack.monitoring.agent.collector.cluster.ClusterStatsCollector;
|
import org.elasticsearch.xpack.monitoring.agent.collector.cluster.ClusterStatsCollector;
|
||||||
|
|
|
@ -23,7 +23,6 @@ import org.elasticsearch.client.transport.TransportClient;
|
||||||
import org.elasticsearch.common.network.NetworkModule;
|
import org.elasticsearch.common.network.NetworkModule;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.util.concurrent.ThreadContext;
|
import org.elasticsearch.common.util.concurrent.ThreadContext;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.rest.RestStatus;
|
import org.elasticsearch.rest.RestStatus;
|
||||||
import org.elasticsearch.test.SecurityIntegTestCase;
|
import org.elasticsearch.test.SecurityIntegTestCase;
|
||||||
|
|
|
@ -9,18 +9,18 @@ import java.util.Arrays;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.elasticsearch.license.core.License.OperationMode;
|
import org.elasticsearch.license.License.OperationMode;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.xpack.monitoring.Monitoring;
|
import org.elasticsearch.xpack.monitoring.Monitoring;
|
||||||
import org.elasticsearch.xpack.security.Security;
|
import org.elasticsearch.xpack.security.Security;
|
||||||
import org.hamcrest.Matchers;
|
import org.hamcrest.Matchers;
|
||||||
|
|
||||||
import static org.elasticsearch.license.core.License.OperationMode.MISSING;
|
import static org.elasticsearch.license.License.OperationMode.MISSING;
|
||||||
import static org.elasticsearch.license.core.License.OperationMode.BASIC;
|
import static org.elasticsearch.license.License.OperationMode.BASIC;
|
||||||
import static org.elasticsearch.license.core.License.OperationMode.GOLD;
|
import static org.elasticsearch.license.License.OperationMode.GOLD;
|
||||||
import static org.elasticsearch.license.core.License.OperationMode.PLATINUM;
|
import static org.elasticsearch.license.License.OperationMode.PLATINUM;
|
||||||
import static org.elasticsearch.license.core.License.OperationMode.STANDARD;
|
import static org.elasticsearch.license.License.OperationMode.STANDARD;
|
||||||
import static org.elasticsearch.license.core.License.OperationMode.TRIAL;
|
import static org.elasticsearch.license.License.OperationMode.TRIAL;
|
||||||
import static org.hamcrest.Matchers.is;
|
import static org.hamcrest.Matchers.is;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -12,7 +12,6 @@ import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.io.stream.Writeable;
|
import org.elasticsearch.common.io.stream.Writeable;
|
||||||
import org.elasticsearch.common.xcontent.ToXContent;
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.xpack.XPackBuild;
|
import org.elasticsearch.xpack.XPackBuild;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
|
@ -13,7 +13,7 @@ import java.util.function.BiFunction;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.logging.LoggerMessageFormat;
|
import org.elasticsearch.common.logging.LoggerMessageFormat;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.license.core.License.OperationMode;
|
import org.elasticsearch.license.License.OperationMode;
|
||||||
import org.elasticsearch.xpack.graph.Graph;
|
import org.elasticsearch.xpack.graph.Graph;
|
||||||
import org.elasticsearch.xpack.monitoring.Monitoring;
|
import org.elasticsearch.xpack.monitoring.Monitoring;
|
||||||
import org.elasticsearch.xpack.monitoring.MonitoringSettings;
|
import org.elasticsearch.xpack.monitoring.MonitoringSettings;
|
||||||
|
|
|
@ -12,7 +12,7 @@ import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.license.XPackInfoResponse;
|
import org.elasticsearch.license.XPackInfoResponse;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.license.LicenseService;
|
import org.elasticsearch.license.LicenseService;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.transport.TransportService;
|
import org.elasticsearch.transport.TransportService;
|
||||||
|
|
|
@ -6,25 +6,13 @@
|
||||||
package org.elasticsearch.xpack.action;
|
package org.elasticsearch.xpack.action;
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionResponse;
|
import org.elasticsearch.action.ActionResponse;
|
||||||
import org.elasticsearch.common.Nullable;
|
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.io.stream.Writeable;
|
|
||||||
import org.elasticsearch.common.xcontent.ToXContent;
|
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
|
||||||
import org.elasticsearch.license.core.License;
|
|
||||||
import org.elasticsearch.xpack.XPackBuild;
|
|
||||||
import org.elasticsearch.xpack.XPackFeatureSet;
|
import org.elasticsearch.xpack.XPackFeatureSet;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -10,7 +10,7 @@ import org.elasticsearch.action.support.ActionFilters;
|
||||||
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.license.XPackInfoResponse;
|
import org.elasticsearch.license.XPackInfoResponse;
|
||||||
import org.elasticsearch.license.core.License;
|
import org.elasticsearch.license.License;
|
||||||
import org.elasticsearch.license.LicenseService;
|
import org.elasticsearch.license.LicenseService;
|
||||||
import org.elasticsearch.xpack.security.user.AnonymousUser;
|
import org.elasticsearch.xpack.security.user.AnonymousUser;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
Loading…
Reference in New Issue