UNPKG

taxa-network

Version:

Helper functions for building apps on the Taxa Network

66 lines (63 loc) 9.1 kB
let jose = require('jose') function make_ip(ip) { if(ip.startsWith("http://") || ip.startsWith("https://")) { return ip; } return "http://" + ip; } exports.get_access_token = async function(ip) { const response = await fetch(make_ip(ip) + "/api/access_token"); if(response.status != 200) { throw new Error("access token api returned non 200 status code:", response.status); } const response_body2 = await response.json(); const token = response_body2["access_token"]; //console.log("got access_token:", token, "\n"); return token; } exports.get_report_hard_coded = async function() { // Known working example return {"report": "AQAAAAIAAAD4EQAAAAAAAAMAAgAAAAAACwAQAJOacjP3nEyplAoNs5V_BgdP1sGQoJ_DQQK6XCU2_Qv4AAAAABUVCwf_gA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAABwAAAAAAAADXvFy9kDT2TJU9yEt9Sgq2xLYx9CN_wjncA1uUfWaGOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6jTFvBXf8EZa72ZRLv4MOjOTxO7ja6o_-fk3YVI3c1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-RaKAQ-EPsODsXtRD1xAmbmhYpOnA4ytfvYDe1hrCYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQQAACRnlNDZk0K1zUs6uYgO65AvbCVhG3VNBDB1iei0thWsaUmMJavZb0H8HAxcF1YkO_QwqlP7uRRRGJ4Qgbi0BG2kVybBA_Bz770tM12B2yyrfEfFjfeKZORW1sEI0VtBwGCzFypQBUGyjvwgwWDKZc5UsTJPbbopyeo7UKinlTbixUVCwf_gA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAABwAAAAAAAAB4_oz9AQlaDxCK_1xAYkuTYS1sKLc-Go0oF5yd3w4GhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjE9XddeWUD6WE393xoqCmgBWrI3tcBQLCBsJRJDFe_8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA776BY4UMPH6LjCJGIuL7iBo9f998-S7xQFjgrNFrdpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGvaTfw6qI9oCXgeRlMgiCt0Hbc9JifSn_BNHW5Eqaev6lC6Jqn7umGgafq5tYRHIbqylBBVn_2wCAxBvHXlD6EgAAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fBQDcDQAALS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVqakNDQkRPZ0F3SUJBZ0lVYnpOZHFtbXp0Q0lwQlBSbkZjcWIzYjdnbm8wd0NnWUlLb1pJemowRUF3SXcKY1RFak1DRUdBMVVFQXd3YVNXNTBaV3dnVTBkWUlGQkRTeUJRY205alpYTnpiM0lnUTBFeEdqQVlCZ05WQkFvTQpFVWx1ZEdWc0lFTnZjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFCkNBd0NRMEV4Q3pBSkJnTlZCQVlUQWxWVE1CNFhEVEkwTURreU1ERXdOVEV4TWxvWERUTXhNRGt5TURFd05URXgKTWxvd2NERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJEU3lCRFpYSjBhV1pwWTJGMFpURWFNQmdHQTFVRQpDZ3dSU1c1MFpXd2dRMjl5Y0c5eVlYUnBiMjR4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEClZRUUlEQUpEUVRFTE1Ba0dBMVVFQmhNQ1ZWTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBVEgKWHRDOWZ6dmd6TlpwTUVWcFFpSlczdnBYRlRERHBUbG55UVdRS1lFV2VRcWIyRTNkVjZlMXRRYUdTaDJqcHpncApKSzBBMW9lckIrN1NDTmlnYXBuV280SUNxRENDQXFRd0h3WURWUjBqQkJnd0ZvQVUwT2lxMm5YWCtTNUpGNWc4CmV4UmwwTlh5V1Uwd2JBWURWUjBmQkdVd1l6QmhvRitnWFlaYmFIUjBjSE02THk5aGNHa3VkSEoxYzNSbFpITmwKY25acFkyVnpMbWx1ZEdWc0xtTnZiUzl6WjNndlkyVnlkR2xtYVdOaGRHbHZiaTkyTXk5d1kydGpjbXcvWTJFOQpjSEp2WTJWemMyOXlKbVZ1WTI5a2FXNW5QV1JsY2pBZEJnTlZIUTRFRmdRVXJCSmEyTmtZOGJQaGdrSzZJSWhiCjU4dDFjU1V3RGdZRFZSMFBBUUgvQkFRREFnYkFNQXdHQTFVZEV3RUIvd1FDTUFBd2dnSFVCZ2txaGtpRytFMEIKRFFFRWdnSEZNSUlCd1RBZUJnb3Foa2lHK0UwQkRRRUJCQkJmV1RENWZqQ05hYWs5M0hhYVBEVjZNSUlCWkFZSwpLb1pJaHZoTkFRMEJBakNDQVZRd0VBWUxLb1pJaHZoTkFRMEJBZ0VDQVJVd0VBWUxLb1pJaHZoTkFRMEJBZ0lDCkFSVXdFQVlMS29aSWh2aE5BUTBCQWdNQ0FRSXdFQVlMS29aSWh2aE5BUTBCQWdRQ0FRUXdFQVlMS29aSWh2aE4KQVEwQkFnVUNBUUV3RVFZTEtvWklodmhOQVEwQkFnWUNBZ0NBTUJBR0N5cUdTSWI0VFFFTkFRSUhBZ0VPTUJBRwpDeXFHU0liNFRRRU5BUUlJQWdFQU1CQUdDeXFHU0liNFRRRU5BUUlKQWdFQU1CQUdDeXFHU0liNFRRRU5BUUlLCkFnRUFNQkFHQ3lxR1NJYjRUUUVOQVFJTEFnRUFNQkFHQ3lxR1NJYjRUUUVOQVFJTUFnRUFNQkFHQ3lxR1NJYjQKVFFFTkFRSU5BZ0VBTUJBR0N5cUdTSWI0VFFFTkFRSU9BZ0VBTUJBR0N5cUdTSWI0VFFFTkFRSVBBZ0VBTUJBRwpDeXFHU0liNFRRRU5BUUlRQWdFQU1CQUdDeXFHU0liNFRRRU5BUUlSQWdFTk1COEdDeXFHU0liNFRRRU5BUUlTCkJCQVZGUUlFQVlBT0FBQUFBQUFBQUFBQU1CQUdDaXFHU0liNFRRRU5BUU1FQWdBQU1CUUdDaXFHU0liNFRRRU4KQVFRRUJnQ1FidFVBQURBUEJnb3Foa2lHK0UwQkRRRUZDZ0VBTUFvR0NDcUdTTTQ5QkFNQ0Ewa0FNRVlDSVFDQwpsc0xtN2EzQTZJNkFFZnFUWFV2VUhtNW5aWjlMN3FLSG8rdFByc00wdmdJaEFPMDZnaUxZNjdlZmpzVVhqTjB0Cmd6Z0h6anJQQTZMdVAzbyt1WHQ3M3FBMgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDbURDQ0FqNmdBd0lCQWdJVkFORG9xdHAxMS9rdVNSZVlQSHNVWmREVjhsbE5NQW9HQ0NxR1NNNDlCQU1DCk1HZ3hHakFZQmdOVkJBTU1FVWx1ZEdWc0lGTkhXQ0JTYjI5MElFTkJNUm93R0FZRFZRUUtEQkZKYm5SbGJDQkQKYjNKd2IzSmhkR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFKQmdOVkJBZ01Ba05CTVFzdwpDUVlEVlFRR0V3SlZVekFlRncweE9EQTFNakV4TURVd01UQmFGdzB6TXpBMU1qRXhNRFV3TVRCYU1IRXhJekFoCkJnTlZCQU1NR2tsdWRHVnNJRk5IV0NCUVEwc2dVSEp2WTJWemMyOXlJRU5CTVJvd0dBWURWUVFLREJGSmJuUmwKYkNCRGIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQgpNUXN3Q1FZRFZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkw5cStOTXAySU9nCnRkbDFiay91V1o1K1RHUW04YUNpOHo3OGZzK2ZLQ1EzZCt1RHpYblZUQVQyWmhEQ2lmeUl1Snd2TjN3TkJwOWkKSEJTU01KTUpyQk9qZ2Jzd2diZ3dId1lEVlIwakJCZ3dGb0FVSW1VTTFscWROSW56ZzdTVlVyOVFHemtuQnF3dwpVZ1lEVlIwZkJFc3dTVEJIb0VXZ1E0WkJhSFIwY0hNNkx5OWpaWEowYVdacFkyRjBaWE11ZEhKMWMzUmxaSE5sCmNuWnBZMlZ6TG1sdWRHVnNMbU52YlM5SmJuUmxiRk5IV0ZKdmIzUkRRUzVrWlhJd0hRWURWUjBPQkJZRUZORG8KcXRwMTEva3VTUmVZUEhzVVpkRFY4bGxOTUE0R0ExVWREd0VCL3dRRUF3SUJCakFTQmdOVkhSTUJBZjhFQ0RBRwpBUUgvQWdFQU1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRQ0pnVGJ0VnFPeVoxbTNqcWlBWE02UVlhNnI1c1dTCjR5L0c3eTh1SUpHeGR3SWdScVB2QlNLenpRYWdCTFFxNXM1QTcwcGRvaWFSSjh6LzB1RHo0TmdWOTFrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgA=", "EnclaveHeldData": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFoTVI1VGVKOE4zd29vdG5lYThpNAo1eUlKbHdTOGxmRnk0cDlZSDZoQnMzTTNzaWxFdmkybTVZZGFaMU5UQTFua2F5cm9GUC9XTGozckVrd0ZRdGpUCldkdW93N3ZJcmVCUkFneU5NeFhSRi9ZQnoyYmNxL1lHeEkyTEtoSlJXbWJjVk0yZ0UraE5iZEtHWDZkVndlcFMKK1JDYTBlS3NDdlIrVFg5NzJzUXM0NnBwRHZGQ3E2SE5sbWlheHVQeWpXSmo1T0xxMzk3TkRlK0FrLytaUEpQSgpsb3JGeWh5MDNQTE9oV2x6Kzk4VFlYUEEza3NtN1djRmlQWEJvZDIvemNJVGNkTjZndlFMcEFPVWQ4WkNaNFkrCmhNNTBtMWp6R0pUa2YrL3kxSmQ4bnhkdENCUmJwZUIvcFY1MEl2UFJqYm5EWlorMHFaK3A2ZFhXSjdIS3Q5SkQKN3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}; } exports.get_report = async function(ip) { const response = await fetch(make_ip(ip) + "/api/report/"); const report = await response.json(); //console.log("got report:", report); return report } exports.send_report = async function(ip, access_token, report) { const url = make_ip(ip) + "/api/send_report"; const response = await fetch(url, { method: "POST", headers:{'Content-Type': 'application/json'}, body: JSON.stringify({'report': report, 'access_token': access_token}) }); response_body = await response.json(); const token = response_body["other_token"]; //console.log("got other token:", token, "\n"); return token; } exports.get_certs = async function(other_token) { const header = JSON.parse(atob(other_token.split(".")[0])); const url = header["jku"]; const response = await fetch(url, { method: "get" }); return await response.json(); } exports.verify_jwt_token = async function(token) { const keys = await exports.get_certs(token); const our_key = keys["keys"][0]; const ecPublicKey = await jose.importJWK(our_key); var verified = await jose.jwtVerify(token, ecPublicKey); //console.log("success:", verified); } exports.attestation = async function(ip, success_callback, error_callback) { try { const access_token = await exports.get_access_token(ip); const report = await exports.get_report(ip); const other_token = await exports.send_report(ip, access_token, report); exports.verify_jwt_token(other_token); success_callback(other_token); } catch(e) { error_callback(e); } }