From 866911abfe66c2f5c1861686b7ed3e6538b899ce Mon Sep 17 00:00:00 2001 From: NAmorim Date: Wed, 24 Nov 2021 16:31:52 +0000 Subject: [PATCH] Contribution - Automatic fork creation - Setup of basic liquidity profile --- Platform/Client/githubServer.js | 46 +++++++++++++++ Platform/Client/httpInterface.js | 11 ++++ .../Function-Libraries/ProfileConstructor.js | 57 ++++++++++++++++++- 3 files changed, 113 insertions(+), 1 deletion(-) diff --git a/Platform/Client/githubServer.js b/Platform/Client/githubServer.js index eff3ebc8d..f245239f1 100644 --- a/Platform/Client/githubServer.js +++ b/Platform/Client/githubServer.js @@ -4,6 +4,7 @@ exports.newGithubServer = function newGithubServer() { getGithubStars: getGithubStars, getGithubWatchers: getGithubWatchers, getGithubForks: getGithubForks, + createGithubFork: createGithubFork, mergePullRequests: mergePullRequests, initialize: initialize, finalize: finalize, @@ -162,6 +163,51 @@ exports.newGithubServer = function newGithubServer() { } } + async function createGithubFork(repository, username, token) { + try { + username = unescape(username) + token = unescape(token) + + let error + + await doGithub() + + async function doGithub() { + try { + //const repo = 'Superalgos' + //const owner = username + const { Octokit } = SA.nodeModules.octokit + const octokit = new Octokit({ + auth: token, + userAgent: 'Superalgos ' + SA.version + }) + + await octokit.repos.createFork({ + owner: 'Superalgos', + repo: "Superalgos" + }) + } catch (err) { + if (err === undefined) { return } + console.log('[ERROR] Github Server -> createGithubFork -> doGithub -> err.stack = ' + err.stack) + } + } + } catch (err) { + console.log('[ERROR] Github Server -> createGithubFork -> Method call produced an error.') + console.log('[ERROR] Github Server -> createGithubFork -> err.stack = ' + err.stack) + console.log('[ERROR] Github Server -> createGithubFork -> repository = ' + repository) + console.log('[ERROR] Github Server -> createGithubFork -> username = ' + username) + console.log('[ERROR] Github Server -> createGithubFork -> token starts with = ' + token.substring(0, 10) + '...') + console.log('[ERROR] Github Server -> createGithubFork -> token ends with = ' + '...' + token.substring(token.length - 10)) + + let error = { + result: 'Fail Because', + message: err.message, + stack: err.stack + } + return error + } + } + async function mergeGithubPullRequests(commitMessage, username, token) { try { commitMessage = unescape(commitMessage) diff --git a/Platform/Client/httpInterface.js b/Platform/Client/httpInterface.js index d58c87151..e54dddf6f 100644 --- a/Platform/Client/httpInterface.js +++ b/Platform/Client/httpInterface.js @@ -1286,6 +1286,17 @@ exports.newHttpInterface = function newHttpInterface() { SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse) return } + case 'createGithubFork': { + + let serverResponse = await PL.servers.GITHUB_SERVER.createGithubFork( + params.repository, + params.username, + params.token + ) + + SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse) + return + } case 'mergePullRequests': { let serverResponse = await PL.servers.GITHUB_SERVER.mergePullRequests( diff --git a/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js b/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js index 285c171e5..6f742ceda 100644 --- a/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js +++ b/Projects/Governance/UI/Function-Libraries/ProfileConstructor.js @@ -125,6 +125,60 @@ function newGovernanceFunctionLibraryProfileConstructor() { UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes ) /* + Set up a basic profile to start receiving benefits + */ + let finServices = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(userProfile.tokenPowerSwitch, "Financial Programs", userProfile) + finServices.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + finServices.payload.uiObject.menu.internalClick("Add Financial Program") + + let stakeProg = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(finServices, "Staking Program", userProfile) + stakeProg.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + stakeProg.payload.uiObject.menu.internalClick("Add Tokens Awarded") + + let liquidProgs = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(userProfile.tokenPowerSwitch, "Liquidity Programs", userProfile) + liquidProgs.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + liquidProgs.payload.uiObject.menu.internalClick('Add Liquidity Program') + + let liquidProg = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(liquidProgs, "Liquidity Program", userProfile) + liquidProgs.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + liquidProgs.payload.uiObject.menu.internalClick('Add Tokens Awarded') + + /* + Check if the user already has the SA fork. If not, do it for them. + */ + + const hasFork = UI.projects.governance.spaces.userProfileSpace.githubForks.get(githubUsername) + if(hasFork === undefined) { + // New user! Probably doesn't have a fork, so let's create it. + let params = { + method: 'createGithubFork', + username: config.username, + token: config.token, + } + + let url = 'GOV' // We will access the default Client GOV endpoint. + + httpRequest(JSON.stringify(params), url, onResponse) + + function onResponse(err, data) { + + data = JSON.parse(data) + if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result && data.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { + UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Message - Automated User Profile Creation Done') + } else { + if (data.docs === undefined) {return} + UI.projects.education.spaces.docsSpace.navigateTo( + data.docs.project, + data.docs.category, + data.docs.type, + data.docs.anchor, + undefined, + data.docs.placeholder + ) + } + } + } + /* We store at the User Profile the Signed githubUsername */ UI.projects.visualScripting.utilities.nodeConfig.saveConfigProperty(userProfile.payload, 'signature', response.signature) @@ -138,11 +192,12 @@ function newGovernanceFunctionLibraryProfileConstructor() { We also Install the User Profile as a Plugin, which in turns saves it. */ userProfile.payload.uiObject.menu.internalClick('Install as Plugin') - userProfile.payload.uiObject.menu.internalClick('Install as Plugin') + userProfile.payload.uiObject.menu.internalClick('Install as Plugin') /* Show nice message. */ if (mnemonic === undefined || mnemonic === "") { + // TODO link to some wallet and setup the token node.payload.uiObject.setInfoMessage( "Profile Private Key has been successfully created. User Profile installed as a plugin and saved. Use the Private Key at a crypto wallet and delete this node once done.", UI.projects.governance.globals.designer.SET_INFO_COUNTER_FACTOR