Skip to content

Commit

Permalink
initialized createView and create payload for all collections
Browse files Browse the repository at this point in the history
  • Loading branch information
ltann committed Nov 18, 2020
1 parent 8781445 commit e91125c
Show file tree
Hide file tree
Showing 13 changed files with 177 additions and 135 deletions.
13 changes: 7 additions & 6 deletions server/anchor/anchor-api.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';
const Boom = require('boom');
const Joi = require('joi');
const joiToJson = require('../helper/joiToJson');

const register = function (server,serverOptions) {

Expand Down Expand Up @@ -102,12 +103,12 @@ const register = function (server,serverOptions) {
method: function (request,h) {

const model = request.pre.model;
const { error, value } = Joi.validate(request.payload,model.routes.create.payload);

if (error) {
throw Boom.badRequest('Incorrect Payload', error);
const joiSchema = model.routes.create.payload;
const obj = joiSchema.validate(request.payload);
if (obj.error) {
throw Boom.badRequest('Incorrect Payload', obj.error);
}
request.payload = value;
request.payload = obj.value;
return h.continue;
}
}, {
Expand Down Expand Up @@ -242,7 +243,7 @@ const register = function (server,serverOptions) {

return await request.pre.model.routes.getId.handler(request,h);
}
});
});

server.route({
method: 'GET',
Expand Down
2 changes: 1 addition & 1 deletion server/anchor/anchor-model.js
Original file line number Diff line number Diff line change
Expand Up @@ -969,7 +969,7 @@ AnchorModel.routes = {
const model = request.pre.model;
const payload = request.payload;

if (request.auth.isAuthenticated){
if (request.auth.isAuthenticated) {

payload.userId = String(request.auth.credentials.user._id);
}
Expand Down
60 changes: 28 additions & 32 deletions server/anchor/anchor-web-route.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,49 +107,45 @@ const register = function (server, serverOptions) {
const fields = model.routes.tableView.outputDataFields;
let unAddedKeys = new Set();

for (let key in fields) {

if (fields.hasOwnProperty(key)){
let userRoles = request.auth.credentials.scope;
if (fields[key]['accessRoles'] && !IsAllowed(userRoles, fields[key]['accessRoles'])){//Blocks column option if user role is too low
unAddedKeys.add(key);
continue;
}

const col = {'label': fields[key]['label']};
if (fields[key]['invisible']){
col['invisible'] = true;
}
for (let key of Object.keys(fields)){
let userRoles = request.auth.credentials.scope;
if (fields[key]['accessRoles'] && !IsAllowed(userRoles, fields[key]['accessRoles'])){//Blocks column option if user role is too low
unAddedKeys.add(key);
continue;
}

outputCols.push(col);
const col = {'label': fields[key]['label']};
if (fields[key]['invisible']){
col['invisible'] = true;
}

outputCols.push(col);
}


//modify fields to remove sensitive keys where user permission is too low.
for (let key in fields){
for (let key of Object.keys(fields)){
if (unAddedKeys.has(key)){
delete fields[key];
}
}
for (let rec of outputData){
let doc = {};
for (let key in fields) {
if (fields.hasOwnProperty(key)){
if ('from' in fields[key]){
if (fields[key]['from']) {
doc[key] = rec[fields[key]['from']][key];
}
else{
doc[key] = 'N/A';
}
for (let key of Object.keys(fields)) {
if ('from' in fields[key]){
if (rec[fields[key]['from']][key]) {
doc[key] = rec[fields[key]['from']][key];
}
else{
doc[key] = 'N/A';
}
}
else {
if (rec[key] === null || typeof rec[key] === 'undefined'){
doc[key] = 'N/A';
}
else {
if (rec[key] === null){
doc[key] = 'N/A';
}
else {
doc[key] = rec[key];
}
doc[key] = rec[key];
}
}
}
Expand Down Expand Up @@ -198,7 +194,7 @@ const register = function (server, serverOptions) {
}
}
else{
if (data[col.label] === null){
if (data[col.label] === null || typeof data[col.label] === 'undefined'){
doc[col.label] = 'N/A'
}
else{
Expand All @@ -216,6 +212,7 @@ const register = function (server, serverOptions) {
}
}
}
// console.log(outputData);
outputData.map((dataRow) => {//render function to change default string version of specified types.

for (let key of Object.keys(dataRow)){
Expand All @@ -224,7 +221,6 @@ const register = function (server, serverOptions) {
}
}
});

return h.view('anchor-default-templates/index', {
user: request.auth.credentials.user,
projectName: Config.get('/projectName'),
Expand Down
84 changes: 42 additions & 42 deletions server/api/invites.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,44 +8,44 @@ const Mailer = require('../mailer');

const register = function (server, options) {

server.route({
method: 'POST',
path: '/api/invite',
options: {
auth: {
strategies: ['simple', 'session']
},
validate: {
payload: Invite.payload
}
},
handler: async function (request, h) {

const invite = await Invite.create(request.payload.name,request.payload.email,request.payload.description, request.auth.credentials.user._id.toString());
const emailOptions = {
subject: 'You have been invited to ' + Config.get('/projectName'),
to: {
name: request.payload.name,
address: request.payload.email
}
};
const template = 'invite';
const context = {
url: request.headers.origin + '/invite/' + invite._id.toString(),
name: Config.get('/projectName')
};

try {
await Mailer.sendEmail(emailOptions, template, context);
}
catch (err) {
request.log(['mailer', 'error'], err);
}
return invite;
}
});
// server.route({
// method: 'POST',
// path: '/api/invite',
// options: {
// auth: {
// strategies: ['simple', 'session']
// },
// validate: {
// payload: Invite.payload
// }
// },
// handler: async function (request, h) {
//
// const invite = await Invite.create(request.payload.name,request.payload.email,request.payload.description, request.auth.credentials.user._id.toString());
//
// const emailOptions = {
// subject: 'You have been invited to ' + Config.get('/projectName'),
// to: {
// name: request.payload.name,
// address: request.payload.email
// }
// };
// const template = 'invite';
// const context = {
// url: request.headers.origin + '/invite/' + invite._id.toString(),
// name: Config.get('/projectName')
// };
//
// try {
// await Mailer.sendEmail(emailOptions, template, context);
// }
// catch (err) {
// request.log(['mailer', 'error'], err);
// }
//
// return invite;
// }
// });

server.route({
method: 'PUT',
Expand All @@ -65,16 +65,16 @@ const register = function (server, options) {
throw Boom.notFound('Document not found.');
}

return invite;
return invite;
}
});
});
};

module.exports = {
name: 'invites',
dependencies: [
'hapi-anchor-model',
'auth',
'auth',
],
register
};
};
7 changes: 5 additions & 2 deletions server/models/auth-attempt.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ AuthAttempt.schema = Joi.object({

AuthAttempt.routes = Hoek.applyToDefaults(AnchorModel.routes, {
create: {
disabled: true
payload: Joi.object({})
},
update: {
disabled: true
payload: Joi.object({})
},
tableView: {
outputDataFields: {
Expand All @@ -76,6 +76,9 @@ AuthAttempt.routes = Hoek.applyToDefaults(AnchorModel.routes, {
browser: {label: 'browser', invisible: true},

}
},
createView: {
createSchema: Joi.object({})
}
});

Expand Down
24 changes: 15 additions & 9 deletions server/models/event.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ const Hoek = require('hoek');

class Event extends AnchorModel {

static async create(name, userId) {
static async create(doc) {

Assert.ok(name, 'Missing name argument.');
Assert.ok(userId, 'Missing userId argument.');
Assert.ok(doc.name, 'Missing name argument.');
Assert.ok(doc.userId, 'Missing userId argument.');

const document = {
name: name.toUpperCase(),
userId,
name: doc.name.toUpperCase(),
userId: doc.userId,
time: new Date()
};

Expand All @@ -34,11 +34,12 @@ Event.schema = Joi.object({
time: Joi.date().required()
});

Event.payload = Joi.object({
name: Joi.string().required()
});

Event.routes = Hoek.applyToDefaults(AnchorModel.routes, {
create: {
payload: Joi.object({
name: Joi.string().required()
})
},
delete: {
disabled: true
},
Expand All @@ -50,6 +51,11 @@ Event.routes = Hoek.applyToDefaults(AnchorModel.routes, {
userID: {label: 'User ID'},
_id: {label: 'ID', accessRoles: ['admin', 'researcher','root'], invisible: true}
}
},
createView: {
createSchema: Joi.object({
name: Joi.string().required()
})
}
});

Expand Down
34 changes: 21 additions & 13 deletions server/models/feedback.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ const Hoek = require('hoek');

class Feedback extends AnchorModel {

static async create(subject,description, userId) {
static async create(doc) {

Assert.ok(subject,'Missing subject');
Assert.ok(description, 'Missing description');
Assert.ok(userId,'Missing userid');
Assert.ok(doc.subject,'Missing subject');
Assert.ok(doc.description, 'Missing description');
Assert.ok(doc.userId,'Missing userid');

const document = {
subject,
description,
userId,
subject: doc.subject,
description: doc.description,
userId: doc.userId,
resolved: false,
time: new Date()
};
Expand All @@ -39,12 +39,13 @@ Feedback.schema = Joi.object({
time: Joi.date().required()
});

Feedback.payload = Joi.object({
subject: Joi.string().required(),
description: Joi.string().required()
});

Feedback.routes = Hoek.applyToDefaults(AnchorModel.routes, {
create: {
payload: Joi.object({
subject: Joi.string().required(),
description: Joi.string().required()
})
},
update: {
disabled: true
},
Expand All @@ -54,10 +55,17 @@ Feedback.routes = Hoek.applyToDefaults(AnchorModel.routes, {
subject: {label: 'Subject'},
description: {label: 'Description'},
resolved: {label: 'Resolved'},
studyID: {label: 'Study ID', from: 'user'},
userId: {label: 'User ID'},
time: {label: 'Time'},
_id: {label: 'ID', accessRoles: ['admin', 'researcher','root'], invisible: true}
}
},
createView: {
createSchema: Joi.object({
subject: Joi.string().required(),
description: Joi.string().required()
})
}
});

Expand All @@ -66,7 +74,7 @@ Feedback.lookups = [{
local: 'userId',
foreign: '_id',
as: 'user',
one: false
one: true
}];

Feedback.indexes = [
Expand Down
Loading

0 comments on commit e91125c

Please sign in to comment.