in src/amo/reducers/errors.js [24:80]
function getMessagesFromError(error) {
const errorData = {
code: ERROR_UNKNOWN,
messages: [],
};
log.debug('Extracting messages from error object:', error);
const logCodeChange = ({ oldCode, newCode }) => {
log.warn(`Replacing error code ${oldCode} with ${newCode}`);
};
if (error && error.response && error.response.data) {
// Extract a code and messages from the JSON response.
Object.keys(error.response.data).forEach((key) => {
const value = error.response.data[key];
if (Array.isArray(value)) {
// Most API reponse errors will consist of a key (which could be
// a form field) and an array of localized messages.
// More info:
// http://addons-server.readthedocs.io/en/latest/topics/api/overview.html#bad-requests
value.forEach((message) => {
// Add a field specific error message. We do not prefix the message with
// `key`, which is the field name (or `non_field_errors`), since it is not
// localized.
errorData.messages.push(sanitizeMessage(message));
});
} else if (key === 'code') {
errorData.code = value;
} else if (key === 'is_disabled_by_developer') {
if (value === true) {
const newCode = ERROR_ADDON_DISABLED_BY_DEV;
logCodeChange({ oldCode: errorData.code, newCode });
errorData.code = newCode;
}
} else if (key === 'is_disabled_by_mozilla') {
if (value === true) {
const newCode = ERROR_ADDON_DISABLED_BY_ADMIN;
logCodeChange({ oldCode: errorData.code, newCode });
errorData.code = newCode;
}
} else if (typeof value === 'string' || typeof value === 'object') {
// This is a catch-all for errors that are not structured like
// Django/DRF form field errors. It won't be perfect but at least
// the user will see some kind of error.
errorData.messages.push(sanitizeMessage(value));
} else {
log.warn(`Ignoring key "${key}": "${value}" in data of error response`);
}
});
}
if (!errorData.messages.length) {
log.warn(`Error object did not contain any messages: ${error}`);
}
return errorData;
}