Add xrp-ledger.toml Checker

- Update ripple-lib to 1.2.4
- Redirects ripple.txt validator to the xrp-ledger.toml checker
This commit is contained in:
mDuo13
2019-06-07 17:37:33 -07:00
parent afdb60c28e
commit 80ed51614f
9 changed files with 1935 additions and 32 deletions

File diff suppressed because one or more lines are too long

15
assets/js/ripple-lib-1.2.4-min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,214 @@
const TOML_PATH = "/.well-known/xrp-ledger.toml"
const TIPS = '<p>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 <a href="xrp-ledger-toml.html#cors-setup">CORS header.</a></p>'
const CLASS_GOOD = "badge badge-success"
const CLASS_BAD = "badge badge-danger"
const ACCOUNT_FIELDS = [
"address",
"network",
"desc"
]
const VALIDATOR_FIELDS = [
"public_key",
"network",
"owner_country",
"server_country",
"unl"
]
const PRINCIPAL_FIELDS = [
"name",
"email"
]
const SERVER_FIELDS = [
"json_rpc",
"ws",
"peer",
"network"
]
const CURRENCY_FIELDS = [
"code",
"display_decimals",
"issuer",
"network",
"symbol"
]
function VerificationError(message, tips) {
this.name = "VerificationError"
this.message = message || ""
this.tips = tips || ""
}
VerificationError.prototype = Error.prototype
function makeLogEntry(text, raw) {
let log
if (raw) {
log = $('<li></li>').appendTo('#log').append(text)
} else {
log = $('<li></li>').text(text+" ").appendTo('#log')
}
log.resolve = function(text) {
return $('<span></span>').html(text).appendTo(log)
}
return log
}
function fetch_file() {
const domain = $('#domain').val()
const url = "https://" + domain + TOML_PATH
const log = makeLogEntry('Checking ' + url + '...')
$.ajax({
url: url,
dataType: 'text',
success: function(data) {
log.resolve('FOUND').addClass(CLASS_GOOD)
parse_xrpl_toml(data, domain)
},
error: function(jqxhr, status, error) {
switch (status) {
case 'timeout':
err = 'TIMEOUT'
break
case 'abort':
err = 'ABORTED'
break
case 'error':
err = 'ERROR'
break
default:
err = 'UNKNOWN'
}
log.resolve(err).addClass(CLASS_BAD).after(TIPS)
}
})
}
async function parse_xrpl_toml(data, domain) {
let parsed
let log1 = makeLogEntry("Parsing TOML data...")
try {
parsed = TOML(data)
log1.resolve("SUCCESS").addClass(CLASS_GOOD)
} catch(e) {
log1.resolve(e).addClass(CLASS_BAD)
return
}
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)
}
}
async function list_entries(name, list, fields, validate) {
let list_wrap = $("<p>"+name+"</p>")
let list_ol = $("<ol>").appendTo(list_wrap)
for (i=0; i<list.length; i++) {
let entry_wrap = $("<li>").appendTo(list_ol)
let entry_def = $("<ul class='mb-3'>").appendTo(entry_wrap)
let entry = list[i]
for (j=0; j<fields.length; j++) {
let fieldname = fields[j]
if (entry[fieldname] !== undefined) {
let field_def = $("<li><strong>"+fieldname+":</strong> ").appendTo(entry_def)
$(" <span class='"+fieldname+"'>").text(entry[fieldname]).appendTo(field_def)
}
}
if (validate) {
validate(entry).then((validated) => {
if (validated === true) {
entry_def.append('<li class="badge badge-success">Domain Validated <i class="fa fa-check-circle"></i></li>')
}
})
}
}
makeLogEntry(list_wrap, true)
}
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 (parsed.VALIDATORS) {
list_entries("Validators:", parsed.VALIDATORS, VALIDATOR_FIELDS)
}
if (parsed.PRINCIPALS) {
list_entries("Principals:", parsed.PRINCIPALS, PRINCIPAL_FIELDS)
}
if (parsed.SERVERS) {
list_entries("Servers:", parsed.SERVERS, SERVER_FIELDS)
}
if (parsed.CURRENCIES) {
list_entries("Currencies:", parsed.CURRENCIES, CURRENCY_FIELDS)
}
}
const testnet = new ripple.RippleAPI({server: 'wss://s.altnet.rippletest.net:51233'})
testnet.connect()
const mainnet = new ripple.RippleAPI({server: 'wss://s1.ripple.com'})
mainnet.connect()
async function validate_address_domain_on_net(address, domain, net) {
if (net === "main") {
let settings
try {
settings = await mainnet.getSettings(address)
} catch(e) {
console.error("failed to look up address on mainnet:", address, e)
return undefined
}
if (settings.domain === domain) {
return true
} else if (settings.domain === undefined) {
console.debug(address, ": Domain is undefined in settings")
return undefined
} else {
console.debug(address, ": Domain mismatch ("+settings.domain+" vs. "+domain+")")
return false
}
} else if (net === "testnet") {
let settings
try {
settings = await testnet.getSettings(address)
} catch(e) {
console.error("failed to look up address on testnet:", address, e)
return undefined
}
if (settings.domain === domain) {
return true
} else if (settings.domain === undefined) {
console.debug(address, ": Domain is undefined in settings")
return undefined
} else {
return false
}
} else {
return undefined
}
}
function handle_submit(event) {
event.preventDefault();
$('.result-title').show()
$('#result').show()
$('#log').empty()
fetch_file()
}
$(document).ready(() => {
$('#domain-entry').submit(handle_submit)
})

