From e1c9ef5eb4adb98980784a216cbc88feba814a28 Mon Sep 17 00:00:00 2001 From: mDuo13 Date: Tue, 9 Jul 2019 19:46:01 -0700 Subject: [PATCH] TOML checker - warn on datatype mismatch --- assets/js/xrp-ledger-toml-checker.js | 63 ++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/assets/js/xrp-ledger-toml-checker.js b/assets/js/xrp-ledger-toml-checker.js index 977ec7bece..2a4ea36a7b 100644 --- a/assets/js/xrp-ledger-toml-checker.js +++ b/assets/js/xrp-ledger-toml-checker.js @@ -1,5 +1,5 @@ const TOML_PATH = "/.well-known/xrp-ledger.toml" -const TIPS = '

Check if the file is actually hosted at the URL above, check your server\'s HTTP settings, and make sure your server provides the required CORS header.

' +const TIPS = '

Check if the file is actually hosted at the URL above, check your server\'s HTTPS settings and certificate, and make sure your server provides the required CORS header.

' const CLASS_GOOD = "badge badge-success" const CLASS_BAD = "badge badge-danger" @@ -97,12 +97,21 @@ async function parse_xrpl_toml(data, domain) { console.log(parsed) - if (parsed.METADATA.modified) { - const mod_log = makeLogEntry("Modified date: ") - try { - mod_log.resolve(parsed.METADATA.modified.toISOString()).addClass(CLASS_GOOD) - } catch(e) { - mod_log.resolve("INVALID").addClass(CLASS_BAD) + if (parsed.hasOwnProperty("METADATA")) { + const metadata_type = makeLogEntry("Metadata section: ") + if (Array.isArray(parsed.METADATA)) { + metadata_type.resolve("Wrong type - should be table").addClass(CLASS_BAD) + } else { + metadata_type.resolve("Found").addClass(CLASS_GOOD) + + if (parsed.METADATA.modified) { + const mod_log = makeLogEntry("Modified date: ") + try { + mod_log.resolve(parsed.METADATA.modified.toISOString()).addClass(CLASS_GOOD) + } catch(e) { + mod_log.resolve("INVALID").addClass(CLASS_BAD) + } + } } } @@ -132,24 +141,44 @@ async function parse_xrpl_toml(data, domain) { } if (parsed.ACCOUNTS) { - list_entries("Accounts:", parsed.ACCOUNTS, ACCOUNT_FIELDS, async function(acct) { - if (acct.address === undefined) {return undefined} - let net - if (acct.network === undefined) { net = "main" } else { net = acct.network } - return await validate_address_domain_on_net(acct.address, domain, net) - }) + if (!Array.isArray(parsed.ACCOUNTS)) { + makeLogEntry("Accounts:").resolve("Wrong type - should be table-array").addClass(CLASS_BAD) + } else { + list_entries("Accounts:", parsed.ACCOUNTS, ACCOUNT_FIELDS, async function(acct) { + if (acct.address === undefined) {return undefined} + let net + if (acct.network === undefined) { net = "main" } else { net = acct.network } + return await validate_address_domain_on_net(acct.address, domain, net) + }) + } } if (parsed.VALIDATORS) { - list_entries("Validators:", parsed.VALIDATORS, VALIDATOR_FIELDS) + if (!Array.isArray(parsed.VALIDATORS)) { + makeLogEntry("Validators:").resolve("Wrong type - should be table-array").addClass(CLASS_BAD) + } else { + list_entries("Validators:", parsed.VALIDATORS, VALIDATOR_FIELDS) + } } if (parsed.PRINCIPALS) { - list_entries("Principals:", parsed.PRINCIPALS, PRINCIPAL_FIELDS) + if (!Array.isArray(parsed.PRINCIPALS)) { + makeLogEntry("Principals:").resolve("Wrong type - should be table-array").addClass(CLASS_BAD) + } else { + list_entries("Principals:", parsed.PRINCIPALS, PRINCIPAL_FIELDS) + } } if (parsed.SERVERS) { - list_entries("Servers:", parsed.SERVERS, SERVER_FIELDS) + if (!Array.isArray(parsed.SERVERS)) { + makeLogEntry("Servers:").resolve("Wrong type - should be table-array").addClass(CLASS_BAD) + } else { + list_entries("Servers:", parsed.SERVERS, SERVER_FIELDS) + } } if (parsed.CURRENCIES) { - list_entries("Currencies:", parsed.CURRENCIES, CURRENCY_FIELDS) + if (!Array.isArray(parsed.CURRENCIES)) { + makeLogEntry("Currencies:").resolve("Wrong type - should be table-array").addClass(CLASS_BAD) + } else { + list_entries("Currencies:", parsed.CURRENCIES, CURRENCY_FIELDS) + } } }