mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 11:37:08 +00:00
Update API to handle permissions checks on most endpoints
This commit is contained in:
@@ -94,8 +94,8 @@ app.map({
|
|||||||
// WARNING Every route from here onwards requires authentication!
|
// WARNING Every route from here onwards requires authentication!
|
||||||
//
|
//
|
||||||
app.use(mw.auth.authentify);
|
app.use(mw.auth.authentify);
|
||||||
// Read access required for anything below here
|
// Users must be authenticated to access anything below here
|
||||||
app.use(mw.auth.access.read);
|
app.use(mw.auth.access.user);
|
||||||
|
|
||||||
// Don't process the request if the data hasn't changed
|
// Don't process the request if the data hasn't changed
|
||||||
app.use(mw.etag.ifNoneMatch);
|
app.use(mw.etag.ifNoneMatch);
|
||||||
@@ -108,15 +108,15 @@ app.map({
|
|||||||
},
|
},
|
||||||
'/project/:project': {
|
'/project/:project': {
|
||||||
get: [ mw.project.summary.get ], // Get project data
|
get: [ mw.project.summary.get ], // Get project data
|
||||||
delete: [ mw.auth.access.admin, mw.project.delete ], // Delete a project (only if empty)
|
delete: [ mw.auth.access.edit, mw.project.delete ], // Delete a project (only if empty)
|
||||||
},
|
},
|
||||||
'/project/:project/summary': {
|
'/project/:project/summary': {
|
||||||
get: [ mw.project.summary.get ],
|
get: [ mw.auth.access.read, mw.project.summary.get ],
|
||||||
},
|
},
|
||||||
'/project/:project/configuration': {
|
'/project/:project/configuration': {
|
||||||
get: [ mw.project.configuration.get ], // Get project configuration
|
get: [ mw.project.configuration.get ], // Get project configuration
|
||||||
patch: [ mw.auth.access.admin, mw.project.configuration.patch ], // Modify project configuration
|
patch: [ mw.auth.access.edit, mw.project.configuration.patch ], // Modify project configuration
|
||||||
put: [ mw.auth.access.admin, mw.project.configuration.put ], // Overwrite configuration
|
put: [ mw.auth.access.edit, mw.project.configuration.put ], // Overwrite configuration
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -124,25 +124,25 @@ app.map({
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
'/project/:project/gis': {
|
'/project/:project/gis': {
|
||||||
get: [ mw.etag.noSave, mw.gis.project.bbox ]
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.gis.project.bbox ]
|
||||||
},
|
},
|
||||||
'/project/:project/gis/preplot': {
|
'/project/:project/gis/preplot': {
|
||||||
get: [ mw.etag.noSave, mw.gis.project.preplot ]
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.gis.project.preplot ]
|
||||||
},
|
},
|
||||||
'/project/:project/gis/preplot/:featuretype(line|point)': {
|
'/project/:project/gis/preplot/:featuretype(line|point)': {
|
||||||
get: [ mw.etag.noSave, mw.gis.project.preplot ]
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.gis.project.preplot ]
|
||||||
},
|
},
|
||||||
'/project/:project/gis/raw/:featuretype(line|point)': {
|
'/project/:project/gis/raw/:featuretype(line|point)': {
|
||||||
get: [ mw.etag.noSave, mw.gis.project.raw ]
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.gis.project.raw ]
|
||||||
},
|
},
|
||||||
'/project/:project/gis/final/:featuretype(line|point)': {
|
'/project/:project/gis/final/:featuretype(line|point)': {
|
||||||
get: [ mw.etag.noSave, mw.gis.project.final ]
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.gis.project.final ]
|
||||||
},
|
},
|
||||||
'/project/:project/gis/layer': {
|
'/project/:project/gis/layer': {
|
||||||
get: [ mw.etag.noSave, mw.gis.project.layer.get ]
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.gis.project.layer.get ]
|
||||||
},
|
},
|
||||||
'/project/:project/gis/layer/:name': {
|
'/project/:project/gis/layer/:name': {
|
||||||
get: [ mw.etag.noSave, mw.gis.project.layer.get ]
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.gis.project.layer.get ]
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -150,10 +150,10 @@ app.map({
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
'/project/:project/line/': {
|
'/project/:project/line/': {
|
||||||
get: [ mw.line.list ],
|
get: [ mw.auth.access.read, mw.line.list ],
|
||||||
},
|
},
|
||||||
'/project/:project/line/:line': {
|
'/project/:project/line/:line': {
|
||||||
// get: [ mw.line.get ],
|
// get: [ mw.auth.access.read, mw.line.get ],
|
||||||
patch: [ mw.auth.access.write, mw.line.patch ],
|
patch: [ mw.auth.access.write, mw.line.patch ],
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -162,13 +162,13 @@ app.map({
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
'/project/:project/sequence/': {
|
'/project/:project/sequence/': {
|
||||||
get: [ mw.sequence.list ],
|
get: [ mw.auth.access.read, mw.sequence.list ],
|
||||||
},
|
},
|
||||||
'/project/:project/sequence/:sequence': {
|
'/project/:project/sequence/:sequence': {
|
||||||
get: [ mw.sequence.get ],
|
get: [ mw.auth.access.read, mw.sequence.get ],
|
||||||
patch: [ mw.auth.access.write, mw.sequence.patch ],
|
patch: [ mw.auth.access.write, mw.sequence.patch ],
|
||||||
'/:point': {
|
'/:point': {
|
||||||
get: [ mw.sequence.point.get ]
|
get: [ mw.auth.access.read, mw.sequence.point.get ]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -177,25 +177,28 @@ app.map({
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
'/project/:project/plan/': {
|
'/project/:project/plan/': {
|
||||||
get: [ mw.plan.list ],
|
get: [ mw.auth.access.read, mw.plan.list ],
|
||||||
put: [ mw.auth.access.write, mw.plan.put ],
|
put: [ mw.auth.access.write, mw.plan.put ],
|
||||||
post: [ mw.auth.access.write, mw.plan.post ]
|
post: [ mw.auth.access.write, mw.plan.post ]
|
||||||
},
|
},
|
||||||
'/project/:project/plan/:sequence': {
|
'/project/:project/plan/:sequence': {
|
||||||
// get: [ mw.plan.get ],
|
// get: [ mw.auth.access.read, mw.plan.get ],
|
||||||
patch: [ mw.auth.access.write, mw.plan.patch ],
|
patch: [ mw.auth.access.write, mw.plan.patch ],
|
||||||
delete: [ mw.auth.access.write, mw.plan.delete ]
|
delete: [ mw.auth.access.write, mw.plan.delete ]
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Line name endpoints
|
* Line name endpoints
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Read access is sufficient for the next two endpoints
|
||||||
|
|
||||||
'/project/:project/linename': {
|
'/project/:project/linename': {
|
||||||
post: [ mw.linename.post ], // Get a linename
|
post: [ mw.auth.access.read, mw.linename.post ], // Get a linename
|
||||||
},
|
},
|
||||||
'/project/:project/linename/properties': {
|
'/project/:project/linename/properties': {
|
||||||
get: [ mw.linename.properties.get ], // Get linename properties
|
get: [ mw.auth.access.read, mw.linename.properties.get ], // Get linename properties
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -203,19 +206,19 @@ app.map({
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
'/project/:project/event/': {
|
'/project/:project/event/': {
|
||||||
get: [ mw.event.list ],
|
get: [ mw.auth.access.read, mw.event.list ],
|
||||||
post: [ mw.auth.access.write, mw.event.post ],
|
post: [ mw.auth.access.write, mw.event.post ],
|
||||||
put: [ mw.auth.access.write, mw.event.put ],
|
put: [ mw.auth.access.write, mw.event.put ],
|
||||||
delete: [ mw.auth.access.write, mw.event.delete ],
|
delete: [ mw.auth.access.write, mw.event.delete ],
|
||||||
'changes/:since': {
|
'changes/:since': {
|
||||||
get: [ mw.event.changes ]
|
get: [ mw.auth.access.read, mw.event.changes ]
|
||||||
},
|
},
|
||||||
// TODO Rename -/:sequence → sequence/:sequence
|
// TODO Rename -/:sequence → sequence/:sequence
|
||||||
'-/:sequence/': { // NOTE: We need to avoid conflict with the next endpoint ☹
|
'-/:sequence/': { // NOTE: We need to avoid conflict with the next endpoint ☹
|
||||||
get: [ mw.event.sequence.get ],
|
get: [ mw.auth.access.read, mw.event.sequence.get ],
|
||||||
},
|
},
|
||||||
':id/': {
|
':id/': {
|
||||||
get: [ mw.event.get ],
|
get: [ mw.auth.access.read, mw.event.get ],
|
||||||
put: [ mw.auth.access.write, mw.event.put ],
|
put: [ mw.auth.access.write, mw.event.put ],
|
||||||
patch: [ mw.auth.access.write, mw.event.patch ],
|
patch: [ mw.auth.access.write, mw.event.patch ],
|
||||||
delete: [mw.auth.access.write, mw.event.delete ]
|
delete: [mw.auth.access.write, mw.event.delete ]
|
||||||
@@ -229,17 +232,17 @@ app.map({
|
|||||||
'/project/:project/qc': {
|
'/project/:project/qc': {
|
||||||
'/results': {
|
'/results': {
|
||||||
// Get all QC results for :project
|
// Get all QC results for :project
|
||||||
get: [ mw.etag.noSave, mw.qc.results.get ],
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.qc.results.get ],
|
||||||
|
|
||||||
// Delete all QC results for :project
|
// Delete all QC results for :project
|
||||||
delete: [ mw.etag.noSave, mw.auth.access.write, mw.qc.results.delete ],
|
delete: [ mw.auth.access.write, mw.etag.noSave, mw.qc.results.delete ],
|
||||||
|
|
||||||
'/accept': {
|
'/accept': {
|
||||||
post: [ mw.etag.noSave, mw.auth.access.write, mw.qc.results.accept ]
|
post: [ mw.auth.access.write, mw.etag.noSave, mw.qc.results.accept ]
|
||||||
},
|
},
|
||||||
|
|
||||||
'/unaccept': {
|
'/unaccept': {
|
||||||
post: [ mw.etag.noSave, mw.auth.access.write, mw.qc.results.unaccept ]
|
post: [ mw.auth.access.write, mw.etag.noSave, mw.qc.results.unaccept ]
|
||||||
},
|
},
|
||||||
|
|
||||||
'/sequence/:sequence': {
|
'/sequence/:sequence': {
|
||||||
@@ -247,7 +250,7 @@ app.map({
|
|||||||
get: [ mw.etag.noSave, mw.qc.results.get ],
|
get: [ mw.etag.noSave, mw.qc.results.get ],
|
||||||
|
|
||||||
// Delete QC results for :project, :sequence
|
// Delete QC results for :project, :sequence
|
||||||
delete: [ mw.etag.noSave, mw.auth.access.write, mw.qc.results.delete ]
|
delete: [ mw.auth.access.write, mw.etag.noSave, mw.qc.results.delete ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -257,18 +260,18 @@ app.map({
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
'/project/:project/label/': {
|
'/project/:project/label/': {
|
||||||
get: [ mw.label.list ],
|
get: [ mw.auth.access.read, mw.label.list ],
|
||||||
// post: [ mw.label.post ],
|
// post: [ mw.label.post ],
|
||||||
},
|
},
|
||||||
'/project/:project/configuration/:path(*)?': {
|
'/project/:project/configuration/:path(*)?': {
|
||||||
get: [ mw.configuration.get ],
|
get: [ mw.auth.access.read, mw.configuration.get ],
|
||||||
// post: [ mw.auth.access.admin, mw.label.post ],
|
// post: [ mw.auth.access.admin, mw.label.post ],
|
||||||
},
|
},
|
||||||
'/project/:project/info/:path(*)': {
|
'/project/:project/info/:path(*)': {
|
||||||
get: [ mw.info.get ],
|
get: [ mw.auth.operations, mw.auth.access.read, mw.info.get ],
|
||||||
post: [ mw.auth.access.write, mw.info.post ],
|
post: [ mw.auth.operations, mw.auth.access.write, mw.info.post ],
|
||||||
put: [ mw.auth.access.write, mw.info.put ],
|
put: [ mw.auth.operations, mw.auth.access.write, mw.info.put ],
|
||||||
delete: [ mw.auth.access.write, mw.info.delete ]
|
delete: [ mw.auth.operations, mw.auth.access.write, mw.info.delete ]
|
||||||
},
|
},
|
||||||
'/project/:project/meta/': {
|
'/project/:project/meta/': {
|
||||||
put: [ mw.auth.access.write, mw.meta.put ],
|
put: [ mw.auth.access.write, mw.meta.put ],
|
||||||
@@ -278,7 +281,7 @@ app.map({
|
|||||||
// GET:
|
// GET:
|
||||||
// `/raw/sequences/qc/missing_shots`,
|
// `/raw/sequences/qc/missing_shots`,
|
||||||
// `/final/points/qc/sync_warn/results
|
// `/final/points/qc/sync_warn/results
|
||||||
get: [ mw.meta.get ],
|
get: [ mw.auth.access.read, mw.meta.get ],
|
||||||
// // PUT:
|
// // PUT:
|
||||||
// // `/raw/qc/missing_shots` ← { sequence: …, value: … }
|
// // `/raw/qc/missing_shots` ← { sequence: …, value: … }
|
||||||
// put: [ mw.meta.put ]
|
// put: [ mw.meta.put ]
|
||||||
@@ -296,7 +299,7 @@ app.map({
|
|||||||
'/files/?:path(*)': {
|
'/files/?:path(*)': {
|
||||||
get: [ mw.auth.access.write, mw.etag.noSave, mw.files.get ]
|
get: [ mw.auth.access.write, mw.etag.noSave, mw.files.get ]
|
||||||
},
|
},
|
||||||
'/navdata/': {
|
'/navdata/': { // TODO These endpoints should probably need read access auth
|
||||||
get: [ mw.etag.noSave, mw.navdata.get ],
|
get: [ mw.etag.noSave, mw.navdata.get ],
|
||||||
'gis/:featuretype(line|point)': {
|
'gis/:featuretype(line|point)': {
|
||||||
get: [ mw.etag.noSave, mw.gis.navdata.get ]
|
get: [ mw.etag.noSave, mw.gis.navdata.get ]
|
||||||
|
|||||||
Reference in New Issue
Block a user