@Override public final AcmeException badAcmeNonce() { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), badAcmeNonce$str())); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String unexpectedContentTypeFromAcmeServer = "ELY10040: Unexpected content type in response from ACME server \"%s\"";
private HttpURLConnection sendGetRequest(String resourceUrl, int expectedResponseCode, String expectedContentType) throws AcmeException { try { final URL directoryUrl = new URL(resourceUrl); HttpURLConnection connection = (HttpURLConnection) directoryUrl.openConnection(); connection.setRequestMethod(GET); connection.setRequestProperty(ACCEPT_LANGUAGE, Locale.getDefault().toLanguageTag()); connection.setRequestProperty(USER_AGENT, USER_AGENT_STRING); connection.connect(); int responseCode = connection.getResponseCode(); if (responseCode != expectedResponseCode) { handleAcmeErrorResponse(connection, responseCode); } String contentType = connection.getContentType(); if (! checkContentType(connection, expectedContentType)) { throw acme.unexpectedContentTypeFromAcmeServer(contentType); } return connection; } catch (Exception e) { if (e instanceof AcmeException) { throw (AcmeException) e; } else { throw new AcmeException(e); } } }
@Override protected void executeRuntimeStep(final OperationContext context, final ModelNode operation) throws OperationFailedException { boolean staging = STAGING.resolveModelAttribute(context, operation).asBoolean(); AcmeAccount acmeAccount = getAcmeAccount(context, staging); try { acmeClient.deactivateAccount(acmeAccount, staging); } catch (AcmeException e) { throw ROOT_LOGGER.unableToDeactivateAccountWithCertificateAuthority(e, e.getLocalizedMessage()); } } }
throw (AcmeException) e; } else { throw new AcmeException(e);
@Override protected void executeRuntimeStep(final OperationContext context, final ModelNode operation) throws OperationFailedException { boolean staging = STAGING.resolveModelAttribute(context, operation).asBoolean(); AcmeAccount acmeAccount = getAcmeAccount(context, staging); try { AcmeMetadata metadata = acmeClient.getMetadata(acmeAccount, staging); if (metadata != null) { ModelNode result = context.getResult(); if (metadata.getTermsOfServiceUrl() != null) { result.get(ElytronDescriptionConstants.TERMS_OF_SERVICE).set(new ModelNode(metadata.getTermsOfServiceUrl())); } if (metadata.getWebsiteUrl() != null) { result.get(ElytronDescriptionConstants.WEBSITE).set(new ModelNode(metadata.getWebsiteUrl())); } String[] caaIdentitiesArray = metadata.getCAAIdentities(); ModelNode caaIdentities = new ModelNode(); if (caaIdentitiesArray != null && caaIdentitiesArray.length != 0) { for (int i = 0; i < caaIdentitiesArray.length; i++) { caaIdentities.add(caaIdentitiesArray[i]); } result.get(ElytronDescriptionConstants.CAA_IDENTITIES).set(caaIdentities); } result.get(ElytronDescriptionConstants.EXTERNAL_ACCOUNT_REQUIRED).set(metadata.isExternalAccountRequired()); } } catch (AcmeException e) { throw ROOT_LOGGER.unableToGetCertificateAuthorityMetadata(e, e.getLocalizedMessage()); } } }
@Override public final AcmeException noCertificateWillBeIssuedByAcmeServer() { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), noCertificateWillBeIssuedByAcmeServer$str())); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String unableToGetEncodedFormOfCertificateToBeRevoked = "ELY10046: Unable to get encoded form of certificate to be revoked";
throw new AcmeException(problemMessages); } else { throw acme.unexpectedResponseCodeFromAcmeServer(responseCode, responseMessage); throw (AcmeException) e; } else { throw new AcmeException(e);
@Override protected void executeRuntimeStep(final OperationContext context, final ModelNode operation) throws OperationFailedException { boolean staging = STAGING.resolveModelAttribute(context, operation).asBoolean(); AcmeAccountService acmeAccountService = getAcmeAccountService(context); AcmeAccount acmeAccount = getAcmeAccount(acmeAccountService, staging); try { acmeClient.changeAccountKey(acmeAccount, staging); acmeAccountService.saveCertificateAuthorityAccountKey(context); } catch (AcmeException e) { throw ROOT_LOGGER.unableToChangeAccountKeyWithCertificateAuthority(e, e.getLocalizedMessage()); } } }
@Override public final AcmeException userActionRequired(final String url) { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), userActionRequired$str(), url)); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String rateLimitExceededTryAgainLater = "ELY10052: Rate limit has been exceeded, try again after \"%s\"";
return connection.getResponseCode() == HttpURLConnection.HTTP_CREATED; } catch (IOException e) { throw new AcmeException(e);
@Override protected void executeRuntimeStep(final OperationContext context, final ModelNode operation) throws OperationFailedException { Boolean agreeToTermsOfService = UPDATE_AGREE_TO_TERMS_OF_SERVICE.resolveModelAttribute(context, operation).asBooleanOrNull(); boolean staging = STAGING.resolveModelAttribute(context, operation).asBoolean(); AcmeAccount acmeAccount = getAcmeAccount(context, staging); try { if (agreeToTermsOfService != null) { acmeClient.updateAccount(acmeAccount, staging, agreeToTermsOfService.booleanValue(), acmeAccount.getContactUrls()); } else { acmeClient.updateAccount(acmeAccount, staging, acmeAccount.getContactUrls()); } } catch (AcmeException e) { throw ROOT_LOGGER.unableToUpdateAccountWithCertificateAuthority(e, e.getLocalizedMessage()); } } }
@Override public final AcmeException noAccountLocationUrlProvidedByAcmeServer() { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), noAccountLocationUrlProvidedByAcmeServer$str())); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String unableToObtainNewNonceFromAcmeServer = "ELY10036: Unable to obtain new nonce from ACME server";
private HttpURLConnection sendGetRequest(String resourceUrl, int expectedResponseCode, String expectedContentType) throws AcmeException { try { final URL directoryUrl = new URL(resourceUrl); HttpURLConnection connection = (HttpURLConnection) directoryUrl.openConnection(); connection.setRequestMethod(GET); connection.setRequestProperty(ACCEPT_LANGUAGE, Locale.getDefault().toLanguageTag()); connection.setRequestProperty(USER_AGENT, USER_AGENT_STRING); connection.connect(); int responseCode = connection.getResponseCode(); if (responseCode != expectedResponseCode) { handleAcmeErrorResponse(connection, responseCode); } String contentType = connection.getContentType(); if (! checkContentType(connection, expectedContentType)) { throw acme.unexpectedContentTypeFromAcmeServer(contentType); } return connection; } catch (Exception e) { if (e instanceof AcmeException) { throw (AcmeException) e; } else { throw new AcmeException(e); } } }
@Override protected void executeRuntimeStep(final OperationContext context, final ModelNode operation) throws OperationFailedException { boolean agreeToTermsOfService = AGREE_TO_TERMS_OF_SERVICE.resolveModelAttribute(context, operation).asBoolean(); boolean staging = STAGING.resolveModelAttribute(context, operation).asBoolean(); AcmeAccount acmeAccount = getAcmeAccount(context, staging); try { acmeAccount.setTermsOfServiceAgreed(agreeToTermsOfService); boolean created = acmeClient.createAccount(acmeAccount, staging); if (! created) { throw ROOT_LOGGER.certificateAuthorityAccountAlreadyExists(ElytronDescriptionConstants.UPDATE_ACCOUNT, ElytronDescriptionConstants.CHANGE_ACCOUNT_KEY); } } catch (AcmeException e) { throw ROOT_LOGGER.unableToCreateAccountWithCertificateAuthority(e, e.getLocalizedMessage()); } } }
@Override public final AcmeException domainNameIsNull() { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), domainNameIsNull$str())); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String domainNamesIsEmpty = "ELY10043: Domain names is empty";
@Override public final AcmeException noCertificateUrlProvidedByAcmeServer() { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), noCertificateUrlProvidedByAcmeServer$str())); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String noCertificateWillBeIssuedByAcmeServer = "ELY10045: No certificate will be issued by the ACME server";
@Override public final AcmeException unableToDetermineKeyAuthorizationString(final Exception cause) { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), unableToDetermineKeyAuthorizationString$str()), cause); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String challengeResponseFailedValidationByAcmeServer = "ELY10048: Challenge response failed validation by the ACME server";
@Override public final AcmeException unableToDownloadCertificateChainFromAcmeServer(final Exception cause) { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), unableToDownloadCertificateChainFromAcmeServer$str()), cause); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String acmeAccountDoesNotExist = "ELY10050: ACME account does not exist";
@Override public final AcmeException rateLimitExceededTryAgainLater(final Instant instant) { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), rateLimitExceededTryAgainLater$str(), instant)); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String rateLimitExceeded = "ELY10053: Rate limit has been exceeded";
@Override public final AcmeException rateLimitExceeded() { final AcmeException result = new AcmeException(String.format(getLoggingLocale(), rateLimitExceeded$str())); final StackTraceElement[] st = result.getStackTrace(); result.setStackTrace(Arrays.copyOfRange(st, 1, st.length)); return result; } private static final String resourceNotSupportedByAcmeServer = "ELY10054: Resource not supported by the ACME server \"%s\"";