class JiraPublisher extends AbstractWebhookPublisher implements Publisher {

    private static final Logger LOGGER = Logger.getLogger(JiraPublisher.class);
    private static final PebbleEngine ENGINE = new PebbleEngine.Builder().defaultEscapingStrategy("json").build();

    private String jiraProjectKey;
    private String jiraTicketType;

    @Override
    public void inform(final PublishContext ctx, final Notification notification, final JsonObject config) {
        if (config == null) {
            LOGGER.warn("No publisher configuration provided; Skipping notification (%s)".formatted(ctx));
            return;
        }

        jiraTicketType = config.getString("jiraTicketType", null);
        if (jiraTicketType == null) {
            LOGGER.warn("No JIRA ticket type configured; Skipping notification (%s)".formatted(ctx));
            return;
        }

        jiraProjectKey = config.getString(CONFIG_DESTINATION, null);
        if (jiraProjectKey == null) {
            LOGGER.warn("No JIRA project key configured; Skipping notification (%s)".formatted(ctx));
            return;
        }

        publish(ctx, getTemplate(config), notification, config);
    }

    @Override
    public PebbleEngine getTemplateEngine() {
        return ENGINE;
    }

    @Override
    public String getDestinationUrl(final JsonObject config) {<FILL_FUNCTION_BODY>}

    @Override
    protected AuthCredentials getAuthCredentials() {
        try (final QueryManager qm = new QueryManager()) {
            final ConfigProperty jiraUsernameProp = qm.getConfigProperty(JIRA_USERNAME.getGroupName(), JIRA_USERNAME.getPropertyName());
            final String jiraUsername = (jiraUsernameProp == null) ? null : jiraUsernameProp.getPropertyValue();
            final ConfigProperty jiraPasswordProp = qm.getConfigProperty(JIRA_PASSWORD.getGroupName(), JIRA_PASSWORD.getPropertyName());
            final String jiraPassword = (jiraPasswordProp == null || jiraPasswordProp.getPropertyValue() == null) ? null : DataEncryption.decryptAsString(jiraPasswordProp.getPropertyValue());
            return new AuthCredentials(jiraUsername, jiraPassword);
        } catch (final Exception e) {
            throw new PublisherException("An error occurred during the retrieval of Jira credentials", e);
        }
    }

    @Override
    public void enrichTemplateContext(final Map<String, Object> context) {
        context.put("jiraProjectKey", jiraProjectKey);
        context.put("jiraTicketType", jiraTicketType);
    }
}

        try (final QueryManager qm = new QueryManager()) {
            final String baseUrl = qm.getConfigProperty(JIRA_URL.getGroupName(), JIRA_URL.getPropertyName()).getPropertyValue();
            return (baseUrl.endsWith("/") ? baseUrl : baseUrl + '/') + "rest/api/2/issue";
        } catch (final Exception e) {
            throw new PublisherException("An error occurred during the retrieval of the Jira URL", e);
        }
    
<methods>public non-sealed void <init>() ,public void publish(PublishContext, PebbleTemplate, Notification, JsonObject) <variables>