-
Notifications
You must be signed in to change notification settings - Fork 71.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Activity data collection baseline implementation & swagger fixes (#3442)
* First pass at adding a new activity data collection & API to Nightscout * Attempt of fixing /api-docs.html Converted swagger.yaml to OpenAPI 3.0 format using: https://github.com/Mermade/swagger2openapi https://mermade.org.uk/openapi-converter Conversion / Validation engine v2.11.5 Web frontend version v1.3.8 * add swagger-ui-dist and exported swagger.json * add swagger-config.yaml * move swagger-ui to static folder, update static/api-docs.html (based on swagger-ui-dist, without bower) * move swagger.json to static * add tokenbased authentication * token based authentication * add json webtokens for swagger * npm update, add swagger-ui-dist and expose that to webroot swagger-ui-dist * remove swagger-config.yaml (not needed) * Fix swagger and upgrade to openapi3 (and npm update) (#3366) * fix swagger and upgrade to openapi3, reapply changes of issue #3345 * use nightscout icon for swagger ui * Comment out deprecated API call
- Loading branch information
Showing
14 changed files
with
2,070 additions
and
723 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
'use strict'; | ||
|
||
var _ = require('lodash'); | ||
var consts = require('../../constants'); | ||
var moment = require('moment'); | ||
|
||
function configure(app, wares, ctx) { | ||
var express = require('express') | ||
, api = express.Router(); | ||
|
||
api.use(wares.compression()); | ||
api.use(wares.bodyParser({ | ||
limit: 1048576 * 50 | ||
})); | ||
// text body types get handled as raw buffer stream | ||
api.use(wares.bodyParser.raw({ | ||
limit: 1048576 | ||
})); | ||
// json body types get handled as parsed json | ||
api.use(wares.bodyParser.json({ | ||
limit: 1048576 | ||
})); | ||
// also support url-encoded content-type | ||
api.use(wares.bodyParser.urlencoded({ | ||
limit: 1048576 | ||
, extended: true | ||
})); | ||
// invoke common middleware | ||
api.use(wares.sendJSONStatus); | ||
|
||
api.use(ctx.authorization.isPermitted('api:activity:read')); | ||
|
||
// List activity data available | ||
api.get('/activity', function(req, res) { | ||
var ifModifiedSince = req.get('If-Modified-Since'); | ||
ctx.activity.list(req.query, function(err, results) { | ||
var d1 = null; | ||
|
||
_.forEach(results, function clean(t) { | ||
|
||
var d2 = null; | ||
|
||
if (t.hasOwnProperty('created_at')) { | ||
d2 = new Date(t.created_at); | ||
} else { | ||
if (t.hasOwnProperty('timestamp')) { | ||
d2 = new Date(t.timestamp); | ||
} | ||
} | ||
|
||
if (d2 == null) { return; } | ||
|
||
if (d1 == null || d2.getTime() > d1.getTime()) { | ||
d1 = d2; | ||
} | ||
}); | ||
|
||
if (!_.isNil(d1)) res.setHeader('Last-Modified', d1.toUTCString()); | ||
|
||
if (ifModifiedSince && d1.getTime() <= moment(ifModifiedSince).valueOf()) { | ||
res.status(304).send({ | ||
status: 304 | ||
, message: 'Not modified' | ||
, type: 'internal' | ||
}); | ||
return; | ||
} else { | ||
return res.json(results); | ||
} | ||
}); | ||
}); | ||
|
||
function config_authed(app, api, wares, ctx) { | ||
|
||
function post_response(req, res) { | ||
var activity = req.body; | ||
|
||
if (!_.isArray(activity)) { | ||
activity = [activity]; | ||
}; | ||
|
||
ctx.activity.create(activity, function(err, created) { | ||
if (err) { | ||
console.log('Error adding activity data', err); | ||
res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); | ||
} else { | ||
console.log('Activity measure created'); | ||
res.json(created); | ||
} | ||
}); | ||
} | ||
|
||
api.post('/activity/', wares.bodyParser({ | ||
limit: 1048576 * 50 | ||
}), ctx.authorization.isPermitted('api:activity:create'), post_response); | ||
|
||
api.delete('/activity/:_id', ctx.authorization.isPermitted('api:activity:delete'), function(req, res) { | ||
ctx.activity.remove(req.params._id, function() { | ||
res.json({}); | ||
}); | ||
}); | ||
|
||
// update record | ||
api.put('/activity/', ctx.authorization.isPermitted('api:activity:update'), function(req, res) { | ||
var data = req.body; | ||
ctx.activity.save(data, function(err, created) { | ||
if (err) { | ||
res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); | ||
console.log('Error saving activity'); | ||
console.log(err); | ||
} else { | ||
res.json(created); | ||
console.log('Activity measure saved', data); | ||
} | ||
}); | ||
}); | ||
} | ||
|
||
if (app.enabled('api') && app.enabled('careportal')) { | ||
config_authed(app, api, wares, ctx); | ||
} | ||
|
||
return api; | ||
} | ||
|
||
module.exports = configure; | ||
|
This file contains 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
This file contains 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
Oops, something went wrong.