1660
assets/vendor/iarna-toml-parse.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -19,11 +19,9 @@ Ripple provides a set of developer tools to help you test, explore, and validate
Use the WebSocket and JSON-RPC Test Net endpoints to test software built on the XRP Ledger without using real funds. Generate Test Net credentials and funds for testing purposes. Test Net ledger and balances are reset on a regular basis.
* **[ripple.txt Validator](ripple-txt-validator.html)**
* **[xrp-ledger.toml Checker](xrp-ledger-toml-checker.html)**
Use this tool to verify that your `ripple.txt` is syntactically correct and deployed properly.
**Warning:** The `ripple.txt` file definition has been deprecated. Use an [xrp-ledger.toml file](xrp-ledger-toml.html) instead.
Use this tool to verify that your [xrp-ledger.toml file](xrp-ledger-toml.html) is set up properly.
* **[Transaction Sender](tx-sender.html)**

View File

@@ -6,7 +6,7 @@ This tutorial explains how to send a simple XRP Payment using RippleAPI for Java
<!-- Interactive example use ripple-lib and its prerequisites -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
<script type="application/javascript" src="assets/js/ripple-lib-1.1.2-min.js"></script>
<script type="application/javascript" src="assets/js/ripple-lib-1.2.4-min.js"></script>
<!-- Helper for interactive tutorial breadcrumbs -->
<script type="application/javascript" src="assets/js/interactive-tutorial.js"></script>

View File

@@ -973,8 +973,6 @@ pages:
targets:
- local
# TODO: identify your accounts with ripple.txt (to come later)
- name: Manage the rippled Server
html: manage-the-rippled-server.html
funnel: Docs
@@ -2932,12 +2930,20 @@ pages:
- local
template: template-rest-api-tool.html
- name: ripple.txt Validator
- name: ripple.txt Validator # Redirect from ripple.txt validator to toml
funnel: Dev Tools
html: ripple-txt-validator.html
template: template-redirect.html
redirect_url: xrp-ledger-toml-checker.html
targets:
- local
template: template-ripple-txt-validator.html
- name: xrp-ledger.toml Checker
funnel: Dev Tools
html: xrp-ledger-toml-checker.html
targets:
- local
template: template-xrp-ledger-toml-checker.html
- name: XRP Test Net Faucet
funnel: Dev Tools

View File

@@ -152,7 +152,7 @@
{% block endbody %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
<script type="application/javascript" src="assets/js/ripple-lib-1.1.2-min.js"></script>
<script type="application/javascript" src="assets/js/ripple-lib-1.2.4-min.js"></script>
<script type="application/javascript" src="assets/vendor/bootstrap-growl.jquery.js"></script>
<script type='application/javascript' src='assets/js/tx-sender.js'></script>
{% endblock %}

View File

@@ -0,0 +1,32 @@
{% extends "template-base.html" %}
{% block main %}
<section class="container-fluid p-3">
<h1>xrp-ledger.toml Checker</h1>
<p>If you run an XRP Ledger validator or use the XRP Ledger for your business, you can provide information about your usage of the XRP Ledger to the world in a machine-readable <a href="https://developers.ripple.com/xrp-ledger-toml.html"><code>xrp-ledger.toml</code> file</a>.</p>
<p>This tool allows you to verify that your <code>xrp-ledger.toml</code> file is syntactically
correct and deployed properly.</p><br/>
<form id="domain-entry">
<div class="input-group">
<input id="domain" type="text" class="form-control" required
placeholder="example.com (Domain name to check)"
pattern="^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$"><br>
<button class="btn btn-primary form-control">Check toml file</button>
</div><!--/.input-group-->
</form>
<div id="result">
<h5 class='result-title'>Result</h5>
<ul id="log">
</ul>
</div>
</section>
{% endblock %}
{% block endbody %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
<script type="application/javascript" src="assets/js/ripple-lib-1.2.4-min.js"></script>
<script type='text/javascript' src='assets/vendor/iarna-toml-parse.js'></script>
<script type='text/javascript' src='assets/js/xrp-ledger-toml-checker.js'></script>
{% endblock %}