From c1df5b2cf8966c4821da1817e9fe013e11f4e463 Mon Sep 17 00:00:00 2001 From: Arda Karaduman Date: Fri, 26 Jan 2018 17:53:39 +0900 Subject: [PATCH 1/5] add jwt_key --- client/components/FnRouteForm.vue | 6 ++++++ client/components/FnRunFunction.vue | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/client/components/FnRouteForm.vue b/client/components/FnRouteForm.vue index 69005982..f1189a5e 100644 --- a/client/components/FnRouteForm.vue +++ b/client/components/FnRouteForm.vue @@ -13,6 +13,12 @@ +
+ +
+ +
+
diff --git a/client/components/FnRunFunction.vue b/client/components/FnRunFunction.vue index 0dc3c18f..62268e02 100644 --- a/client/components/FnRunFunction.vue +++ b/client/components/FnRunFunction.vue @@ -13,6 +13,12 @@
+
+ +
+ +
+
@@ -71,6 +77,9 @@ export default { method: 'POST', data: JSON.stringify({payload: this.payload}), contentType: "application/json", + headers: { + 'X-Jwt-Key': this.route.jwt_key + }, dataType: 'json', success: (res) => { console.log("res", res); From c94640b6fa33f946f043edc2ea75e0a04d05da8e Mon Sep 17 00:00:00 2001 From: Arda Karaduman Date: Fri, 26 Jan 2018 18:43:17 +0900 Subject: [PATCH 2/5] jwt key should be disabled during fn call --- client/components/FnRunFunction.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/components/FnRunFunction.vue b/client/components/FnRunFunction.vue index 62268e02..33fdc80e 100644 --- a/client/components/FnRunFunction.vue +++ b/client/components/FnRunFunction.vue @@ -16,7 +16,7 @@
- +
From 61d871da408246246c02cd98bd4c6f70ac9ed801 Mon Sep 17 00:00:00 2001 From: Arda Karaduman Date: Fri, 26 Jan 2018 18:43:39 +0900 Subject: [PATCH 3/5] add jsonwebtoken --- package.json | 1 + server/controllers/routes.js | 1 + 2 files changed, 2 insertions(+) diff --git a/package.json b/package.json index 53a3b08e..2aafeb1a 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "express": "~4.13.4", "file-loader": "^0.8.5", "imports-loader": "^0.6.5", + "jsonwebtoken": "^8.1.1", "lodash": "^4.13.1", "request": "^2.72.0", "resolve-url-loader": "^1.4.3", diff --git a/server/controllers/routes.js b/server/controllers/routes.js index a803bb02..1fd10093 100644 --- a/server/controllers/routes.js +++ b/server/controllers/routes.js @@ -1,5 +1,6 @@ var express = require('express'); var router = express.Router(); +var jwt = require('jsonwebtoken'); var helpers = require('../helpers/app-helpers.js'); router.get('/:app/routes', function(req, res) { From 435954f5fe0b02702e4f3653cdafe912d1c42a60 Mon Sep 17 00:00:00 2001 From: Arda Karaduman Date: Fri, 26 Jan 2018 18:44:03 +0900 Subject: [PATCH 4/5] pass auth headers with fn call --- server/controllers/routes.js | 5 ++++- server/helpers/app-helpers.js | 10 ++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/server/controllers/routes.js b/server/controllers/routes.js index 1fd10093..48adf761 100644 --- a/server/controllers/routes.js +++ b/server/controllers/routes.js @@ -63,8 +63,11 @@ router.post('/:app/routes/:route/run', function(req, res) { res.status(400).json({msg: text}); } var data = req.body.payload; + var token = jwt.sign(data, req.headers['x-jwt-key']); + var authHeader = {'Authorization': 'Bearer ' + token }; + var path = "/r/" + encodeURIComponent(req.params.app)+ "/" + encodeURIComponent(req.params.route); + helpers.execApiEndpointRaw('POST', req, path, {}, data, successcb, errcb, authHeader); - helpers.execApiEndpointRaw('POST', req, "/r/" + encodeURIComponent(req.params.app)+ "/" + encodeURIComponent(req.params.route), {}, data, successcb, errcb); }); diff --git a/server/helpers/app-helpers.js b/server/helpers/app-helpers.js index baa79067..64b5e4be 100644 --- a/server/helpers/app-helpers.js +++ b/server/helpers/app-helpers.js @@ -30,11 +30,12 @@ exports.postApiEndpoint = function(req, path, params, postfields, successcb, err exports.execApiEndpoint('POST', req, path, params, postfields, successcb, errorcb); } -exports.execApiEndpoint = function(method, req, path, params, postfields, successcb, errorcb) { +exports.execApiEndpoint = function(method, req, path, params, postfields, successcb, errorcb, headers) { var options = { uri: exports.apiFullUrl(req, path), method: method, - json: postfields + json: postfields, + headers: headers }; console.log(options.method + " " + options.uri + ", params: ", options.json); @@ -42,11 +43,12 @@ exports.execApiEndpoint = function(method, req, path, params, postfields, succes request(options, function(error, response, body){exports.requrestCb(successcb, errorcb, error, response, body)}); } -exports.execApiEndpointRaw = function(method, req, path, params, postfields, successcb, errorcb) { +exports.execApiEndpointRaw = function(method, req, path, params, postfields, successcb, errorcb, headers) { var options = { uri: exports.apiFullUrl(req, path), method: method, - body: postfields + body: postfields, + headers: headers }; console.log(options.method + " " + options.uri + ", params: ", options.body); From 9c0093419d47e5d844503272063ff878dc821539 Mon Sep 17 00:00:00 2001 From: Arda Karaduman Date: Sat, 27 Jan 2018 11:42:26 +0900 Subject: [PATCH 5/5] display token with curl command --- client/components/FnRunFunction.vue | 19 +++++++++++++++++-- server/controllers/routes.js | 9 +++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/client/components/FnRunFunction.vue b/client/components/FnRunFunction.vue index 33fdc80e..6bb17686 100644 --- a/client/components/FnRunFunction.vue +++ b/client/components/FnRunFunction.vue @@ -22,13 +22,17 @@
- +
-
+
cURL command
curl -X POST -d '{{payload}}' {{apiUrl}}r/{{encodeURIComponent(this.app.name)}}/{{encodeURIComponent(this.route.path)}}
+
+
cURL command
+
curl -X POST -H 'Authorization: Bearer {{authToken}}' -d '{{payload}}' {{apiUrl}}r/{{encodeURIComponent(this.app.name)}}/{{encodeURIComponent(this.route.path)}}
+
Output
@@ -46,6 +50,7 @@ import Modal from '../lib/VueBootstrapModal.vue'; import { eventBus } from '../client'; import { defaultErrorHandler, getApiUrl } from '../lib/helpers'; +const jwt = require('jsonwebtoken'); export default { props: ['app'], @@ -58,6 +63,7 @@ export default { show: false, submitting: false, payload: '{}', + authToken: null, output: null, apiUrl: '' } @@ -93,6 +99,9 @@ export default { } }) }, + calculateToken: function() { + this.authToken = jwt.sign(this.payload, this.route.jwt_key); + }, }, created: function (){ var t = this; @@ -101,6 +110,12 @@ export default { this.payload = '{}'; this.output = null; this.show = true; + if(this.route.jwt_key) { + this.calculateToken(); + } + }); + eventBus.$on('calculateToken', () => { + this.calculateToken(); }); getApiUrl( url => t.apiUrl = url ); } diff --git a/server/controllers/routes.js b/server/controllers/routes.js index 48adf761..1442b8f5 100644 --- a/server/controllers/routes.js +++ b/server/controllers/routes.js @@ -63,8 +63,13 @@ router.post('/:app/routes/:route/run', function(req, res) { res.status(400).json({msg: text}); } var data = req.body.payload; - var token = jwt.sign(data, req.headers['x-jwt-key']); - var authHeader = {'Authorization': 'Bearer ' + token }; + if (req.headers['x-jwt-key']) { + var token = jwt.sign(data, req.headers['x-jwt-key']); + var authHeader = {'Authorization': 'Bearer ' + token }; + } + else { + var authHeader = {}; + } var path = "/r/" + encodeURIComponent(req.params.app)+ "/" + encodeURIComponent(req.params.route); helpers.execApiEndpointRaw('POST', req, path, {}, data, successcb, errcb, authHeader);