Fix user ID filtering. Do not filter out user attribute packets.
This commit is contained in:
parent
f88f4d5d2e
commit
9e7149108a
@ -156,7 +156,7 @@ class PGP {
|
|||||||
async filterKeyByUserIds(userIds, armored) {
|
async filterKeyByUserIds(userIds, armored) {
|
||||||
const emails = userIds.map(({email}) => email);
|
const emails = userIds.map(({email}) => email);
|
||||||
const {keys: [key]} = await openpgp.key.readArmored(armored);
|
const {keys: [key]} = await openpgp.key.readArmored(armored);
|
||||||
key.users = key.users.filter(({userId: {email}}) => emails.includes(util.normalizeEmail(email)));
|
key.users = key.users.filter(({userId}) => !userId || emails.includes(util.normalizeEmail(userId.email)));
|
||||||
return key.armor();
|
return key.armor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ class PGP {
|
|||||||
*/
|
*/
|
||||||
async removeUserId(email, publicKeyArmored) {
|
async removeUserId(email, publicKeyArmored) {
|
||||||
const {keys: [key]} = await openpgp.key.readArmored(publicKeyArmored);
|
const {keys: [key]} = await openpgp.key.readArmored(publicKeyArmored);
|
||||||
key.users = key.users.filter(({userId}) => util.normalizeEmail(userId.email) !== email);
|
key.users = key.users.filter(({userId}) => !userId || util.normalizeEmail(userId.email) !== email);
|
||||||
return key.armor();
|
return key.armor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
0
test/key1.asc → test/fixtures/key1.asc
vendored
0
test/key1.asc → test/fixtures/key1.asc
vendored
0
test/key2.asc → test/fixtures/key2.asc
vendored
0
test/key2.asc → test/fixtures/key2.asc
vendored
0
test/key3.asc → test/fixtures/key3.asc
vendored
0
test/key3.asc → test/fixtures/key3.asc
vendored
0
test/key4.asc → test/fixtures/key4.asc
vendored
0
test/key4.asc → test/fixtures/key4.asc
vendored
40
test/fixtures/key5.asc
vendored
Normal file
40
test/fixtures/key5.asc
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||||
|
|
||||||
|
mI0EUmEvTgEEANyWtQQMOybQ9JltDqmaX0WnNPJeLILIM36sw6zL0nfTQ5zXSS3+
|
||||||
|
fIF6P29lJFxpblWk02PSID5zX/DYU9/zjM2xPO8Oa4xo0cVTOTLj++Ri5mtr//f5
|
||||||
|
GLsIXxFrBJhD/ghFsL3Op0GXOeLJ9A5bsOn8th7x6JucNKuaRB6bQbSPABEBAAG0
|
||||||
|
JFRlc3QgTWNUZXN0aW5ndG9uIDx0ZXN0QGV4YW1wbGUuY29tPoi5BBMBAgAjBQJS
|
||||||
|
YS9OAhsvBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQSmNhOk1uQJQwDAP6
|
||||||
|
AgrTyqkRlJVqz2pb46TfbDM2TDF7o9CBnBzIGoxBhlRwpqALz7z2kxBDmwpQa+ki
|
||||||
|
Bq3jZN/UosY9y8bhwMAlnrDY9jP1gdCo+H0sD48CdXybblNwaYpwqC8VSpDdTndf
|
||||||
|
9j2wE/weihGp/DAdy/2kyBCaiOY1sjhUfJ1GogF49rDRwc7BzAEQAAEBAAAAAAAA
|
||||||
|
AAAAAAAA/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQN
|
||||||
|
DAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/
|
||||||
|
2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
|
||||||
|
MjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAFABQDASIAAhEBAxEB/8QAHwAAAQUB
|
||||||
|
AQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQID
|
||||||
|
AAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0
|
||||||
|
NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKT
|
||||||
|
lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
|
||||||
|
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL
|
||||||
|
/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB
|
||||||
|
CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpj
|
||||||
|
ZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
|
||||||
|
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR
|
||||||
|
AxEAPwD3+iiigAooooA//9mIuQQTAQIAIwUCUzxDqQIbLwcLCQgHAwIBBhUIAgkK
|
||||||
|
CwQWAgMBAh4BAheAAAoJEEpjYTpNbkCU9PEEAKMMaXjhGdgDISBXAAEVXL6MB3x1
|
||||||
|
d/7zBdnUljh1gM34TSKvbeZf7h/1DNgLbJFfSF3KiLViiqRVOumIkjwNIMZPqYtu
|
||||||
|
WoEcElY50mvTETzOKemCt1GYI0GhOY2uZOVRtQLrkX0CB9r5hEQalkrnjNKlbghj
|
||||||
|
LfOYu1uARF16cZUWuI0EUmEvTgEEAOkfz7QRWiWk+I6tdMqgEpOLKsFTLHOh3Inz
|
||||||
|
OZUnccxMRT++J2lDDMhLChz+d0MUxdBq6rrGoEIP2bYE9AjdR1DNedsuwAjnadYI
|
||||||
|
io6TMzk0ApagqHJcr1jhQfi/0sBhCCX+y0ghK8KAbiYnyXPMQFa9F19CbYaFvrj/
|
||||||
|
dXk0N16bABEBAAGJAT0EGAECAAkFAlJhL04CGy4AqAkQSmNhOk1uQJSdIAQZAQIA
|
||||||
|
BgUCUmEvTgAKCRDghPdEbCAsl7qiBADZpokQgEhe2Cuz7xZIniTcM3itFdxdpRl/
|
||||||
|
rrumN0P2cXbcHOMUfpnvwkgZrFEcl0ztvTloTxi7Mzx/c0iVPQXQ4ur9Mjaa5hT1
|
||||||
|
/9TYNAG5/7ApMHrb48QtWCL0yxcLVC/+7+jUtm2abFMUU4PfnEqzFlkjY4mPalCm
|
||||||
|
o5tbbszw2VwFBADDZgDd8Vzfyo8r49jitnJNF1u+PLJf7XN6oijzCftAJDBez44Z
|
||||||
|
ofZ8ahPfkAhJe6opxaqgS47s4FIQVOEJcF9RgwLTU6uooSzA+b9XfNmQu7TWrXZQ
|
||||||
|
zBlpyHbxDAr9hmXLiKg0Pa11rOPXu7atTZ3C2Ic97WIyoaBUyhCKt8tz6Q==
|
||||||
|
=MVfN
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
@ -26,7 +26,7 @@ describe('Koa App (HTTP Server) Integration Tests', function() {
|
|||||||
before(async () => {
|
before(async () => {
|
||||||
sandbox.stub(log);
|
sandbox.stub(log);
|
||||||
|
|
||||||
publicKeyArmored = fs.readFileSync(`${__dirname}/../key1.asc`, 'utf8');
|
publicKeyArmored = fs.readFileSync(`${__dirname}/../fixtures/key1.asc`, 'utf8');
|
||||||
mongo = new Mongo();
|
mongo = new Mongo();
|
||||||
await mongo.init(config.mongo);
|
await mongo.init(config.mongo);
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ describe('Email Integration Tests', function() {
|
|||||||
const recipient = {name: 'Test User', email: 'safewithme.testuser@gmail.com'};
|
const recipient = {name: 'Test User', email: 'safewithme.testuser@gmail.com'};
|
||||||
|
|
||||||
before(() => {
|
before(() => {
|
||||||
publicKeyArmored = require('fs').readFileSync(`${__dirname}/../key1.asc`, 'utf8');
|
publicKeyArmored = require('fs').readFileSync(`${__dirname}/../fixtures/key1.asc`, 'utf8');
|
||||||
origin = {
|
origin = {
|
||||||
protocol: 'http',
|
protocol: 'http',
|
||||||
host: `localhost:${config.server.port}`
|
host: `localhost:${config.server.port}`
|
||||||
|
@ -27,8 +27,8 @@ describe('Public Key Integration Tests', function() {
|
|||||||
const origin = {host: 'localhost', protocol: 'http'};
|
const origin = {host: 'localhost', protocol: 'http'};
|
||||||
|
|
||||||
before(async () => {
|
before(async () => {
|
||||||
publicKeyArmored = require('fs').readFileSync(`${__dirname}/../key3.asc`, 'utf8');
|
publicKeyArmored = require('fs').readFileSync(`${__dirname}/../fixtures/key3.asc`, 'utf8');
|
||||||
publicKeyArmored2 = require('fs').readFileSync(`${__dirname}/../key4.asc`, 'utf8');
|
publicKeyArmored2 = require('fs').readFileSync(`${__dirname}/../fixtures/key4.asc`, 'utf8');
|
||||||
sinon.stub(log, 'info');
|
sinon.stub(log, 'info');
|
||||||
mongo = new Mongo();
|
mongo = new Mongo();
|
||||||
await mongo.init(config.mongo);
|
await mongo.init(config.mongo);
|
||||||
|
@ -11,13 +11,17 @@ describe('PGP Unit Tests', () => {
|
|||||||
let key1Armored;
|
let key1Armored;
|
||||||
let key2Armored;
|
let key2Armored;
|
||||||
let key3Armored;
|
let key3Armored;
|
||||||
|
let key5Armored;
|
||||||
|
|
||||||
|
before(() => {
|
||||||
|
key1Armored = fs.readFileSync(`${__dirname}/../fixtures/key1.asc`, 'utf8');
|
||||||
|
key2Armored = fs.readFileSync(`${__dirname}/../fixtures/key2.asc`, 'utf8');
|
||||||
|
key3Armored = fs.readFileSync(`${__dirname}/../fixtures/key3.asc`, 'utf8');
|
||||||
|
key5Armored = fs.readFileSync(`${__dirname}/../fixtures/key5.asc`, 'utf8');
|
||||||
|
});
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
sandbox.stub(log);
|
sandbox.stub(log);
|
||||||
|
|
||||||
key1Armored = fs.readFileSync(`${__dirname}/../key1.asc`, 'utf8');
|
|
||||||
key2Armored = fs.readFileSync(`${__dirname}/../key2.asc`, 'utf8');
|
|
||||||
key3Armored = fs.readFileSync(`${__dirname}/../key3.asc`, 'utf8');
|
|
||||||
pgp = new PGP();
|
pgp = new PGP();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -195,4 +199,49 @@ describe('PGP Unit Tests', () => {
|
|||||||
expect(parsed.length).to.equal(0);
|
expect(parsed.length).to.equal(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('filterKeyByUserIds', () => {
|
||||||
|
it('should filter user IDs', async () => {
|
||||||
|
const email = 'test1@example.com';
|
||||||
|
const {keys: [key]} = await openpgp.key.readArmored(key3Armored);
|
||||||
|
expect(key.users.length).to.equal(4);
|
||||||
|
const filtered = await pgp.filterKeyByUserIds([{email}], key3Armored);
|
||||||
|
const {keys: [filteredKey]} = await openpgp.key.readArmored(filtered);
|
||||||
|
expect(filteredKey.users.length).to.equal(1);
|
||||||
|
expect(filteredKey.users[0].userId.email).to.equal(email);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not filter user attributes', async () => {
|
||||||
|
const email = 'test@example.com';
|
||||||
|
const {keys: [key]} = await openpgp.key.readArmored(key5Armored);
|
||||||
|
expect(key.users.length).to.equal(2);
|
||||||
|
const filtered = await pgp.filterKeyByUserIds([{email}], key5Armored);
|
||||||
|
const {keys: [filteredKey]} = await openpgp.key.readArmored(filtered);
|
||||||
|
expect(filteredKey.users.length).to.equal(2);
|
||||||
|
expect(filteredKey.users[0].userId).to.exist;
|
||||||
|
expect(filteredKey.users[1].userAttribute).to.exist;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('removeUserId', () => {
|
||||||
|
it('should remove user IDs', async () => {
|
||||||
|
const email = 'test1@example.com';
|
||||||
|
const {keys: [key]} = await openpgp.key.readArmored(key3Armored);
|
||||||
|
expect(key.users.length).to.equal(4);
|
||||||
|
const reduced = await pgp.removeUserId(email, key3Armored);
|
||||||
|
const {keys: [reducedKey]} = await openpgp.key.readArmored(reduced);
|
||||||
|
expect(reducedKey.users.length).to.equal(3);
|
||||||
|
expect(reducedKey.users.includes(({userId}) => userId.email === email)).to.be.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not remove user attributes', async () => {
|
||||||
|
const email = 'test@example.com';
|
||||||
|
const {keys: [key]} = await openpgp.key.readArmored(key5Armored);
|
||||||
|
expect(key.users.length).to.equal(2);
|
||||||
|
const reduced = await pgp.removeUserId(email, key5Armored);
|
||||||
|
const {keys: [reducedKey]} = await openpgp.key.readArmored(reduced);
|
||||||
|
expect(reducedKey.users.length).to.equal(1);
|
||||||
|
expect(reducedKey.users[0].userAttribute).to.exist;
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user