diff --git a/javascript/package.json b/javascript/package.json index 1cc608b267fb1be5d7df4e7551dca5cb29716d6b..bab32fc9af6cad2dda7cab5aa4307bebd8a0a301 100644 --- a/javascript/package.json +++ b/javascript/package.json @@ -28,6 +28,7 @@ "data-uri-to-blob": "^0.0.4", "libmime": "^4.0.1", "libqp": "^1.1.0", + "lodash": "^4.17.11", "penpal": "^3.0.3", "pkijs": "^2.1.69", "pvutils": "^1.0.16", diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js index 3018b570cee8e98e6875f5bbed553132a7eedee6..b6d0af88fb6b75a2ce4d17e4422f444992b68d48 100644 --- a/javascript/src/iframe/viamapi-iframe.js +++ b/javascript/src/iframe/viamapi-iframe.js @@ -97,7 +97,7 @@ function setIdentityInLocalStorage(identityToStore, extendKey = true) { function getProfileData(identity) { return new Penpal.Promise(executeResultUpper => { executeRestfulFunction("private", viamApi, - viamApi.identityGetIdentityProfileData).then(executeResult => { + viamApi.identityGetIdentityProfileData, null).then(executeResult => { if(executeResult.code === "200") { var listItem = {}; @@ -219,22 +219,21 @@ const handleIdentityLogin = (identity, uuid, token) => { setKeyForUUID(uuid, publicKey); }; -function executeRestfulFunction(type, that, fn, ...args) { +function executeRestfulFunction(type, that, fn, config, ...args) { const { currentlyAuthenticatedIdentity, viamApi, currentlyLoadedIdentity } = window; return new Penpal.Promise(executeResult => { - fn.apply(that, args).then((response) => { + fn.apply(that, [config, ...args]).then((response) => { const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity; if (type === "private" && identity && response.data.code === "400" && response.data.status === "Bad session") { - viamApi.identityLogin("previousaddeddevice") + viamApi.identityLogin(null, "previousaddeddevice") .then((response) => { if (response.data.code === "200") { const uuid = response.data.data["Uuid"]; const token = response.data.data["Session"]; handleIdentityLogin(identity, uuid, token); - // TODO: Previously there was fn.apply(null, args) where null is probably wrong context for fn.apply() - fn.apply(that, args).then(({data}) => executeResult(data)); + fn.apply(that, [config, ...args]).then(({data}) => executeResult(data)); } else { executeResult(response.data); } @@ -345,7 +344,7 @@ function getCertificateForPassport(passportUUID, internal) { var certificate = keys["certificatePEM"]; //download("passportCertificateBeforeSigning.crt", "text/plain", certificate) //cryptoData.setx509Certificate(keys["certificate"]) - executeRestfulFunction("private", viamApi, viamApi.signSignCertificate, btoa(certificate), passportUUID).then(executeResult => { + executeRestfulFunction("private", viamApi, viamApi.signSignCertificate, null, btoa(certificate), passportUUID).then(executeResult => { if(executeResult.code === "200") { var signedCertificate = atob(executeResult.data["SignedCertificate"]); //download("passportCertificateAfterSigning.crt", "text/plain", signedCertificate) @@ -504,7 +503,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity(identity.authentication.publicKey); - executeRestfulFunction("public", viamApi, viamApi.identityConfirmIdentificator,confirmationCodeArg).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.identityConfirmIdentificator, null, confirmationCodeArg).then(executeResult => { result(executeResult); }); }); @@ -513,7 +512,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity(identity.authentication.publicKey); - executeRestfulFunction("public", viamApi, viamApi.identityGetIdentificatorByRegisterToken,tokenArg).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.identityGetIdentificatorByRegisterToken, null, tokenArg).then(executeResult => { result(executeResult); }); }); @@ -522,7 +521,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity(identity.authentication.publicKey); - executeRestfulFunction("public", viamApi, viamApi.identitySubmitIdentificator,identificatorArg, registerToken).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.identitySubmitIdentificator, null, identificatorArg, registerToken).then(executeResult => { result(executeResult); }); }); @@ -531,7 +530,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity(identity.authentication.publicKey); - executeRestfulFunction("public", viamApi, viamApi.identitySubmitRegisterClaims,givennameArg,familynameArg,emailArg,phonenumberArg).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.identitySubmitRegisterClaims, null, givennameArg,familynameArg,emailArg,phonenumberArg).then(executeResult => { result(executeResult); }); }); @@ -540,7 +539,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity(registerIdentity.authentication.publicKey); - executeRestfulFunction("public", viamApi, viamApi.identityAgreeOnRegistration).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.identityAgreeOnRegistration, null).then(executeResult => { let sequence = Promise.resolve(); if (executeResult.code === "200") { sequence = sequence.then(() => { @@ -564,7 +563,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity(identity.authentication.publicKey); - executeRestfulFunction("public", viamApi, viamApi.identityResendConfirmationCode,identificatorArg).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.identityResendConfirmationCode, null, identificatorArg).then(executeResult => { result(executeResult); }); }); @@ -587,6 +586,7 @@ const connection = Penpal.connectToParent({ "public", window.viamApi, window.viamApi.identityLogin, + null, mode, requestCode, requestActionID ); @@ -637,7 +637,7 @@ const connection = Penpal.connectToParent({ }) } - executeRestfulFunction("private", viamApi, viamApi.identityAddNewDevice).then(executeResult => { + executeRestfulFunction("private", viamApi, viamApi.identityAddNewDevice, null).then(executeResult => { if (executeResult.code === "200") { var actionID = executeResult.data["ActionID"]; var QrCode = executeResult.data["QrCode"]; @@ -676,7 +676,7 @@ const connection = Penpal.connectToParent({ }) } - executeRestfulFunction("private", viamApi, viamApi.identityDestroyKeysForDevice, btoa(authenticationPublicKeyArg)).then(executeResult => { + executeRestfulFunction("private", viamApi, viamApi.identityDestroyKeysForDevice, null, btoa(authenticationPublicKeyArg)).then(executeResult => { result(executeResult); }); }); @@ -694,7 +694,8 @@ const connection = Penpal.connectToParent({ const identityLogoutResponse = await executeRestfulFunction( "private", window.viamApi, - window.viamApi.identityLogout + window.viamApi.identityLogout, + null ); window.viamApi.setIdentity(""); @@ -715,7 +716,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity(restoreAccessIdentity.authentication.publicKey); - executeRestfulFunction("public", viamApi, viamApi.identityRestoreAccess, identificator).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.identityRestoreAccess, null, identificator).then(executeResult => { result(executeResult); }); }); @@ -880,7 +881,7 @@ const connection = Penpal.connectToParent({ passportChain.push(passportCertificate); response = await executeRestfulFunction( - "private", window.viamApi, window.viamApi.passportGetEmailWithHeaderByPassport, passportUUID, emailMessage); + "private", window.viamApi, window.viamApi.passportGetEmailWithHeaderByPassport, null, passportUUID, emailMessage); if (response.code !== "200") { return encodeResponse("400", "", response.status); @@ -889,7 +890,7 @@ const connection = Penpal.connectToParent({ const signedEmail = await signEmail(response.data, certificateOneTime, passportChain, privateKeyOneTime); response = await executeRestfulFunction( - "private", window.viamApi, window.viamApi.signResignEmail, passportUUID, signedEmail); + "private", window.viamApi, window.viamApi.signResignEmail, null, passportUUID, signedEmail); if (response.code !== "200") { return encodeResponse("400", "", response.status); @@ -897,7 +898,7 @@ const connection = Penpal.connectToParent({ return encodeResponse("200", response.data, "Email signed"); }, - createDocument: async (path, passportUUID, contenttype) => { + documentCreateDocument: async (path, passportUUID, contenttype) => { const authenticationPublicKey = localStorage.getItem("authenticatedIdentity"); if ( !authenticationPublicKey || @@ -907,17 +908,19 @@ const connection = Penpal.connectToParent({ return encodeResponse("400", "", "Identity not authenticated"); } - const headers = window.viamApi.getConfig().headers; - headers.path = path; - headers.passportuuid = passportUUID; - headers.contenttype = contenttype; - - const response = await executeRestfulFunction( - "private", window.viamApi, window.viamApi.documentCreateDocument); + const config = { + headers: { + path, + passportuuid: passportUUID, + contenttype + } + }; + const response = await executeRestfulFunction("private", window.viamApi, window.viamApi.documentCreateDocument, + config); return encodeResponse("200", response.data, "Document created"); }, - putDocument: async (passportUUID, resourceid, file) => { + documentPutDocument: async (passportUUID, resourceid, file) => { const authenticationPublicKey = localStorage.getItem("authenticatedIdentity"); if ( !authenticationPublicKey || @@ -927,16 +930,16 @@ const connection = Penpal.connectToParent({ return encodeResponse("400", "", "Identity not authenticated"); } - const data = new FormData(); - data.append('file', file); - - const config = window.viamApi.getConfig(); - config.headers.passportuuid = passportUUID; - config.headers.resourceid = resourceid; - config.data = data; + const config = { + headers: { + 'Content-Type': 'multipart/form-data', + passportuuid: passportUUID, + resourceid + } + }; const response = await executeRestfulFunction( - "private", window.viamApi, window.viamApi.documentCreateDocument); + "private", window.viamApi, window.viamApi.documentPutDocument, config, file); return encodeResponse("200", response.data, "Document created"); }, @@ -965,7 +968,7 @@ const connection = Penpal.connectToParent({ }) } - executeRestfulFunction("private", viamApi, viamApi.identityHasSession).then(executeResult => { + executeRestfulFunction("private", viamApi, viamApi.identityHasSession, null).then(executeResult => { result(executeResult); }); }); @@ -974,7 +977,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity("marketingapppublickey"); - executeRestfulFunction("public", viamApi, viamApi.marketingSignUpIdentificator, identificator, reference).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.marketingSignUpIdentificator, null, identificator, reference).then(executeResult => { viamApi.setIdentity(""); viamApi.setSessionData("", ""); result(executeResult); @@ -985,7 +988,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity("marketingapppublickey"); - executeRestfulFunction("public", viamApi, viamApi.marketingGetIdentificatorProfile, identificator, pincode).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.marketingGetIdentificatorProfile, null, identificator, pincode).then(executeResult => { viamApi.setIdentity(""); viamApi.setSessionData("", ""); result(executeResult); @@ -996,7 +999,7 @@ const connection = Penpal.connectToParent({ return new Penpal.Promise(result => { viamApi.setIdentity("marketingapppublickey"); - executeRestfulFunction("public", viamApi, viamApi.marketingExecuteEventForIdentificator, identificator, pincode, event).then(executeResult => { + executeRestfulFunction("public", viamApi, viamApi.marketingExecuteEventForIdentificator, null, identificator, pincode, event).then(executeResult => { viamApi.setIdentity(""); viamApi.setSessionData("", ""); result(executeResult); @@ -1211,7 +1214,7 @@ connection.promise.then(parent => { setInterval(function() { if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) { anynomousDeviceKeyEventsProcessing = true; - executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, "devicekey").then(async executeResult => { + executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey").then(async executeResult => { if(executeResult.code === "200") { var eventsLen = executeResult.data.length; let changedMaxDeviceKeyAnonymousEventTime = false; @@ -1270,7 +1273,7 @@ connection.promise.then(parent => { if(changedMaxDeviceKeyAnonymousEventTime) { executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession, - "devicekey", maxDeviceKeyAnonymousEventTime.toString()).then(() => { + null, "devicekey", maxDeviceKeyAnonymousEventTime.toString()).then(() => { anynomousDeviceKeyEventsProcessing = false; }); } else { @@ -1284,7 +1287,7 @@ connection.promise.then(parent => { if (window.currentlyAuthenticatedIdentity != null && eventsDeviceEventsProcessing === false) { eventsDeviceEventsProcessing = true; - executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "devicekey").then(executeResult => { + executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey").then(executeResult => { if(executeResult.code === "200") { var eventsLen = executeResult.data.length; const changedMaxDeviceKeyEventTime = false; @@ -1306,7 +1309,7 @@ connection.promise.then(parent => { maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp) } if(changedMaxDeviceKeyEventTime) { - executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "devicekey", + executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey", maxDeviceKeyEventTime.toString()).then(executeResult1 => { eventsDeviceEventsProcessing = false }) @@ -1321,7 +1324,7 @@ connection.promise.then(parent => { if (window.currentlyAuthenticatedIdentity != null && eventsEntityEventsProcessing === false) { eventsEntityEventsProcessing = true; - executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "entity").then(executeResult => { + executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity").then(executeResult => { if(executeResult.code === "200") { var eventsLen = executeResult.data.length; let changedMaxEntityEventTime = false; @@ -1346,7 +1349,7 @@ connection.promise.then(parent => { maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp) } if(changedMaxEntityEventTime) { - executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "entity", + executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity", maxEntityEventTime.toString()).then(executeResult1 => { eventsEntityEventsProcessing = false }) diff --git a/main.go b/main.go index f688ea9944a2a2475ec20e9ca8bb7fe7334b6ff5..3ed20e56b22d713a4c8a48fdb6033b327f9bf1f0 100644 --- a/main.go +++ b/main.go @@ -57,6 +57,7 @@ func buildViamAPI() string { endPoints := server.GetEndPoints(prefixes) result := "const axios = require('axios');\n" + result += "const merge = require('lodash/merge');\n" var keys []string for k := range endPoints { @@ -103,11 +104,6 @@ func buildViamAPI() string { packageStr := splits[len(splits)-2] - /*if !packageCreated[packageStr] { - result += "ViamAPI.prototype.\"" + packageStr + "\" = {}\n\n" - packageCreated[packageStr] = true - }*/ - methodStr := splits[len(splits)-1] form := endPoints[url].Form @@ -129,7 +125,7 @@ func buildViamAPI() string { } } - result += "ViamAPI.prototype." + packageStr + strings.Title(methodStr) + " = function(" + args + ") {\n" + + result += "ViamAPI.prototype." + packageStr + strings.Title(methodStr) + " = function(config, " + args + ") {\n" + " return axios.post(window.API_HOST + '" + packageStr + "/" + methodStr + "', {\n" for i := 0; i < lenFields; i++ { @@ -140,7 +136,7 @@ func buildViamAPI() string { result += "\n" } - result += " }, this.config);\n" + + result += " }, merge(this.config, config));\n" + "};\n\n" } else { splits := strings.Split(url, "/") @@ -154,8 +150,8 @@ func buildViamAPI() string { methodStr := splits[len(splits)-1] - result += "ViamAPI.prototype." + packageStr + strings.Title(methodStr) + " = function() {\n" + - " return axios.post(window.API_HOST + '" + packageStr + "/" + methodStr + "', {}, this.config);\n" + + result += "ViamAPI.prototype." + packageStr + strings.Title(methodStr) + " = function(config, data) {\n" + + " return axios.post(window.API_HOST + '" + packageStr + "/" + methodStr + "', data, merge(this.config, config));\n" + "};\n\n" } } @@ -589,7 +585,7 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { privateCheckSnippet := ` const authenticationPublicKey = localStorage.getItem("authenticatedIdentity"); - + if (authenticationPublicKey === null) { result({ "data" : "", @@ -597,15 +593,15 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { "status" : "Identity not authenticated" }); } - + if (loadedIdentities[authenticationPublicKey] === null) { result({ "data" : "", "code" : "400", "status" : "Identity not authenticated" }); - } - + } + const success = extendPinCodeTtl(authenticationPublicKey); if(success === false) { @@ -614,7 +610,7 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { "status" : "Identity not authenticated" }) } - + ` for i := 0; i < keysLen; i++ { @@ -624,10 +620,18 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { continue } + if endPoints[url].Url == "/document/createDocument" { + continue + } + + if endPoints[url].Url == "/document/putDocument" { + continue + } + if url == "/identity/getIdentityProfileData" { privateCheckSnippet = ` const authenticationPublicKey = localStorage.getItem("authenticatedIdentity"); - + if (authenticationPublicKey === null) { result({ "data" : "", @@ -635,15 +639,15 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { "status" : "Identity not authenticated" }); } - + if (loadedIdentities[authenticationPublicKey] === null) { result({ "data" : "", "code" : "400", "status" : "Identity not authenticated" }); - } - + } + ` } @@ -652,11 +656,6 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { packageStr := splits[len(splits)-2] - /*if !packageCreated[packageStr] { - result += "ViamAPI.prototype.\"" + packageStr + "\" = {}\n\n" - packageCreated[packageStr] = true - }*/ - methodStr := splits[len(splits)-1] form := endPoints[url].Form @@ -678,11 +677,6 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { } } - /*identity_login(modeArg,codeArg,actionIDArg) { - return new Penpal.Promise(result => { - viamApi.identity_login(modeArg,codeArg,actionIDArg).then((response) => { result(response.data);}); - }); - }*/ snippet := "" @@ -698,7 +692,7 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { method := packageStr + strings.Title(methodStr) + ": function(" + args + ") {\n" + " return new Penpal.Promise(function(result) {\n" + snippet + - " executeRestfulFunction(\"" + endPoints[url].HandlerType + "\", viamApi, viamApi." + packageStr + strings.Title(methodStr) + lastComma + args + ").then(function(executeResult) {\n" + + " executeRestfulFunction(\"" + endPoints[url].HandlerType + "\", viamApi, viamApi." + packageStr + strings.Title(methodStr) + ", null" + lastComma + args + ").then(function(executeResult) {\n" + " result(executeResult);\n" + " });\n" + " });\n" + @@ -716,11 +710,6 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { packageStr := splits[len(splits)-2] - /*if !packageCreated[packageStr] { - result += "ViamAPI.prototype.\"" + packageStr + "\" = {}\n\n" - packageCreated[packageStr] = true - }*/ - methodStr := splits[len(splits)-1] snippet := "" @@ -731,7 +720,7 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { method := packageStr + strings.Title(methodStr) + ": function() {\n" + " return new Penpal.Promise(function(result) {\n" + snippet + - " executeRestfulFunction(\"" + endPoints[url].HandlerType + "\", viamApi, viamApi." + packageStr + strings.Title(methodStr) + ").then(function(executeResult) {\n" + + " executeRestfulFunction(\"" + endPoints[url].HandlerType + "\", viamApi, viamApi." + packageStr + strings.Title(methodStr) + ", null).then(function(executeResult) {\n" + " result(executeResult);\n" + " });\n" + " });\n" + @@ -762,7 +751,7 @@ func getWopiAPIPenpalMethods() string { "status" : "Identity not authenticated" }); } - + if (loadedIdentities[authenticationPublicKey] === null) { result({ "data" : "", @@ -770,7 +759,7 @@ func getWopiAPIPenpalMethods() string { "status" : "Identity not authenticated" }); } - + const success = extendPinCodeTtl(authenticationPublicKey); if (success === false) {