Merge 2bef4d861b
into 359a6a5762
This commit is contained in:
commit
5789ece593
|
@ -0,0 +1,104 @@
|
|||
'use strict';
|
||||
var debug = require('debug')('AccessToken.test');
|
||||
var inspect = require('util').inspect;
|
||||
/*
|
||||
* API:Middleware:loopback.token(options)
|
||||
*/
|
||||
var S = {
|
||||
REQUIRE:{
|
||||
FILE: {
|
||||
TEST: {
|
||||
LOOPBACK: {
|
||||
TOKEN: './TEST-loopback-token-searchDefaultTokenKeys',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var api = {
|
||||
loopback: {
|
||||
token: {
|
||||
optionsUndefined: require(S.REQUIRE.FILE.TEST.LOOPBACK.TOKEN).api.loopback.token.optionsUndefined,
|
||||
options:{
|
||||
searchDefaultTokenKeys: require(S.REQUIRE.FILE.TEST.LOOPBACK.TOKEN).api.loopback.token.options.searchDefaultTokenKeys
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
describe('API:Middleware:loopback.token(options)', function() {
|
||||
describe('options = {}', function() {
|
||||
var itTxt;
|
||||
var expect = 200;
|
||||
var header = 'authorization';
|
||||
var testOptions = {
|
||||
expect: expect,
|
||||
header: header,
|
||||
};
|
||||
// describe('A normal use case, where a well-known header is used with no other options needed');
|
||||
itTxt = 'Test header=' + header + ' and expect ' + expect;
|
||||
it(itTxt, function(done) {
|
||||
testOptions['done'] = done;
|
||||
api.loopback.token.optionsUndefined(testOptions);
|
||||
});
|
||||
});
|
||||
describe('options.searchDefaultTokenKeys: [true|false]', function() {
|
||||
var itTxt;
|
||||
var expect = 200;
|
||||
var searchDefaultTokenKeys = false;
|
||||
var header = 'authorization';
|
||||
var testOptions = {
|
||||
expect: expect,
|
||||
header: header,
|
||||
};
|
||||
var headers = ['header'];
|
||||
var tokenOptions = {
|
||||
searchDefaultTokenKeys: searchDefaultTokenKeys,
|
||||
headers: headers,
|
||||
};
|
||||
|
||||
// describe('The normal use case for searchDefaultTokenKeys')
|
||||
itTxt = 'Test header=' + header + ' searchDefaultTokenKeys=' + searchDefaultTokenKeys + ' and expect ' + expect;
|
||||
it(itTxt, function(done) {
|
||||
testOptions['done'] = done;
|
||||
api.loopback.token.options.searchDefaultTokenKeys(testOptions, tokenOptions);
|
||||
});
|
||||
|
||||
// describe('Specific enabelment of searchDefaultTokenKeys')
|
||||
searchDefaultTokenKeys = true;
|
||||
headers = [];
|
||||
itTxt = 'Test header=' + header + ' searchDefaultTokenKeys=' + searchDefaultTokenKeys + ' and expect ' + expect;
|
||||
it(itTxt, function(done) {
|
||||
testOptions['done'] = done;
|
||||
testOptions['headers'] = headers;
|
||||
api.loopback.token.options.searchDefaultTokenKeys(testOptions, tokenOptions);
|
||||
});
|
||||
|
||||
// describe('A test case for regression')
|
||||
searchDefaultTokenKeys = undefined;
|
||||
headers = [];
|
||||
itTxt = 'Test header=' + header + ' searchDefaultTokenKeys=' + searchDefaultTokenKeys + ' and expect ' + expect;
|
||||
it(itTxt, function(done) {
|
||||
testOptions['searchDefaultTokenKeys'] = undefined; //FIXME: is this a good way
|
||||
testOptions['headers'] = headers;
|
||||
testOptions['done'] = done;
|
||||
api.loopback.token.options.searchDefaultTokenKeys(testOptions, tokenOptions);
|
||||
});
|
||||
|
||||
/*
|
||||
FIXME: TEST appGet try/catch does not support this test
|
||||
// describe('A non-normal use case to check that default token headers are not used')
|
||||
searchDefaultTokenKeys = false; // any defaults ...
|
||||
headers = []; // ... are not concated, and the empty array for token areas ...
|
||||
expect = 401; // ... gives the expected result.
|
||||
itTxt = 'Test header='+ header +' searchDefaultTokenKeys='+ searchDefaultTokenKeys +' no headers and expect '+ expect;
|
||||
it(itTxt, function(done) {
|
||||
testOptions['done'] = done;
|
||||
testOptions['searchDefaultTokenKeys'] = searchDefaultTokenKeys;
|
||||
testOptions['expect'] = expect;
|
||||
testOptions['headers'] = headers;
|
||||
api.loopback.token.searchDefaultTokenKeys(testOptions, tokenOptions);
|
||||
});
|
||||
*/
|
||||
});
|
||||
});
|
|
@ -0,0 +1,113 @@
|
|||
'use strict';
|
||||
|
||||
var debug = require('debug')('AccessToken.app');
|
||||
var inspect = require('util').inspect;
|
||||
/*
|
||||
TEST:Middleware:loopback.token.searchDefaultTokenKeys
|
||||
*/
|
||||
module.exports = {
|
||||
api : {
|
||||
loopback: {
|
||||
token: {
|
||||
optionsUndefined: optionsUndefined,
|
||||
options: {
|
||||
searchDefaultTokenKeys: searchDefaultTokenKeys,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var loopback = require('../');
|
||||
var tokenId; //FIXME: another way than this 'global'
|
||||
|
||||
|
||||
function optionsUndefined(testOptions) {
|
||||
debug('optionsUndefined testOptions:\n' + inspect(testOptions) + '\n');
|
||||
var tokenOptions = {};
|
||||
var app = createTokenStartApp(testOptions, tokenOptions);
|
||||
}
|
||||
|
||||
function searchDefaultTokenKeys(testOptions, tokenOptions) {
|
||||
debug('optionsUndefined searchDefaultTokenKeys:\n' + inspect(testOptions) + '\n');
|
||||
var app = createTokenStartApp(testOptions, tokenOptions);
|
||||
}
|
||||
|
||||
function sendRequest(app, testOptions) {
|
||||
debug('sendRequest testOptions.tokenId:\n' + inspect(testOptions.tokenId) + '\n');
|
||||
request(app)
|
||||
.get(testOptions.get)
|
||||
.set(testOptions.header, testOptions.tokenId)
|
||||
.expect(testOptions.expect)
|
||||
.end(testOptions.done);
|
||||
}
|
||||
|
||||
function createTokenStartApp(testOptions, tokenOptions) {
|
||||
var extend = require('util')._extend;
|
||||
var Token = loopback.AccessToken.extend('MyToken');
|
||||
var tokenDataSource = loopback.createDataSource({connector: loopback.Memory});
|
||||
var tokenCreate = {userId: '123'};
|
||||
var done = testOptions.done;
|
||||
testOptions['get'] = '/';
|
||||
|
||||
Token.attachTo(tokenDataSource);
|
||||
tokenOptions['model'] = Token;
|
||||
tokenOptions['currentUserLiteral'] = 'me';
|
||||
|
||||
Token.create(tokenCreate, function(err, token) {
|
||||
if (err) return done(err);
|
||||
testOptions['tokenId'] = token.id;
|
||||
var app = startApp(testOptions, tokenOptions);
|
||||
sendRequest(app, testOptions);
|
||||
});
|
||||
}
|
||||
|
||||
function attachAndReturnModel() {
|
||||
var ACL = loopback.ACL;
|
||||
var acl = {
|
||||
principalType: 'ROLE',
|
||||
principalId: '$everyone',
|
||||
accessType: ACL.ALL,
|
||||
permission: ACL.DENY,
|
||||
property: '*'
|
||||
};
|
||||
var modelOptions = {acls: [acl]};
|
||||
var TestModel = loopback.PersistedModel.extend('test', {}, modelOptions);
|
||||
TestModel.attachTo(loopback.memory());
|
||||
return TestModel;
|
||||
}
|
||||
|
||||
// FIXME: try/catch does not support searchDefaultTokenKeys = false and headers = []
|
||||
function appGet(req, res) {
|
||||
debug('appeget req:\n' + inspect(req) + '\n' );
|
||||
debug('appeget res:\n' + inspect(res) + '\n' );
|
||||
/*
|
||||
debug('appGet req.headers:\n' + inspect(req.headers) + '\n');
|
||||
debug('appGet req.accessToken:\n' + inspect(req.accessToken) + '\n');
|
||||
debug('appGet tokenId:\n' + tokenId + '\n');
|
||||
*/
|
||||
var send = '200';
|
||||
try {
|
||||
assert(req.accessToken, 'req should have accessToken');
|
||||
assert(req.accessToken.id === tokenId); //FIXME: another way than this 'global'
|
||||
// FIXME: ok the req HAS accessToken.id but this is not a good test
|
||||
|
||||
} catch (error) {
|
||||
debug('app.get error:\n' + error + '\n');
|
||||
send = '401';
|
||||
}
|
||||
debug('app.get send:\n' + send + '\n');
|
||||
res.send(send);
|
||||
}
|
||||
|
||||
function startApp(testOptions, tokenOptions) {
|
||||
var get = testOptions.get;
|
||||
var app = loopback();
|
||||
var TestModel = attachAndReturnModel();
|
||||
app.model(TestModel);
|
||||
app.use(loopback.token(tokenOptions)); // The subject of all this work
|
||||
app.get(get, appGet);
|
||||
app.use(loopback.rest());
|
||||
app.enableAuth();
|
||||
return app;
|
||||
}
|
Loading…
Reference in New Issue