UNPKG

blockstack

Version:

The Blockstack Javascript library for identity and authentication.

272 lines (214 loc) 15.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.runProofStatementUnitTests = runProofStatementUnitTests; exports.runOwnerAddressBasedProofsUnitTests = runOwnerAddressBasedProofsUnitTests; exports.runInBodyIdentityVerificationTests = runInBodyIdentityVerificationTests; exports.runProofUtilsUnitTests = runProofUtilsUnitTests; exports.runProofServicesUnitTests = runProofServicesUnitTests; exports.runProofsUnitTests = runProofsUnitTests; var _blueTape = require('blue-tape'); var _blueTape2 = _interopRequireDefault(_blueTape); var _tape = require('tape'); var _tape2 = _interopRequireDefault(_tape); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _fetchMock = require('fetch-mock'); var _fetchMock2 = _interopRequireDefault(_fetchMock); var _lib = require('../../../lib'); var _sampleData = require('./sampleData'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function mockRequests() { var naval = _sampleData.sampleVerifications.naval; var larry = _sampleData.sampleVerifications.larry; var addressBasedLarry = _sampleData.sampleAddressBasedVerifications.larry; _fetchMock2.default.get(naval.facebook.url, naval.facebook.body); _fetchMock2.default.get(naval.github.url + '/raw', naval.github.body); _fetchMock2.default.get(naval.twitter.url, naval.twitter.body); _fetchMock2.default.get(larry.facebook.url, larry.facebook.body); } function testProofs(profile, username, totalProofs) { mockRequests(); (0, _blueTape2.default)('Profiles', function (t) { return (0, _lib.validateProofs)(profile, username).then(function (proofs) { t.ok(proofs, 'Proofs must have been created'); t.equal(proofs instanceof Array, true, "Proofs should be an Array"); t.equal(proofs.length, totalProofs, "Should have a proof for each of the 3 claimed accounts"); _fetchMock2.default.restore(); }); }); } function runProofStatementUnitTests() { (0, _tape2.default)('getProofStatement', function (t) { t.plan(7); var larry = _sampleData.sampleVerifications.larry; var naval = _sampleData.sampleVerifications.naval; var ken = _sampleData.sampleAddressBasedVerifications.ken; t.equal(_lib.profileServices.facebook.getProofStatement(larry.facebook.body), 'Verifying that "larry.id" is my Blockstack ID.', 'Should extract proof statement from Facebook page meta tags'); t.equal(_lib.profileServices.twitter.getProofStatement(naval.twitter.body), 'Verifying myself: My Bitcoin username is +naval. https://t.co/DdpZv8tMAH #bitcoin', 'Should extract proof statement from Twitter page meta tags'); t.equal(_lib.profileServices.twitter.getProofStatement(ken.twitter.body), 'Verifying my Blockstack ID is secured with the address 1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', 'Should extract address-based proof statement from Twitter page meta tags'); t.equal(_lib.profileServices.instagram.getProofStatement(ken.instagram.body), 'Verifying my Blockstack ID is secured with the address 1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', 'Should extract address-based proof statement from Instagram meta tags'); t.equal(_lib.profileServices.hackerNews.getProofStatement(ken.hackerNews.body), 'Verifying my Blockstack ID is secured with the address 1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', 'Should extract address-based proof statement from Hacker News profile'); t.equal(_lib.profileServices.linkedIn.getProofStatement(ken.linkedIn.body), 'Verifying my Blockstack ID is secured with the address 1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', 'Should extract address-based proof statement from Hacker News profile'); t.equal(_lib.profileServices.linkedIn.getProofStatement(ken.linkedInBroken.body), '', 'Should not crash on broken LinkedIn proof link'); }); } function runOwnerAddressBasedProofsUnitTests() { (0, _tape2.default)('containsValidAddressProofStatement', function (t) { t.plan(12); var larry = _sampleData.sampleAddressBasedVerifications.larry; var ken = _sampleData.sampleAddressBasedVerifications.ken; var facebookProofStatement = _lib.profileServices.facebook.getProofStatement(larry.facebook.body); var twitterProofStatement = _lib.profileServices.twitter.getProofStatement(ken.twitter.body); var githubProofStatement = _lib.profileServices.github.getProofStatement(ken.github.body); var instagramProofStatement = _lib.profileServices.instagram.getProofStatement(ken.instagram.body); var hackerNewsProofStatement = _lib.profileServices.hackerNews.getProofStatement(ken.hackerNews.body); var linkedInProofStatement = _lib.profileServices.linkedIn.getProofStatement(ken.linkedIn.body); t.equals((0, _lib.containsValidAddressProofStatement)(facebookProofStatement, '1EyuZ8qxdhHjcnTChwQLyQaN3cmdK55DkH', true), true, "Facebook post meta tags should contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(facebookProofStatement, 'differentBitcoinAddress', true), false, "Facebook post meta tags should not contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(twitterProofStatement, '1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', true), true, "Twitter status meta tags should contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(twitterProofStatement, 'differentBitcoinAddress', true), false, "Twitter status meta tags should not contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(githubProofStatement, '1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', true), true, "Github gist body should contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(githubProofStatement, 'differentBitcoinAddress', true), false, "Github gist body should not contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(instagramProofStatement, '1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', true), true, "Instagram body should contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(instagramProofStatement, 'differentBitcoinAddress', true), false, "Instagram body should not contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(hackerNewsProofStatement, '1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', true), true, "Hacker News body should contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(hackerNewsProofStatement, 'differentBitcoinAddress', true), false, "Hacker News body should not contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(linkedInProofStatement, '1AtFqXxcckuoEN4iMNNe7n83c5nugxpzb5', true), true, "LinkedIn body should contain valid bitcoin address proof statement"); t.equals((0, _lib.containsValidAddressProofStatement)(linkedInProofStatement, 'differentBitcoinAddress', true), false, "LinkedIn body should not contain valid bitcoin address proof statement"); }); } function runInBodyIdentityVerificationTests() { (0, _tape2.default)('getProofIdentity', function (t) { t.plan(2); var ken = _sampleData.sampleAddressBasedVerifications.ken; t.equal(_lib.profileServices.instagram.getProofIdentity(ken.instagram.body), 'blckstcktest', 'Should extract social proof identity from Instagram proof page body'); t.equal(_lib.profileServices.linkedIn.getProofIdentity(ken.linkedIn.body), 'blck-stck', 'Should extract social proof identity from LinkedIn proof page body'); }); } function runProofUtilsUnitTests() { (0, _tape2.default)('containsValidProofStatement', function (t) { t.plan(8); var naval = _sampleData.sampleVerifications.naval; t.equal((0, _lib.containsValidProofStatement)(naval.facebook.body, 'naval.id'), true, "Facebook post body should contain valid proof statement for naval.id"); t.equal((0, _lib.containsValidProofStatement)(naval.github.body, 'naval.id'), true, "Github gist post body should contain valid proof statement for naval.id"); t.equal((0, _lib.containsValidProofStatement)(naval.twitter.body, 'naval.id'), true, "Twitter post body should contain valid proof statement for naval.id"); var larry = _sampleData.sampleVerifications.larry; t.equal((0, _lib.containsValidProofStatement)(naval.facebook.body, 'larry.id'), false, "Github gist post body should not contain valid proof statement for larry.id"); t.equal((0, _lib.containsValidProofStatement)(naval.github.body, 'larry.id'), false, "Github gist post body should not contain valid proof statement for larry.id"); t.equal((0, _lib.containsValidProofStatement)(naval.twitter.body, 'larry.id'), false, "Github gist post body should not contain valid proof statement for larry.id"); t.equal((0, _lib.containsValidProofStatement)(larry.facebook.body, 'larry.id'), true, "Facebook post body should contain valid proof statement for larry.id"); t.throws(function () { (0, _lib.containsValidProofStatement)(larry.facebook.body, 'larry'); }, /Error/, "Using non-fully qualified blockstack name should throw exception"); }); } function runProofServicesUnitTests() { (0, _tape2.default)('normalize Facebook URLs', function (t) { t.plan(6); t.equal(_lib.profileServices.facebook.normalizeFacebookUrl({ service: 'facebook', proof_url: "https://www.facebook.com/navalr/posts/10152190734077261", identifier: "navalr" }), "https://www.facebook.com/navalr/posts/10152190734077261", "Facebook URL should be normalized"); t.equal(_lib.profileServices.facebook.normalizeFacebookUrl({ service: 'facebook', proof_url: "https://facebook.com/navalr/posts/10152190734077261", identifier: "navalr" }), "https://www.facebook.com/navalr/posts/10152190734077261", "Facebook URL should be normalized"); t.equal(_lib.profileServices.facebook.normalizeFacebookUrl({ service: 'facebook', proof_url: "https://www.facebook.com/larrysalibra/posts/10100341028448093", identifier: "larrysalibra" }), "https://www.facebook.com/larrysalibra/posts/10100341028448093", "Facebook URL should be normalized"); t.notEqual(_lib.profileServices.facebook.normalizeFacebookUrl({ service: 'facebook', proof_url: "https://www.facebook.com/larry.salibra/posts/10100341028448093", identifier: "larry.salibra" }), "https://www.facebook.com/larrysalibra/posts/10100341028448093", "Facebook URL should be normalized"); t.notEqual(_lib.profileServices.facebook.normalizeFacebookUrl({ service: 'facebook', proof_url: "https://facebook.com/larry.salibra/posts/10100341028448093", identifier: "larry.salibra" }), "https://www.facebook.com/larrysalibra/posts/10100341028448093", "Facebook URL should be normalized"); t.equal(_lib.profileServices.facebook.normalizeFacebookUrl({ service: 'facebook', proof_url: "https://facebook.com/larrysalibra/posts/10100341028448093", identifier: "larrysalibra" }), "https://www.facebook.com/larrysalibra/posts/10100341028448093", "Facebook URL should be normalized"); }); (0, _tape2.default)('normalize Instagarm URLs', function (t) { t.plan(4); t.equal(_lib.profileServices.instagram.normalizeInstagramUrl({ service: 'instagram', proof_url: "https://www.instagram.com/p/BZ7KMM0A-Qc/", identifier: "blckstcktest" }), "https://www.instagram.com/p/BZ7KMM0A-Qc/", "Instagram URL should be normalized"); t.equal(_lib.profileServices.instagram.normalizeInstagramUrl({ service: 'instagram', proof_url: "https://instagram.com/p/BZ7KMM0A-Qc/", identifier: "blckstcktest" }), "https://www.instagram.com/p/BZ7KMM0A-Qc/", "Instagram URL should be normalized"); t.equal(_lib.profileServices.instagram.normalizeInstagramUrl({ service: 'instagram', proof_url: "http://www.instagram.com/p/BZ7KMM0A-Qc/", identifier: "blckstcktest" }), "https://www.instagram.com/p/BZ7KMM0A-Qc/", "Instagram URL should be normalized"); t.equal(_lib.profileServices.instagram.normalizeInstagramUrl({ service: 'instagram', proof_url: "http://instagram.com/p/BZ7KMM0A-Qc/", identifier: "blckstcktest" }), "https://www.instagram.com/p/BZ7KMM0A-Qc/", "Instagram URL should be normalized"); }); (0, _tape2.default)('get proof url', function (t) { t.plan(10); t.equal(_lib.profileServices.facebook.getProofUrl(_sampleData.sampleProofs.naval[1]), "https://www.facebook.com/navalr/posts/10152190734077261", "Facebook proof URL should match reference"); t.equal(_lib.profileServices.github.getProofUrl(_sampleData.sampleProofs.naval[2]), "https://gist.github.com/navalr/f31a74054f859ec0ac6a/raw", "Github proof URL should match reference"); t.equal(_lib.profileServices.twitter.getProofUrl(_sampleData.sampleProofs.naval[0]), "https://twitter.com/naval/status/486609266212499456", "Twitter proof URL should match reference"); t.equal(_lib.profileServices.facebook.getProofUrl(_sampleData.sampleProofs.larry[0]), "https://www.facebook.com/larry.salibra/posts/10100341028448093", "Facebook proof URL should match reference"); t.equal(_lib.profileServices.instagram.getProofUrl(_sampleData.sampleProofs.ken[0]), "https://www.instagram.com/p/BYj6UDwgaX7/", "Instagram proof URL should match reference"); t.equal(_lib.profileServices.hackerNews.getProofUrl(_sampleData.sampleProofs.ken[1]), "https://news.ycombinator.com/user?id=yukanl", "Hacker News proof URL should match reference"); t.equal(_lib.profileServices.linkedIn.getProofUrl(_sampleData.sampleProofs.ken[2]), "https://www.linkedin.com/feed/update/urn:li:activity:6311587377647222784/", "LinkedIn proof URL should match reference"); // t.throws(() => { // const notLarry = Object.assign({}, // sampleProofs.larry[0], { // proof_url: 'https://www.facebook.com/not.larry/posts/10100341028448093' // }) // profileServices.facebook.getProofUrl(notLarry) // }, /Error/, 'Not having claimed account identifier in Facebook proof URL should throw exception') t.throws(function () { var notNavalTwitter = Object.assign({}, _sampleData.sampleProofs.naval[0], { proof_url: 'https://twitter.com/not_naval/status/486609266212499456' }); _lib.profileServices.twitter.getProofUrl(notNavalTwitter); }, /Error/, 'Not having claimed account identifier in Twitter proof URL should throw exception'); t.throws(function () { var notNavalGithub = Object.assign({}, _sampleData.sampleProofs.naval[2], { proof_url: 'https://gist.github.com/not_naval/f31a74054f859ec0ac6a' }); _lib.profileServices.github.getProofUrl(notNavalGithub); }, /Error/, 'Not having claimed account identifier in Github proof URL should throw exception'); t.throws(function () { var notKenHackerNews = Object.assign({}, _sampleData.sampleProofs.ken[0], { proof_url: 'https://news.ycombinator.com/user?id=notken' }); _lib.profileServices.github.getProofUrl(notKenHackerNews); }, /Error/, 'Not having claimed account identifier in Hacker News proof URL should throw exception'); }); } function runProofsUnitTests() { // Proof utils runProofUtilsUnitTests(); // Proof statements runProofStatementUnitTests(); // Proof address based runOwnerAddressBasedProofsUnitTests(); // Proof identity extract from response body runInBodyIdentityVerificationTests(); // Proof services runProofServicesUnitTests(); // Proof HTML testProofs(_sampleData.sampleProfiles.naval, "naval.id", 3); testProofs(_sampleData.sampleProfiles.larry, "larry.id", 1); }