mirror of
https://github.com/nodemailer/wildduck.git
synced 2024-09-20 15:26:03 +08:00
Merge pull request #441 from nodemailer/zms-61
Include BIMI in search results
This commit is contained in:
commit
fd8b65b11f
|
@ -96,6 +96,45 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler, setti
|
|||
});
|
||||
};
|
||||
|
||||
const applyBimiToListing = async messages => {
|
||||
let bimiList = new Set();
|
||||
for (let messageData of messages) {
|
||||
if (
|
||||
messageData.verificationResults &&
|
||||
messageData.verificationResults.bimi &&
|
||||
typeof messageData.verificationResults.bimi.toHexString === 'function'
|
||||
) {
|
||||
let bimiId = messageData.verificationResults.bimi.toString();
|
||||
bimiList.add(bimiId);
|
||||
}
|
||||
}
|
||||
|
||||
if (bimiList.size) {
|
||||
try {
|
||||
let bimiEntries = await db.database
|
||||
.collection('bimi')
|
||||
.find({ _id: { $in: Array.from(bimiList).map(id => new ObjectId(id)) } })
|
||||
.toArray();
|
||||
|
||||
for (let messageData of messages) {
|
||||
if (messageData.verificationResults && messageData.verificationResults.bimi) {
|
||||
let bimiData = bimiEntries.find(entry => entry._id.equals(messageData.verificationResults.bimi));
|
||||
if (bimiData?.content && !bimiData?.error) {
|
||||
messageData.bimi = {
|
||||
certified: bimiData.type === 'authority',
|
||||
url: bimiData.url,
|
||||
image: `data:image/svg+xml;base64,${bimiData.content.toString('base64')}`
|
||||
};
|
||||
}
|
||||
delete messageData.verificationResults.bimi;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
log.error('BIMI', 'messages=%s error=%s', Array.from(bimiList).join(','), err.message);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const putMessageHandler = async (req, res) => {
|
||||
res.charSet('utf-8');
|
||||
|
||||
|
@ -449,42 +488,7 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler, setti
|
|||
listing.results = await addThreadCountersToMessageList(user, listing.results);
|
||||
}
|
||||
|
||||
let bimiList = new Set();
|
||||
for (let messageData of listing.results) {
|
||||
if (
|
||||
messageData.verificationResults &&
|
||||
messageData.verificationResults.bimi &&
|
||||
typeof messageData.verificationResults.bimi.toHexString === 'function'
|
||||
) {
|
||||
let bimiId = messageData.verificationResults.bimi.toString();
|
||||
bimiList.add(bimiId);
|
||||
}
|
||||
}
|
||||
|
||||
if (bimiList.size) {
|
||||
try {
|
||||
let bimiEntries = await db.database
|
||||
.collection('bimi')
|
||||
.find({ _id: { $in: Array.from(bimiList).map(id => new ObjectId(id)) } })
|
||||
.toArray();
|
||||
|
||||
for (let messageData of listing.results) {
|
||||
if (messageData.verificationResults && messageData.verificationResults.bimi) {
|
||||
let bimiData = bimiEntries.find(entry => entry._id.equals(messageData.verificationResults.bimi));
|
||||
if (bimiData?.content && !bimiData?.error) {
|
||||
messageData.bimi = {
|
||||
certified: bimiData.type === 'authority',
|
||||
url: bimiData.url,
|
||||
image: `data:image/svg+xml;base64,${bimiData.content.toString('base64')}`
|
||||
};
|
||||
}
|
||||
delete messageData.verificationResults.bimi;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
log.error('BIMI', 'messages=%s error=%s', Array.from(bimiList).join(','), err.message);
|
||||
}
|
||||
}
|
||||
await applyBimiToListing(listing.results);
|
||||
|
||||
let response = {
|
||||
success: true,
|
||||
|
@ -608,10 +612,11 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler, setti
|
|||
flagged: true,
|
||||
draft: true,
|
||||
thread: true,
|
||||
flags: true
|
||||
flags: true,
|
||||
verificationResults: true
|
||||
}
|
||||
},
|
||||
paginatedField: order !== undefined ? 'idate' : "_id",
|
||||
paginatedField: order !== undefined ? 'idate' : '_id',
|
||||
sortAscending: order === 'asc' ? true : undefined
|
||||
};
|
||||
|
||||
|
@ -640,6 +645,8 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler, setti
|
|||
listing.results = await addThreadCountersToMessageList(user, listing.results);
|
||||
}
|
||||
|
||||
await applyBimiToListing(listing.results);
|
||||
|
||||
let response = {
|
||||
success: true,
|
||||
query,
|
||||
|
|
Loading…
Reference in a new issue