Commit 6467175e authored by Eriksson Monteiro's avatar Eriksson Monteiro

update tangled browser ui

parent 8b952e86
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -25,84 +25,87 @@ class _SLzLU50givH77Rns extends Endpoint { ...@@ -25,84 +25,87 @@ class _SLzLU50givH77Rns extends Endpoint {
const transactionId = req.query.p0; const transactionId = req.query.p0;
const addressKeyIdentifier = req.query.p1; const addressKeyIdentifier = req.query.p1;
const attributeTypeId = req.query.p2; const attributeTypeId = req.query.p2;
fileManager.getBufferByTransactionAndFileHash(transactionId, addressKeyIdentifier, attributeTypeId, req.query.p3, req.query.p4) fileManager.getAttributesByTransactionAndFileHash(transactionId, addressKeyIdentifier, attributeTypeId, req.query.p3, req.query.p4)
.then(({file_data: fileData}) => { .then(([attributes, transactionData]) => {
return database.applyShards((shardID) => { return fileManager.getDecryptedBuffer(attributes, transactionData, attributeTypeId, req.query.p3, req.query.p4)
const transactionRepository = database.getRepository('transaction', shardID); .then(({file_data: fileData}) => {
return transactionRepository.listTransactionOutputAttributes({ return database.applyShards((shardID) => {
transaction_id : transactionId, const transactionRepository = database.getRepository('transaction', shardID);
attribute_type_id: attributeTypeId return transactionRepository.listTransactionOutputAttributes({
}); transaction_id : transactionId,
}).then(attributes => { attribute_type_id: attributeTypeId
for (const attribute of attributes) { });
if (attribute.attribute_type_id === this.normalizationRepository.get('transaction_output_metadata')) { }).then(attributes => {
const transactionOutputMetadata = JSON.parse(attribute.value); for (const attribute of attributes) {
try { if (attribute.attribute_type_id === this.normalizationRepository.get('transaction_output_metadata')) {
const jsonData = JSON.parse(fileData); const transactionOutputMetadata = JSON.parse(attribute.value);
transactionOutputMetadata['file_data'] = {[req.query.p3]: jsonData}; try {
} const jsonData = JSON.parse(fileData);
catch (ignored) { transactionOutputMetadata['file_data'] = {[req.query.p3]: jsonData};
} }
res.send({ catch (ignored) {
status : 'synced', }
transaction_output_metadata: transactionOutputMetadata res.send({
}); status : 'synced',
return; transaction_output_metadata: transactionOutputMetadata
} });
} return;
}
}
return Promise.reject('transaction_sync_fail'); return Promise.reject('transaction_sync_fail');
}); });
}) })
.catch(e => { .catch(e => {
return database.firstShards(shardId => { return database.firstShards(shardId => {
const transactionRepository = database.getRepository('transaction', shardId); const transactionRepository = database.getRepository('transaction', shardId);
return transactionRepository.getTransaction(transactionId); return transactionRepository.getTransaction(transactionId);
}).then(transaction => { }).then(transaction => {
if (!transaction) { if (!transaction) {
fileSync.addToPendingSync(transactionId, { fileSync.addToPendingSync(transactionId, {
priority : 1, priority : 1,
max_retries: 15 max_retries: 15
}); });
peer.transactionSyncRequest(transactionId, { peer.transactionSyncRequest(transactionId, {
priority : 1, priority : 1,
dispatch_request : true, dispatch_request : true,
force_request_sync: true force_request_sync: true
}).catch(_ => _); }).catch(_ => _);
res.send({ res.send({
status : 'syncing', status : 'syncing',
trigger: 'transaction_not_found' trigger: 'transaction_not_found'
}); });
return; return;
} }
return database.applyShards((shardID) => { return database.applyShards((shardID) => {
const transactionRepository = database.getRepository('transaction', shardID); const transactionRepository = database.getRepository('transaction', shardID);
return transactionRepository.listTransactionOutputAttributes({ return transactionRepository.listTransactionOutputAttributes({
transaction_id : transactionId, transaction_id : transactionId,
attribute_type_id: attributeTypeId attribute_type_id: attributeTypeId
}); });
}).then(attributes => { }).then(attributes => {
for (const attribute of attributes) { for (const attribute of attributes) {
if (attribute.attribute_type_id === this.normalizationRepository.get('transaction_output_metadata')) { if (attribute.attribute_type_id === this.normalizationRepository.get('transaction_output_metadata')) {
const transactionOutputMetadata = JSON.parse(attribute.value); const transactionOutputMetadata = JSON.parse(attribute.value);
fileSync.add(transactionId, addressKeyIdentifier, transactionOutputMetadata, Math.floor(transaction.transaction_date.getTime() / 1000), { fileSync.add(transactionId, transactionData.address_key_identifier_from, transactionOutputMetadata, Math.floor(transaction.transaction_date.getTime() / 1000), {
priority : 1, priority : 1,
max_retries: 15 max_retries: 15
}); });
res.send({ res.send({
status : 'syncing', status : 'syncing',
trigger: e?.code === 'ENOENT' ? 'transaction_data_not_found' : e trigger: e?.code === 'ENOENT' ? 'transaction_data_not_found' : e
}); });
return; return;
} }
} }
return Promise.reject('transaction_sync_fail'); return Promise.reject('transaction_sync_fail');
}); });
}); });
});
}) })
.catch(e => res.send({ .catch(e => res.send({
api_status : 'fail', api_status : 'fail',
......
const CONST_VALUE_DEFAULT = { const CONST_VALUE_DEFAULT = {
'MODE_DEBUG' : false, 'MODE_DEBUG' : false,
'MODE_TEST_NETWORK' : true, 'MODE_TEST_NETWORK' : false,
'NODE_MILLIX_BUILD_DATE' : 1660820789, 'NODE_MILLIX_BUILD_DATE' : 1660831931,
'NODE_MILLIX_VERSION' : '1.20.4-testnet', 'NODE_MILLIX_VERSION' : '1.20.4',
'DATA_BASE_DIR_MAIN_NETWORK': './millix-tangled-testnet', 'DATA_BASE_DIR_MAIN_NETWORK': './millix',
'DATA_BASE_DIR_TEST_NETWORK': './millix-tangled-testnet', 'DATA_BASE_DIR_TEST_NETWORK': './millix-testnet',
'DEBUG_LOG_FILTER' : [] 'DEBUG_LOG_FILTER' : [],
'NODE_PORT_STORAGE_RECEIVER_TEST_NETWORK': 6000,
'NODE_PORT_STORAGE_RECEIVER_MAIN_NETWORK': 8000,
'NODE_PORT_STORAGE_PROVIDER_TEST_NETWORK': 6001,
'NODE_PORT_STORAGE_PROVIDER_MAIN_NETWORK': 8001,
'CONSENSUS_ROUND_NODE_COUNT' : 12,
'CONSENSUS_ROUND_VALIDATION_REQUIRED': 3,
'CONSENSUS_ROUND_VALIDATION_MAX' : 3,
'CONSENSUS_ROUND_NOT_FOUND_MAX' : 3,
'CONSENSUS_ROUND_DOUBLE_SPEND_MAX' : 3,
'CONSENSUS_VALIDATION_WAIT_TIME_MAX': 15 * 1000
}; };
let environment; let environment;
...@@ -40,10 +53,10 @@ export const NODE_PORT_MAIN_NETWORK = 10000; ...@@ -40,10 +53,10 @@ export const NODE_PORT_MAIN_NETWORK = 10000;
export const NODE_PORT_TEST_NETWORK = 30000; export const NODE_PORT_TEST_NETWORK = 30000;
export const NODE_PORT_DISCOVERY_TEST_NETWORK = 4000; export const NODE_PORT_DISCOVERY_TEST_NETWORK = 4000;
export const NODE_PORT_DISCOVERY_MAIN_NETWORK = 2000; export const NODE_PORT_DISCOVERY_MAIN_NETWORK = 2000;
export const NODE_PORT_STORAGE_RECEIVER_TEST_NETWORK = 6000; export const NODE_PORT_STORAGE_RECEIVER_TEST_NETWORK = getConstValue('NODE_PORT_STORAGE_RECEIVER_TEST_NETWORK');
export const NODE_PORT_STORAGE_RECEIVER_MAIN_NETWORK = 8000; export const NODE_PORT_STORAGE_RECEIVER_MAIN_NETWORK = getConstValue('NODE_PORT_STORAGE_RECEIVER_MAIN_NETWORK');
export const NODE_PORT_STORAGE_PROVIDER_TEST_NETWORK = 6001; export const NODE_PORT_STORAGE_PROVIDER_TEST_NETWORK = getConstValue('NODE_PORT_STORAGE_PROVIDER_TEST_NETWORK');
export const NODE_PORT_STORAGE_PROVIDER_MAIN_NETWORK = 8001; export const NODE_PORT_STORAGE_PROVIDER_MAIN_NETWORK = getConstValue('NODE_PORT_STORAGE_PROVIDER_MAIN_NETWORK');
export const NODE_PORT_STORAGE_RECEIVER = MODE_TEST_NETWORK ? NODE_PORT_STORAGE_RECEIVER_TEST_NETWORK : NODE_PORT_STORAGE_RECEIVER_MAIN_NETWORK; export const NODE_PORT_STORAGE_RECEIVER = MODE_TEST_NETWORK ? NODE_PORT_STORAGE_RECEIVER_TEST_NETWORK : NODE_PORT_STORAGE_RECEIVER_MAIN_NETWORK;
export const NODE_PORT_STORAGE_PROVIDER = MODE_TEST_NETWORK ? NODE_PORT_STORAGE_PROVIDER_TEST_NETWORK : NODE_PORT_STORAGE_PROVIDER_MAIN_NETWORK; export const NODE_PORT_STORAGE_PROVIDER = MODE_TEST_NETWORK ? NODE_PORT_STORAGE_PROVIDER_TEST_NETWORK : NODE_PORT_STORAGE_PROVIDER_MAIN_NETWORK;
export const NODE_PORT_DISCOVERY = MODE_TEST_NETWORK ? NODE_PORT_DISCOVERY_TEST_NETWORK : NODE_PORT_DISCOVERY_MAIN_NETWORK; export const NODE_PORT_DISCOVERY = MODE_TEST_NETWORK ? NODE_PORT_DISCOVERY_TEST_NETWORK : NODE_PORT_DISCOVERY_MAIN_NETWORK;
...@@ -757,14 +770,14 @@ export const NODE_CONNECTION_INBOUND_WHITELIST = []; ...@@ -757,14 +770,14 @@ export const NODE_CONNECTION_INBOUND_WHITELIST = [];
export const NODE_CONNECTION_OUTBOUND_WHITELIST = []; export const NODE_CONNECTION_OUTBOUND_WHITELIST = [];
export const NODE_CONNECTION_STATIC = []; export const NODE_CONNECTION_STATIC = [];
export const NODE_INITIAL_LIST = MODE_TEST_NETWORK ? NODE_INITIAL_LIST_TEST_NETWORK : NODE_INITIAL_LIST_MAIN_NETWORK; export const NODE_INITIAL_LIST = MODE_TEST_NETWORK ? NODE_INITIAL_LIST_TEST_NETWORK : NODE_INITIAL_LIST_MAIN_NETWORK;
export const CONSENSUS_ROUND_NODE_COUNT = 2; export const CONSENSUS_ROUND_NODE_COUNT = getConstValue('CONSENSUS_ROUND_NODE_COUNT');
export const CONSENSUS_ROUND_VALIDATION_REQUIRED = 1; export const CONSENSUS_ROUND_VALIDATION_REQUIRED = getConstValue('CONSENSUS_ROUND_VALIDATION_REQUIRED');
export const CONSENSUS_ROUND_VALIDATION_MAX = 3; export const CONSENSUS_ROUND_VALIDATION_MAX = getConstValue('CONSENSUS_ROUND_VALIDATION_MAX');
export const CONSENSUS_ROUND_NOT_FOUND_MAX = 3; export const CONSENSUS_ROUND_NOT_FOUND_MAX = getConstValue('CONSENSUS_ROUND_NOT_FOUND_MAX');
export const CONSENSUS_ROUND_DOUBLE_SPEND_MAX = 3; export const CONSENSUS_ROUND_DOUBLE_SPEND_MAX = getConstValue('CONSENSUS_ROUND_DOUBLE_SPEND_MAX');
export const CONSENSUS_VALIDATION_DEPTH_MAX = 50; export const CONSENSUS_VALIDATION_DEPTH_MAX = 50;
export const CONSENSUS_VALIDATION_REQUEST_DEPTH_MAX = 100; export const CONSENSUS_VALIDATION_REQUEST_DEPTH_MAX = 100;
export const CONSENSUS_VALIDATION_WAIT_TIME_MAX = 15 * 1000; export const CONSENSUS_VALIDATION_WAIT_TIME_MAX = getConstValue('CONSENSUS_VALIDATION_WAIT_TIME_MAX');
export const CONSENSUS_VALIDATION_RETRY_WAIT_TIME = 10 * 1000; export const CONSENSUS_VALIDATION_RETRY_WAIT_TIME = 10 * 1000;
export const CONSENSUS_VALIDATION_PARALLEL_PROCESS_MAX = 2; export const CONSENSUS_VALIDATION_PARALLEL_PROCESS_MAX = 2;
export const CONSENSUS_VALIDATION_PARALLEL_REQUEST_MAX = 2; export const CONSENSUS_VALIDATION_PARALLEL_REQUEST_MAX = 2;
......
...@@ -254,30 +254,32 @@ class FileManager { ...@@ -254,30 +254,32 @@ class FileManager {
} }
getBufferByTransactionAndFileHash(transactionId, addressKeyIdentifier, attributeTypeId, fileHash, fileKey = null) { getBufferByTransactionAndFileHash(transactionId, addressKeyIdentifier, attributeTypeId, fileHash, fileKey = null) {
return this.getAttributesByTransactionAndFileHash(transactionId, addressKeyIdentifier, attributeTypeId, fileHash, fileKey).then(([attributes, data]) => { return this.getAttributesByTransactionAndFileHash(transactionId, addressKeyIdentifier, attributeTypeId, fileHash, fileKey).then(([attributes, data]) => this.getDecryptedBuffer(attributes, data, attributeTypeId, fileHash, fileKey));
for (const attribute of attributes) { }
attribute.value = JSON.parse(attribute.value);
if (attribute.attribute_type_id === this.normalizationRepository.get('transaction_output_metadata')) {
const file = _.find(attribute.value.file_list, file => file.hash === fileHash);
if (!file) {
return Promise.reject('file_not_found');
}
const key = fileKey ? Buffer.from(fileKey, 'hex') : file.key || file[wallet.defaultKeyIdentifier]?.key; getDecryptedBuffer(attributes, transactionData, attributeTypeId, fileHash, fileKey = null) {
for (const attribute of attributes) {
attribute.value = JSON.parse(attribute.value);
if (attribute.attribute_type_id === this.normalizationRepository.get('transaction_output_metadata')) {
const file = _.find(attribute.value.file_list, file => file.hash === fileHash);
if (!file) {
return Promise.reject('file_not_found');
}
if (!key) { const key = fileKey ? Buffer.from(fileKey, 'hex') : file.key || file[wallet.defaultKeyIdentifier]?.key;
return Promise.reject('decrypt_key_not_found');
}
const dataType = file.type || 'json'; if (!key) {
return this.decryptFile(data.address_key_identifier_from, data.transaction_date, data.transaction_id, file.hash, key, !!fileKey || file.public).then(fileData => ({ return Promise.reject('decrypt_key_not_found');
file_data: fileData,
mime_type: file.mime_type,
data_type: dataType
}));
} }
const dataType = file.type || 'json';
return this.decryptFile(transactionData.address_key_identifier_from, transactionData.transaction_date, transactionData.transaction_id, file.hash, key, !!fileKey || file.public).then(fileData => ({
file_data : fileData,
mime_type : file.mime_type,
data_type : dataType
}));
} }
}); }
} }
getBufferMetaByTransactionAndFileHash(transactionId, addressKeyIdentifier, attributeTypeId, fileHash, fileKey = null) { getBufferMetaByTransactionAndFileHash(transactionId, addressKeyIdentifier, attributeTypeId, fileHash, fileKey = null) {
...@@ -321,7 +323,7 @@ class FileManager { ...@@ -321,7 +323,7 @@ class FileManager {
}); });
}).then(attributes => { }).then(attributes => {
for (const attribute of attributes) { for (const attribute of attributes) {
if (attribute.attribute_type_id === this.normalizationRepository.get('transaction_output_metadata')) { if (attribute.attribute_type_id === database.getRepository('normalization').get('transaction_output_metadata')) {
attribute.value = JSON.parse(attribute.value); attribute.value = JSON.parse(attribute.value);
const file = _.find(attribute.value.file_list, file => file.hash === fileHash); const file = _.find(attribute.value.file_list, file => file.hash === fileHash);
if (!file) { if (!file) {
...@@ -468,9 +470,10 @@ class FileManager { ...@@ -468,9 +470,10 @@ class FileManager {
if (file.type.endsWith('_meta') && file.name.endsWith('_meta')) { if (file.type.endsWith('_meta') && file.name.endsWith('_meta')) {
const dataFileName = file.name.substring(0, file.name.length - 5); const dataFileName = file.name.substring(0, file.name.length - 5);
keySet[file.name] = keySet[dataFileName]; keySet[file.name] = keySet[dataFileName];
fileCipher = crypto.createCipher('aes-256-cbc', keySet[file.name]); fileCipher = crypto.createCipher('aes-256-cbc', keySet[file.name]);
} else { }
else {
fileCipher = crypto.createCipher('aes-256-cbc', keySet[file.name]); fileCipher = crypto.createCipher('aes-256-cbc', keySet[file.name]);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment