RbacTranslations.java
package net.hostsharing.hsadminng.rbac.context;
import net.hostsharing.hsadminng.config.MessageTranslator;
import net.hostsharing.hsadminng.config.RetroactiveTranslatorWithPlaceholderSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
// HOWTO translate messages with placeholders which got created without i18n support, in this case in a PostgreSQL constraint trigger
@Service
public class RbacTranslations implements RetroactiveTranslatorWithPlaceholderSupport {
public static final String ERROR_400_PREFIX = "ERROR: [400] ";
public static final String ERROR_403_PREFIX = "ERROR: [403] ";
private static final List<TranslatableMessage> TRANSLATABLE_MESSAGES = List.of(
new TranslatableMessage(
ERROR_400_PREFIX,
"(?s)^ERROR: new row for relation \"subject\" violates check constraint \"check_valid_api_key_subject_name\".*Detail: Failing row contains \\([^,]+, (.*), API_KEY[^)]*\\)\\..*$",
"rbac.api-key-subject-name-{0}-does-not-match-required-pattern"),
new TranslatableMessage(
ERROR_403_PREFIX,
"^ERROR: \\[403] subject (.+) has no permission to assume role (.+)$",
"rbac.subject-{0}-has-no-permisson-to-assume-role-{1}")
);
@Autowired
private MessageTranslator messageTranslator;
@Override
public MessageTranslator getMessageTranslator() {
return messageTranslator;
}
@Override
public List<TranslatableMessage> getTranslatableMessages() {
return TRANSLATABLE_MESSAGES;
}
}