Created
September 27, 2017 12:01
-
-
Save matiasinsaurralde/999c40a02693f8b521c98cd48dc187fd to your computer and use it in GitHub Desktop.
mw.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const grpc = require('grpc'), | |
resolve = require('path').resolve | |
const tyk = grpc.load({ | |
file: 'coprocess_object.proto', | |
root: resolve(__dirname, 'tyk-protobuf/proto') | |
}).coprocess | |
const listenAddr = '127.0.0.1:5555', | |
authHeader = 'Authorization' | |
validToken = '71f6ac3385ce284152a64208521c592b' | |
// The dispatch function is called for every hook: | |
const dispatch = (call, callback) => { | |
var obj = call.request | |
// We dispatch the request based on the hook name, we pass obj.request which is the coprocess.Object: | |
switch (obj.hook_name) { | |
case 'MyPreMiddleware': | |
preMiddleware(obj, callback) | |
break | |
case 'MyAuthMiddleware': | |
authMiddleware(obj, callback) | |
break | |
default: | |
callback(null, obj) | |
break | |
} | |
} | |
const preMiddleware = (obj, callback) => { | |
console.log("preMiddleware called") | |
var req = obj.request | |
// req is the coprocess.MiniRequestObject, we inject a header using the "set_headers" field: | |
req.set_headers = { | |
'mycustomheader': 'mycustomvalue' | |
} | |
// Use this callback to finish the operation, sending back the modified object: | |
callback(null, obj) | |
} | |
const authMiddleware = (obj, callback) => { | |
console.log("authMiddleware caled") | |
var req = obj.request | |
// We take the value from the "Authorization" header: | |
var token = req.headers[authHeader] | |
// The token should be attached to the object metadata, this is used internally for key management: | |
obj.metadata = { | |
token: token | |
} | |
// If the request token doesn't match the "validToken" constant we return the call: | |
if (token != validToken) { | |
callback(null, obj) | |
return | |
} | |
// At this point the token is valid and a session state object is initialized and attached to the coprocess.Object: | |
var session = new tyk.SessionState() | |
session.id_extractor_deadline = Date.now() + 100000000000 | |
obj.session = session | |
callback(null, obj) | |
} | |
main = function() { | |
server = new grpc.Server() | |
server.addService(tyk.Dispatcher.service, { | |
dispatch: dispatch | |
}) | |
server.bind(listenAddr, grpc.ServerCredentials.createInsecure()) | |
server.start() | |
} | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment