Improvements in REST API

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

View file

@ -31,8 +31,8 @@ function defaultFailParams(e) {
} }
function checkAuthToken(token) { function checkAuthToken(token) {
if (token !== Meteor.settings.private.internalApiToken) { if (!Meteor.settings.private.internalApiToken || token !== Meteor.settings.private.internalApiToken) {
const message = `Unauthorized auth token '${token}' in REST API`; const message = 'Unauthorized auth token in REST API';
console.warn(message); console.warn(message);
return restivusError(401, message); return restivusError(401, message);
} }
@ -45,7 +45,9 @@ function checkLatLonDist(km, lat, lng) {
check(km, NumberBetween(0, Meteor.isDevelopment ? 1000 : 100)); 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 // export
const apiV1 = new Restivus({ const apiV1 = new Restivus({
useDefaultAuth: true, useDefaultAuth: true,
@ -211,14 +213,22 @@ apiV1.addRoute('mobile/users', { authRequired: false }, {
let username; 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 { do {
username = Random.id(15); username = Random.id(15);
} while (Meteor.users.find({ username }).count() !== 0); } while (Meteor.users.find({ username }).count() !== 0);
}
// FIXME check valid lang // FIXME check valid lang
const now = new Date(); const now = new Date();
// Accounts.createUser({ username: mobileToken, lang: 'FIXME' profile: {} });
const result = Meteor.users.upsert({ const result = Meteor.users.upsert({
fireBaseToken: mobileToken fireBaseToken: mobileToken
}, { }, {
@ -232,20 +242,23 @@ apiV1.addRoute('mobile/users', { authRequired: false }, {
} }
}); });
if (debug) { if (debug) {
console.log(this.bodyParams); console.log(this.bodyParams);
console.log(this.urlParams); console.log(this.urlParams);
console.log(this.queryParams); console.log(this.queryParams);
} }
const newUser = Meteor.users.findOne({ username }); const upsertUser = Meteor.users.findOne({ username });
if (debug) console.log(upsertUser);
return jsend.success({ return jsend.success({
upsertResult: result, upsertResult: result,
username, username,
userId: newUser._id, userId: upsertUser._id,
lang: newUser.lang, lang: upsertUser.lang,
mobileToken: newUser.fireBaseToken mobileToken: upsertUser.fireBaseToken
}); });
} }
@ -364,3 +377,4 @@ apiV1.addRoute('mobile/subscriptions/all', { authRequired: false }, {
return jsend.success({ count: toRemove }); 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) => { it('should del all mobile user subscriptions', async (done) => {
// Add two // Add subs
addSubs(() => {}); addSubs(() => {
addSubs(() => {});
HTTP.del(url('api/v1/mobile/subscriptions/all'), { HTTP.del(url('api/v1/mobile/subscriptions/all'), {
data: { data: {
token, token,
@ -284,10 +283,9 @@ describe('basic api v1 returns', () => {
const jsendResult = result.data; const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success'); chai.expect(jsendResult.status).equal('success');
chai.expect(typeof jsendResult.data.count).to.equal('number'); 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(); done();
}); });
}); });
});
// TODO remove all subs
}); });