Improvements in REST API

This commit is contained in:
vjrj 2018-06-15 06:39:09 +02:00
parent d980a31c05
commit b8ab47e867
2 changed files with 300 additions and 288 deletions

View file

@ -31,8 +31,8 @@ function defaultFailParams(e) {
}
function checkAuthToken(token) {
if (token !== Meteor.settings.private.internalApiToken) {
const message = `Unauthorized auth token '${token}' in REST API`;
if (!Meteor.settings.private.internalApiToken || token !== Meteor.settings.private.internalApiToken) {
const message = 'Unauthorized auth token in REST API';
console.warn(message);
return restivusError(401, message);
}
@ -45,7 +45,9 @@ function checkLatLonDist(km, lat, lng) {
check(km, NumberBetween(0, Meteor.isDevelopment ? 1000 : 100));
}
if (!Meteor.settings.private.internalApiToken) {
console.warn('Meteor.settings.private.internalApiToken is not configured so we don\'t enable our REST API');
} else {
// export
const apiV1 = new Restivus({
useDefaultAuth: true,
@ -211,14 +213,22 @@ apiV1.addRoute('mobile/users', { authRequired: false }, {
let username;
const already = Meteor.users.find({ fireBaseToken: mobileToken });
if (already.count() > 1) {
return restivusError(500, 'Unexpected error in REST call: several users with that mobile token?');
} else if (already.count() === 1) {
username = already.fetch()[0].username;
} else {
do {
username = Random.id(15);
} while (Meteor.users.find({ username }).count() !== 0);
}
// FIXME check valid lang
const now = new Date();
// Accounts.createUser({ username: mobileToken, lang: 'FIXME' profile: {} });
const result = Meteor.users.upsert({
fireBaseToken: mobileToken
}, {
@ -232,20 +242,23 @@ apiV1.addRoute('mobile/users', { authRequired: false }, {
}
});
if (debug) {
console.log(this.bodyParams);
console.log(this.urlParams);
console.log(this.queryParams);
}
const newUser = Meteor.users.findOne({ username });
const upsertUser = Meteor.users.findOne({ username });
if (debug) console.log(upsertUser);
return jsend.success({
upsertResult: result,
username,
userId: newUser._id,
lang: newUser.lang,
mobileToken: newUser.fireBaseToken
userId: upsertUser._id,
lang: upsertUser.lang,
mobileToken: upsertUser.fireBaseToken
});
}
@ -364,3 +377,4 @@ apiV1.addRoute('mobile/subscriptions/all', { authRequired: false }, {
return jsend.success({ count: toRemove });
}
});
}

View file

@ -270,9 +270,8 @@ describe('basic api v1 returns', () => {
});
it('should del all mobile user subscriptions', async (done) => {
// Add two
addSubs(() => {});
addSubs(() => {});
// Add subs
addSubs(() => {
HTTP.del(url('api/v1/mobile/subscriptions/all'), {
data: {
token,
@ -284,10 +283,9 @@ describe('basic api v1 returns', () => {
const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success');
chai.expect(typeof jsendResult.data.count).to.equal('number');
chai.expect(jsendResult.data.count).to.equal(2);
chai.expect(jsendResult.data.count).to.equal(1);
done();
});
});
// TODO remove all subs
});
});