108 lines
5.2 KiB
JavaScript
108 lines
5.2 KiB
JavaScript
exports.newNetworkModulesUserProfiles = function newNetworkModulesUserProfiles() {
|
|
/*
|
|
This module is useful for all Apps that needs to operate with all User Profiles loaded in
|
|
memory maps.
|
|
|
|
User Profiles are plugins of the Governance System. Besides the info they carry, we also
|
|
need to read the blockchain for each one in order to calculate their ranking.
|
|
*/
|
|
let thisObject = {
|
|
/* Framework Functions */
|
|
initialize: initialize,
|
|
finalize: finalize
|
|
}
|
|
|
|
return thisObject
|
|
|
|
function finalize() {
|
|
|
|
}
|
|
|
|
async function initialize(signingAccountChildCodeName, p2pNetworkIdentity) {
|
|
|
|
let pluginFileNames = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames(
|
|
'Governance',
|
|
'User-Profiles'
|
|
)
|
|
|
|
for (let i = 0; i < pluginFileNames.length; i++) {
|
|
let pluginFileName = pluginFileNames[i]
|
|
|
|
let pluginFileContent = await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent(
|
|
'Governance',
|
|
'User-Profiles',
|
|
pluginFileName
|
|
)
|
|
|
|
let userProfilePlugin = JSON.parse(pluginFileContent)
|
|
let config = JSON.parse(userProfilePlugin.config)
|
|
let signatureObject = config.signature
|
|
let web3 = new SA.nodeModules.web3()
|
|
let blockchainAccount = web3.eth.accounts.recover(signatureObject)
|
|
let ranking = 0 // TODO: read the blockchain balance and transactions from the Treasury Account to calculate the profile ranking.
|
|
let userProfileId = userProfilePlugin.id
|
|
let userHandle = config.signature.message
|
|
|
|
let userProfile = SA.projects.socialTrading.modules.socialGraphUserProfile.newSocialTradingModulesSocialGraphUserProfile()
|
|
userProfile.initialize(
|
|
userProfileId,
|
|
userHandle,
|
|
blockchainAccount,
|
|
ranking
|
|
)
|
|
|
|
SA.projects.network.globals.memory.maps.USER_PROFILES_BY_ID.set(userProfileId, userProfile)
|
|
SA.projects.network.globals.memory.maps.USER_PROFILES_BY_HANDLE.set(userHandle, userProfile)
|
|
SA.projects.network.globals.memory.maps.USER_PROFILES_BY_BLOKCHAIN_ACCOUNT.set(blockchainAccount, userProfile)
|
|
/*
|
|
Each User Profile might have Signing Accounts, meaning
|
|
accounts that can be signed on behalf of the User Profile.
|
|
*/
|
|
if (userProfilePlugin.signingAccounts !== undefined) {
|
|
for (let j = 0; j < userProfilePlugin.signingAccounts.signingAccounts.length; j++) {
|
|
let signingAccount = userProfilePlugin.signingAccounts.signingAccounts[j]
|
|
let config = JSON.parse(signingAccount.config)
|
|
let signatureObject = config.signature
|
|
let web3 = new SA.nodeModules.web3()
|
|
let blockchainAccount = web3.eth.accounts.recover(signatureObject)
|
|
SA.projects.network.globals.memory.maps.USER_PROFILES_BY_BLOKCHAIN_ACCOUNT.set(blockchainAccount, userProfile)
|
|
/*
|
|
If the Signing Account is for a P2P node, we will add the node to the array of available nodes at the p2p network.
|
|
*/
|
|
if (
|
|
signingAccount.signingAccountChild.type === "P2P Network Node" &&
|
|
signingAccount.signingAccountChild.config !== undefined
|
|
) {
|
|
let config
|
|
try {
|
|
config = JSON.parse(signingAccount.signingAccountChild.config)
|
|
} catch (err) {
|
|
console.log('P2P Network Node Config not in JSON format. userProfileHandle = ' + userHandle + ' NodeId = ' + signingAccount.signingAccountChild.id)
|
|
continue
|
|
}
|
|
if (config.host === undefined) {
|
|
continue
|
|
}
|
|
if (config.webSocketsPort === undefined) {
|
|
continue
|
|
}
|
|
|
|
let p2pNetworkNode = SA.projects.network.modules.p2pNetworkNode.newNetworkModulesP2PNetworkNode()
|
|
p2pNetworkNode.initialize(signingAccount.signingAccountChild, userProfile, blockchainAccount)
|
|
SA.projects.network.globals.memory.arrays.P2P_NETWORK_NODES.push(p2pNetworkNode)
|
|
}
|
|
/*
|
|
Now, we will extract the information from the User Profile, specifically of our identity at the p2p network.
|
|
*/
|
|
if (
|
|
signingAccount.signingAccountChild.id === SA.secrets.map.get(signingAccountChildCodeName).signingAccountChildId
|
|
) {
|
|
p2pNetworkIdentity.node = signingAccount.signingAccountChild
|
|
p2pNetworkIdentity.blockchainAccount = blockchainAccount
|
|
p2pNetworkIdentity.userProfile = userProfile
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |