Skip to content

Commit

Permalink
extension changing of subscription to invalid by 3 months
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Jan 18, 2024
1 parent 0e9a8e6 commit c7720b7
Show file tree
Hide file tree
Showing 5 changed files with 162 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import com.evolveum.midpoint.repo.common.ObjectOperationPolicyHelper;

import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.result.OperationResultStatus;

Expand Down Expand Up @@ -96,7 +97,6 @@
import com.evolveum.midpoint.schema.internals.InternalsConfig;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.repo.common.util.SubscriptionUtil.SubscriptionType;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.security.api.MidPointPrincipal;
import com.evolveum.midpoint.security.api.SecurityContextManager;
Expand Down Expand Up @@ -330,11 +330,11 @@ public String getDescribe() {

@Override
public String getObject() {
SubscriptionType subscriptionType = MidPointApplication.get().getSubscriptionType();
if (!subscriptionType.isCorrect()) {
SubscriptionWrapper subscription = MidPointApplication.get().getSubscriptionWrapper();
if (!subscription.isCorrect()) {
return " " + createStringResource("PageBase.nonActiveSubscriptionMessage").getString();
}
if (subscriptionType == SubscriptionType.DEMO_SUBSCRIPTION) {
if (subscription.getType() == SubscriptionWrapper.SubscriptionType.DEMO_SUBSCRIPTION) {
return " " + createStringResource("PageBase.demoSubscriptionMessage").getString();
}
return "";
Expand All @@ -357,9 +357,9 @@ public boolean isVisible() {
}

private boolean isFooterVisible() {
SubscriptionType subscriptionType = MidPointApplication.get().getSubscriptionType();
return !subscriptionType.isCorrect()
|| subscriptionType == SubscriptionType.DEMO_SUBSCRIPTION;
SubscriptionWrapper subscription = MidPointApplication.get().getSubscriptionWrapper();
return !subscription.isCorrect()
|| subscription.getType() == SubscriptionWrapper.SubscriptionType.DEMO_SUBSCRIPTION;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -121,7 +123,6 @@
import com.evolveum.midpoint.prism.util.PolyStringUtils;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.repo.common.expression.ExpressionUtil;
import com.evolveum.midpoint.repo.common.util.SubscriptionUtil.SubscriptionType;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
Expand Down Expand Up @@ -3280,8 +3281,8 @@ private static VisualizationDto createTaskChangesDto(String titleKey, String box
}

public static String getMidpointCustomSystemName(PageAdminLTE pageBase, String defaultSystemNameKey) {
SubscriptionType subscriptionType = MidPointApplication.get().getSubscriptionType();
if (!subscriptionType.isCorrect() || subscriptionType == SubscriptionType.DEMO_SUBSCRIPTION) {
SubscriptionWrapper subscription = MidPointApplication.get().getSubscriptionWrapper();
if (!subscription.isCorrect() || subscription.getType() == SubscriptionWrapper.SubscriptionType.DEMO_SUBSCRIPTION) {
return pageBase.createStringResource(defaultSystemNameKey).getString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import com.evolveum.midpoint.common.ActivationComputer;
import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;

import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper;

import jakarta.servlet.ServletContext;
import javax.xml.datatype.Duration;

Expand All @@ -33,7 +35,6 @@
import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
import org.apache.wicket.core.util.resource.locator.caching.CachingResourceStreamLocator;
import org.apache.wicket.csp.CSPDirective;
import org.apache.wicket.csp.CSPDirectiveSrcValue;
import org.apache.wicket.devutils.inspector.InspectorPage;
import org.apache.wicket.devutils.inspector.LiveSessionsPage;
import org.apache.wicket.devutils.pagestore.PageStorePage;
Expand Down Expand Up @@ -210,7 +211,7 @@ public class MidPointApplication extends AuthenticatedWebApplication implements
private WebApplicationConfiguration webApplicationConfiguration;

private DeploymentInformationType deploymentInfo;
private SubscriptionUtil.SubscriptionType subscriptionType;
private SubscriptionWrapper subscriptionWrapper;

public static final String MOUNT_INTERNAL_SERVER_ERROR = "/error";
public static final String MOUNT_UNAUTHORIZED_ERROR = "/error/401";
Expand Down Expand Up @@ -369,9 +370,9 @@ public DeploymentInformationType getDeploymentInfo() {
}

@NotNull
public SubscriptionUtil.SubscriptionType getSubscriptionType() {
public SubscriptionWrapper getSubscriptionWrapper() {
// should not be null, unless called before initialization, in which case we provide default NONE
return Objects.requireNonNullElse(subscriptionType, SubscriptionUtil.SubscriptionType.NONE);
return Objects.requireNonNullElse(subscriptionWrapper, SubscriptionUtil.createNoneSubscription());
}

private void initializeSchrodinger() {
Expand Down Expand Up @@ -678,7 +679,7 @@ public void update(@Nullable SystemConfigurationType value) {
private void updateDeploymentInfo(@Nullable SystemConfigurationType value) {
deploymentInfo = value != null ? value.getDeploymentInformation() : null;
String subscriptionId = deploymentInfo != null ? deploymentInfo.getSubscriptionIdentifier() : null;
subscriptionType = SubscriptionUtil.getSubscriptionType(subscriptionId);
subscriptionWrapper = SubscriptionUtil.getSubscriptionType(subscriptionId);
}

/* (non-Javadoc)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,16 @@

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.validator.routines.checkdigit.VerhoeffCheckDigit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import com.evolveum.midpoint.common.LocalizationService;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.repo.common.SystemObjectCache;
import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper.SubscriptionValidity;
import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper.SubscriptionType;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
Expand All @@ -33,47 +36,56 @@ public class SubscriptionUtil {
private static final Trace LOGGER = TraceManager.getTrace(SubscriptionUtil.class);

@NotNull
public static SubscriptionType getSubscriptionType(@Nullable SystemConfigurationType systemConfigurationType) {
public static SubscriptionWrapper getSubscriptionType(@Nullable SystemConfigurationType systemConfigurationType) {
if (systemConfigurationType == null) {
return SubscriptionType.NONE;
return createNoneSubscription();
}

DeploymentInformationType deploymentInformation = systemConfigurationType.getDeploymentInformation();
if (deploymentInformation == null) {
return SubscriptionType.NONE;
return createNoneSubscription();
}

return getSubscriptionType(deploymentInformation.getSubscriptionIdentifier());
}

public static SubscriptionWrapper createNoneSubscription() {
return new SubscriptionWrapper(SubscriptionValidity.NONE);
}

public static SubscriptionWrapper createInvalidSubscription() {
return new SubscriptionWrapper(SubscriptionValidity.INVALID);
}

@NotNull
public static SubscriptionType getSubscriptionType(String subscriptionId) {
public static SubscriptionWrapper getSubscriptionType(String subscriptionId) {
if (StringUtils.isEmpty(subscriptionId)) {
return SubscriptionType.NONE;
return createNoneSubscription();
}
if (!NumberUtils.isDigits(subscriptionId)) {
return SubscriptionType.INVALID;
return createInvalidSubscription();
}
if (subscriptionId.length() < 11) {
return SubscriptionType.INVALID;
return createInvalidSubscription();
}

SubscriptionType type = SubscriptionType.resolveType(subscriptionId.substring(0, 2));
if (type == null || !type.isCorrect()) {
return SubscriptionType.INVALID;
if (type == null) {
return createInvalidSubscription();
}

String substring1 = subscriptionId.substring(2, 4);
String substring2 = subscriptionId.substring(4, 6);
SubscriptionValidity successValidity = SubscriptionValidity.VALID;
try {
if (Integer.parseInt(substring1) < 1 || Integer.parseInt(substring1) > 12) {
return SubscriptionType.INVALID;
return createInvalidSubscription();
}

SimpleDateFormat dateFormat = new SimpleDateFormat("yy");
String currentYear = dateFormat.format(Calendar.getInstance().getTime());
if (Integer.parseInt(substring2) < Integer.parseInt(currentYear)) {
return SubscriptionType.INVALID;
if (Integer.parseInt(substring2) < Integer.parseInt(currentYear) && Integer.parseInt(substring1) < 10) {
return createInvalidSubscription();
}

String expDateStr = subscriptionId.substring(2, 6);
Expand All @@ -84,17 +96,33 @@ public static SubscriptionType getSubscriptionType(String subscriptionId) {
expireCalendarValue.add(Calendar.MONTH, 1);
Date currentDate = new Date(System.currentTimeMillis());
if (expireCalendarValue.getTime().before(currentDate) || expireCalendarValue.getTime().equals(currentDate)) {
return SubscriptionType.INVALID;
if (expiresIn(expireCalendarValue, currentDate, 1)) {
successValidity = SubscriptionValidity.INVALID_FIRST_MONTH;
} else if (expiresIn(expireCalendarValue, currentDate, 2)) {
successValidity = SubscriptionValidity.INVALID_SECOND_MONTH;
} else if (expiresIn(expireCalendarValue, currentDate, 3)) {
successValidity = SubscriptionValidity.INVALID_THIRD_MONTH;
} else {
return createInvalidSubscription();
}
}
} catch (Exception ex) {
return SubscriptionType.INVALID;
return createInvalidSubscription();
}
VerhoeffCheckDigit checkDigit = new VerhoeffCheckDigit();
if (!checkDigit.isValid(subscriptionId)) {
return SubscriptionType.INVALID;
return createInvalidSubscription();
}

return type;
return new SubscriptionWrapper(type, successValidity);
}

private static boolean expiresIn(Calendar expireCalendarValue, Date currentDate, int i) {
Date plusOneMonth = DateUtils.addMonths(currentDate, i);
if (expireCalendarValue.getTime().before(plusOneMonth) || expireCalendarValue.getTime().equals(plusOneMonth)) {
return false;
}
return true;
}

/**
Expand All @@ -120,40 +148,4 @@ public static String missingSubscriptionAppeal(
"No active subscription. Please support midPoint by purchasing a subscription.");
}

/**
* Enumeration for the type of subscription.
*/
public enum SubscriptionType {

NONE(null),
INVALID(null),
ANNUAL_SUBSCRIPTION("01"),
PLATFORM_SUBSCRIPTION("02"),
DEPLOYMENT_SUBSCRIPTION("03"),
DEVELOPMENT_SUBSCRIPTION("04"),
DEMO_SUBSCRIPTION("05");

private final String subscriptionType;

SubscriptionType(String subscriptionType) {
this.subscriptionType = subscriptionType;
}

public boolean isCorrect() {
return subscriptionType != null;
}

private static final Map<String, SubscriptionType> CODE_TO_TYPE;

static {
CODE_TO_TYPE = Arrays.stream(values())
.filter(v -> v.subscriptionType != null)
.collect(Collectors.toUnmodifiableMap(v -> v.subscriptionType, Function.identity()));
}

@Nullable
public static SubscriptionType resolveType(String code) {
return CODE_TO_TYPE.get(code);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package com.evolveum.midpoint.repo.common.util;

import org.jetbrains.annotations.Nullable;

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
* Wrapper for subscription. Contains information about type and validity.
*/
public class SubscriptionWrapper {

private final SubscriptionType type;
private final SubscriptionValidity validity;

SubscriptionWrapper(SubscriptionType type, SubscriptionValidity validity) {
this.type = type;
this.validity = resolveValidity(type, validity);
}

private SubscriptionValidity resolveValidity(SubscriptionType type, SubscriptionValidity originalValidity) {
if (type == SubscriptionType.DEMO_SUBSCRIPTION
&& (originalValidity == SubscriptionValidity.INVALID_FIRST_MONTH
|| originalValidity == SubscriptionValidity.INVALID_SECOND_MONTH
|| originalValidity == SubscriptionValidity.INVALID_THIRD_MONTH)) {
return SubscriptionValidity.INVALID;
}
return originalValidity;
}

SubscriptionWrapper(SubscriptionValidity subscriptionValidity) {
this(null, subscriptionValidity);
}

public boolean isCorrect() {
if (type != null && (validity == SubscriptionValidity.VALID
|| validity == SubscriptionValidity.INVALID_FIRST_MONTH
|| validity == SubscriptionValidity.INVALID_SECOND_MONTH
|| validity == SubscriptionValidity.INVALID_THIRD_MONTH)) {
return true;
}
return false;
}

public SubscriptionType getType() {
return type;
}

public SubscriptionValidity getValidity() {
return validity;
}

/**
* Enumeration for the type of subscription.
*/
public enum SubscriptionType {

ANNUAL_SUBSCRIPTION("01"),
PLATFORM_SUBSCRIPTION("02"),
DEPLOYMENT_SUBSCRIPTION("03"),
DEVELOPMENT_SUBSCRIPTION("04"),
DEMO_SUBSCRIPTION("05");

private final String subscriptionType;

SubscriptionType(String subscriptionType) {
this.subscriptionType = subscriptionType;
}

// public boolean isCorrect() {
// return subscriptionType != null;
// }

private static final Map<String, SubscriptionType> CODE_TO_TYPE;

static {
CODE_TO_TYPE = Arrays.stream(values())
.filter(v -> v.subscriptionType != null)
.collect(Collectors.toUnmodifiableMap(v -> v.subscriptionType, Function.identity()));
}

@Nullable
public static SubscriptionType resolveType(String code) {
return CODE_TO_TYPE.get(code);
}
}

/**
* Enumeration for the validity of subscription.
*/
public enum SubscriptionValidity {
NONE,
INVALID,
INVALID_FIRST_MONTH,
INVALID_SECOND_MONTH,
INVALID_THIRD_MONTH,
VALID
}
}

0 comments on commit c7720b7

Please sign in to comment.