You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
"use strict";
|
|
|
|
const defaultValue = require("default-value");
|
|
|
|
const diffLists = require("../diff-lists");
|
|
|
|
function mapFields(eventContent) {
|
|
if (eventContent != null) {
|
|
let ipLiteralSetting = eventContent.allow_ip_literals;
|
|
|
|
return {
|
|
// Weird logic to implement this spec requirement: "Defaults to true if missing or otherwise not a boolean."
|
|
ipLiteralsAllowed: (ipLiteralSetting === false)
|
|
? false
|
|
: true,
|
|
allowedHosts: defaultValue(eventContent.allow, []),
|
|
deniedHosts: defaultValue(eventContent.deny, [])
|
|
};
|
|
} else {
|
|
return {
|
|
ipLiteralsAllowed: true,
|
|
allowedHosts: [],
|
|
deniedHosts: []
|
|
};
|
|
}
|
|
}
|
|
|
|
module.exports = function mapServerACLEvent(event, _context) {
|
|
// FIXME: Number + full event
|
|
let newFields = mapFields(event.content);
|
|
let oldFields = mapFields(event.unsigned.prev_content);
|
|
let deltaEvents = [];
|
|
|
|
if (newFields.ipLiteralsAllowed !== oldFields.ipLiteralsAllowed) {
|
|
deltaEvents.push({
|
|
type: "accessRulesChanged",
|
|
sender: event.sender,
|
|
ipLiteralsAllowed: newFields.ipLiteralsAllowed
|
|
});
|
|
}
|
|
|
|
let { removed: removedAllowed, added: addedAllowed } = diffLists(oldFields.allowedHosts, newFields.allowedHosts);
|
|
let { removed: removedDenied, added: addedDenied } = diffLists(oldFields.deniedHosts, newFields.deniedHosts);
|
|
|
|
for (let host of removedAllowed) {
|
|
deltaEvents.push({ type: "allowedHostRemoved", sender: event.sender, hostmask: host });
|
|
}
|
|
|
|
for (let host of removedDenied) {
|
|
deltaEvents.push({ type: "deniedHostRemoved", sender: event.sender, hostmask: host });
|
|
}
|
|
|
|
for (let host of addedAllowed) {
|
|
deltaEvents.push({ type: "allowedHostAdded", sender: event.sender, hostmask: host });
|
|
}
|
|
|
|
for (let host of addedDenied) {
|
|
deltaEvents.push({ type: "deniedHostAdded", sender: event.sender, hostmask: host });
|
|
}
|
|
|
|
return deltaEvents;
|
|
};
|