|
|
|
@ -8,6 +8,7 @@ import { sha256 } from '../../crypto';
|
|
|
|
|
import * as Data from '../../../data/data';
|
|
|
|
|
import pRetry from 'p-retry';
|
|
|
|
|
import { SeedNodeAPI } from '.';
|
|
|
|
|
import { allowOnlyOneAtATime } from '../../utils/Promise';
|
|
|
|
|
|
|
|
|
|
// tslint:disable: function-name
|
|
|
|
|
|
|
|
|
@ -22,7 +23,7 @@ export async function fetchSnodePoolFromSeedNodeWithRetries(
|
|
|
|
|
try {
|
|
|
|
|
window?.log?.info(`fetchSnodePoolFromSeedNode with seedNodes.length ${seedNodes.length}`);
|
|
|
|
|
|
|
|
|
|
let snodes = await getSnodeListFromSeednode(seedNodes);
|
|
|
|
|
let snodes = await getSnodeListFromSeednodeOneAtAtime(seedNodes);
|
|
|
|
|
// make sure order of the list is random, so we get version in a non-deterministic way
|
|
|
|
|
snodes = _.shuffle(snodes);
|
|
|
|
|
// commit changes to be live
|
|
|
|
@ -60,20 +61,20 @@ const getSslAgentForSeedNode = async (seedNodeHost: string, isSsl = false) => {
|
|
|
|
|
|
|
|
|
|
switch (seedNodeHost) {
|
|
|
|
|
case 'storage.seed1.loki.network':
|
|
|
|
|
certContent = storageSeed1Crt;
|
|
|
|
|
certContent = Buffer.from(storageSeed1Crt, 'utf-8').toString();
|
|
|
|
|
pubkey256 = 'JOsnIcAanVbgECNA8lHtC8f/cqN9m8EP7jKT6XCjeL8=';
|
|
|
|
|
cert256 =
|
|
|
|
|
'6E:2B:AC:F3:6E:C1:FF:FF:24:F3:CA:92:C6:94:81:B4:82:43:DF:C7:C6:03:98:B8:F5:6B:7D:30:7B:16:C1:CB';
|
|
|
|
|
break;
|
|
|
|
|
case 'storage.seed3.loki.network':
|
|
|
|
|
certContent = storageSeed3Crt;
|
|
|
|
|
certContent = Buffer.from(storageSeed3Crt, 'utf-8').toString();
|
|
|
|
|
pubkey256 = 'mMmZD3lG4Fi7nTC/EWzRVaU3bbCLsH6Ds2FHSTpo0Rk=';
|
|
|
|
|
cert256 =
|
|
|
|
|
'24:13:4C:0A:03:D8:42:A6:09:DE:35:76:F4:BD:FB:11:60:DB:F9:88:9F:98:46:B7:60:A6:60:0C:4C:CF:60:72';
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case 'public.loki.foundation':
|
|
|
|
|
certContent = publicLokiFoundationCtr;
|
|
|
|
|
certContent = Buffer.from(publicLokiFoundationCtr, 'utf-8').toString();
|
|
|
|
|
pubkey256 = 'W+Zv52qlcm1BbdpJzFwxZrE7kfmEboq7h3Dp/+Q3RPg=';
|
|
|
|
|
cert256 =
|
|
|
|
|
'40:E4:67:7D:18:6B:4D:08:8D:E9:D5:47:52:25:B8:28:E0:D3:63:99:9B:38:46:7D:92:19:5B:61:B9:AE:0E:EA';
|
|
|
|
@ -86,7 +87,7 @@ const getSslAgentForSeedNode = async (seedNodeHost: string, isSsl = false) => {
|
|
|
|
|
|
|
|
|
|
// tslint:disable: non-literal-fs-path
|
|
|
|
|
// read the cert each time. We only run this request once for each seed node nevertheless.
|
|
|
|
|
const sslOptions = {
|
|
|
|
|
const sslOptions: https.AgentOptions = {
|
|
|
|
|
// as the seed nodes are using a self signed certificate, we have to provide it here.
|
|
|
|
|
ca: certContent,
|
|
|
|
|
// we have to reject them, otherwise our errors returned in the checkServerIdentity are simply not making the call fail.
|
|
|
|
@ -132,6 +133,11 @@ export interface SnodeFromSeed {
|
|
|
|
|
pubkey_ed25519: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const getSnodeListFromSeednodeOneAtAtime = async (seedNodes: Array<string>) =>
|
|
|
|
|
allowOnlyOneAtATime('getSnodeListFromSeednode', () =>
|
|
|
|
|
getSnodeListFromSeednode(seedNodes)
|
|
|
|
|
) as Promise<Array<SnodeFromSeed>>;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This call will try 4 times to contact a seed nodes (random) and get the snode list from it.
|
|
|
|
|
* If all attempts fails, this function will throw the last error.
|
|
|
|
@ -296,33 +302,6 @@ async function getSnodesFromSeedUrl(urlObj: URL): Promise<Array<any>> {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const storageSeed3Crt = `-----BEGIN CERTIFICATE-----
|
|
|
|
|
MIIEITCCAwmgAwIBAgIUc486Dy9Y00bUFfDeYmJIgSS5xREwDQYJKoZIhvcNAQEL
|
|
|
|
|
BQAwgYAxCzAJBgNVBAYTAkFVMREwDwYDVQQIDAhWaWN0b3JpYTESMBAGA1UEBwwJ
|
|
|
|
|
TWVsYm91cm5lMSUwIwYDVQQKDBxPeGVuIFByaXZhY3kgVGVjaCBGb3VuZGF0aW9u
|
|
|
|
|
MSMwIQYDVQQDDBpzdG9yYWdlLnNlZWQzLmxva2kubmV0d29yazAeFw0yMTA0MDcw
|
|
|
|
|
MTIwNTJaFw0yMzA0MDcwMTIwNTJaMIGAMQswCQYDVQQGEwJBVTERMA8GA1UECAwI
|
|
|
|
|
VmljdG9yaWExEjAQBgNVBAcMCU1lbGJvdXJuZTElMCMGA1UECgwcT3hlbiBQcml2
|
|
|
|
|
YWN5IFRlY2ggRm91bmRhdGlvbjEjMCEGA1UEAwwac3RvcmFnZS5zZWVkMy5sb2tp
|
|
|
|
|
Lm5ldHdvcmswggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtokMlsFzf
|
|
|
|
|
piYeD0EVNikMyvjltpF6fUEde9NOVrTtNTQT6kkDk+/0HF5LYgPaatv6v7fpUQHi
|
|
|
|
|
kIwd6F0LTRGeWDFdsaWMdtlR1n/GxLPrOROsE8dcLt6GLavPf9rDabgva93m/JD6
|
|
|
|
|
XW+Ne+MPEwqS8dAmFGhZd0gju6AtKFoSHnIf5pSQN6fSZUF/JQtHLVprAKKWKDiS
|
|
|
|
|
ZwmWbmrZR2aofLD/VRpetabajnZlv9EeWloQwvUsw1C1hkAmmtFeeXtg7ePwrOzo
|
|
|
|
|
6CnmcUJwOmi+LWqQV4A+58RZPFKaZoC5pzaKd0OYB8eZ8HB1F41UjGJgheX5Cyl4
|
|
|
|
|
+amfF3l8dSq1AgMBAAGjgZAwgY0wHQYDVR0OBBYEFM9VSq4pGydjtX92Beul4+ml
|
|
|
|
|
jBKtMB8GA1UdIwQYMBaAFM9VSq4pGydjtX92Beul4+mljBKtMA8GA1UdEwEB/wQF
|
|
|
|
|
MAMBAf8wJQYDVR0RBB4wHIIac3RvcmFnZS5zZWVkMy5sb2tpLm5ldHdvcmswEwYD
|
|
|
|
|
VR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAAYxmhhkcKE1n6g1
|
|
|
|
|
JqOa3UCBo4EfbqY5+FDZ0FVqv/cwemwVpKLbe6luRIS8poomdPCyMOS45V7wN3H9
|
|
|
|
|
cFpfJ1TW19ydPVKmCXrl29ngmnY1q7YDwE/4qi3VK/UiqDkTHMKWjVPkenOyi8u6
|
|
|
|
|
VVQANXSnKrn6GtigNFjGyD38O+j7AUSXBtXOJczaoF6r6BWgwQZ2WmgjuwvKTWSN
|
|
|
|
|
4r8uObERoAQYVaeXfgdr4e9X/JdskBDaLFfoW/rrSozHB4FqVNFW96k+aIUgRa5p
|
|
|
|
|
9kv115QcBPCSh9qOyTHij4tswS6SyOFaiKrNC4hgHQXP4QgioKmtsR/2Y+qJ6ddH
|
|
|
|
|
6oo+4QU=
|
|
|
|
|
-----END CERTIFICATE-----
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
const storageSeed1Crt = `-----BEGIN CERTIFICATE-----
|
|
|
|
|
MIIEITCCAwmgAwIBAgIUJsox1ZQPK/6iDsCC+MUJfNAlFuYwDQYJKoZIhvcNAQEL
|
|
|
|
|
BQAwgYAxCzAJBgNVBAYTAkFVMREwDwYDVQQIDAhWaWN0b3JpYTESMBAGA1UEBwwJ
|
|
|
|
@ -350,6 +329,33 @@ const storageSeed1Crt = `-----BEGIN CERTIFICATE-----
|
|
|
|
|
-----END CERTIFICATE-----
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
const storageSeed3Crt = `-----BEGIN CERTIFICATE-----
|
|
|
|
|
MIIEITCCAwmgAwIBAgIUc486Dy9Y00bUFfDeYmJIgSS5xREwDQYJKoZIhvcNAQEL
|
|
|
|
|
BQAwgYAxCzAJBgNVBAYTAkFVMREwDwYDVQQIDAhWaWN0b3JpYTESMBAGA1UEBwwJ
|
|
|
|
|
TWVsYm91cm5lMSUwIwYDVQQKDBxPeGVuIFByaXZhY3kgVGVjaCBGb3VuZGF0aW9u
|
|
|
|
|
MSMwIQYDVQQDDBpzdG9yYWdlLnNlZWQzLmxva2kubmV0d29yazAeFw0yMTA0MDcw
|
|
|
|
|
MTIwNTJaFw0yMzA0MDcwMTIwNTJaMIGAMQswCQYDVQQGEwJBVTERMA8GA1UECAwI
|
|
|
|
|
VmljdG9yaWExEjAQBgNVBAcMCU1lbGJvdXJuZTElMCMGA1UECgwcT3hlbiBQcml2
|
|
|
|
|
YWN5IFRlY2ggRm91bmRhdGlvbjEjMCEGA1UEAwwac3RvcmFnZS5zZWVkMy5sb2tp
|
|
|
|
|
Lm5ldHdvcmswggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtokMlsFzf
|
|
|
|
|
piYeD0EVNikMyvjltpF6fUEde9NOVrTtNTQT6kkDk+/0HF5LYgPaatv6v7fpUQHi
|
|
|
|
|
kIwd6F0LTRGeWDFdsaWMdtlR1n/GxLPrOROsE8dcLt6GLavPf9rDabgva93m/JD6
|
|
|
|
|
XW+Ne+MPEwqS8dAmFGhZd0gju6AtKFoSHnIf5pSQN6fSZUF/JQtHLVprAKKWKDiS
|
|
|
|
|
ZwmWbmrZR2aofLD/VRpetabajnZlv9EeWloQwvUsw1C1hkAmmtFeeXtg7ePwrOzo
|
|
|
|
|
6CnmcUJwOmi+LWqQV4A+58RZPFKaZoC5pzaKd0OYB8eZ8HB1F41UjGJgheX5Cyl4
|
|
|
|
|
+amfF3l8dSq1AgMBAAGjgZAwgY0wHQYDVR0OBBYEFM9VSq4pGydjtX92Beul4+ml
|
|
|
|
|
jBKtMB8GA1UdIwQYMBaAFM9VSq4pGydjtX92Beul4+mljBKtMA8GA1UdEwEB/wQF
|
|
|
|
|
MAMBAf8wJQYDVR0RBB4wHIIac3RvcmFnZS5zZWVkMy5sb2tpLm5ldHdvcmswEwYD
|
|
|
|
|
VR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAAYxmhhkcKE1n6g1
|
|
|
|
|
JqOa3UCBo4EfbqY5+FDZ0FVqv/cwemwVpKLbe6luRIS8poomdPCyMOS45V7wN3H9
|
|
|
|
|
cFpfJ1TW19ydPVKmCXrl29ngmnY1q7YDwE/4qi3VK/UiqDkTHMKWjVPkenOyi8u6
|
|
|
|
|
VVQANXSnKrn6GtigNFjGyD38O+j7AUSXBtXOJczaoF6r6BWgwQZ2WmgjuwvKTWSN
|
|
|
|
|
4r8uObERoAQYVaeXfgdr4e9X/JdskBDaLFfoW/rrSozHB4FqVNFW96k+aIUgRa5p
|
|
|
|
|
9kv115QcBPCSh9qOyTHij4tswS6SyOFaiKrNC4hgHQXP4QgioKmtsR/2Y+qJ6ddH
|
|
|
|
|
6oo+4QU=
|
|
|
|
|
-----END CERTIFICATE-----
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
const publicLokiFoundationCtr = `-----BEGIN CERTIFICATE-----
|
|
|
|
|
MIIEEzCCAvugAwIBAgIUY9RQqbjhsQEkdeSgV9L0os9xZ7AwDQYJKoZIhvcNAQEL
|
|
|
|
|
BQAwfDELMAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3RvcmlhMRIwEAYDVQQHDAlN
|
|
|
|
|