Skip to content

Commit ebc96c9

Browse files
committed
data submission working
1 parent 0ebdd9c commit ebc96c9

File tree

4 files changed

+76
-23
lines changed

4 files changed

+76
-23
lines changed

client/app/controllers/clientController.js

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -239,40 +239,40 @@ define(['jquery', 'controllers/tableController', 'helper/mpc', 'alertify', 'aler
239239
var $session = $('#session');
240240
if (!validateSessionInput($session, false)) {
241241
errors = errors.concat(SESSION_KEY_ERROR);
242-
if(analytics[SESSION_KEY_ERROR] == null) {
243-
analytics[SESSION_KEY_ERROR] = 0;
242+
if(analytics.validation_errors[SESSION_KEY_ERROR] == null) {
243+
analytics.validation_errors[SESSION_KEY_ERROR] = 0;
244244
}
245-
analytics[SESSION_KEY_ERROR]++;
245+
analytics.validation_errors[SESSION_KEY_ERROR]++;
246246
}
247247

248248
var $participationCode = $('#participation-code');
249249
if (!validateSessionInput($participationCode, false)) {
250250
errors = errors.concat(PARTICIPATION_CODE_ERROR);
251-
if(analytics[PARTICIPATION_CODE_ERROR] == null) {
252-
analytics[PARTICIPATION_CODE_ERROR] = 0;
251+
if(analytics.validation_errors[PARTICIPATION_CODE_ERROR] == null) {
252+
analytics.validation_errors[PARTICIPATION_CODE_ERROR] = 0;
253253
}
254-
analytics[PARTICIPATION_CODE_ERROR]++;
254+
analytics.validation_errors[PARTICIPATION_CODE_ERROR]++;
255255
}
256256

257257
// Validate the remaining components after session and
258258
// and participation code are validated with the server.
259259
var validateRemainingComponents = function (result) {
260260
if (!result) {
261261
errors = errors.concat(SESSION_PARTICIPATION_CODE_SERVER_ERROR);
262-
if(analytics[SESSION_PARTICIPATION_CODE_SERVER_ERROR] == null) {
263-
analytics[SESSION_PARTICIPATION_CODE_SERVER_ERROR] = 0;
262+
if(analytics.validation_errors[SESSION_PARTICIPATION_CODE_SERVER_ERROR] == null) {
263+
analytics.validation_errors[SESSION_PARTICIPATION_CODE_SERVER_ERROR] = 0;
264264
}
265-
analytics[SESSION_PARTICIPATION_CODE_SERVER_ERROR]++;
265+
analytics.validation_errors[SESSION_PARTICIPATION_CODE_SERVER_ERROR]++;
266266
}
267267

268268
// Verify confirmation check box was checked
269269
var verifyChecked = $('#verify').is(':checked');
270270
if (!verifyChecked) {
271271
errors = errors.concat(UNCHECKED_ERR);
272-
if(analytics[UNCHECKED_ERR] == null) {
273-
analytics[UNCHECKED_ERR] = 0;
272+
if(analytics.validation_errors[UNCHECKED_ERR] == null) {
273+
analytics.validation_errors[UNCHECKED_ERR] = 0;
274274
}
275-
analytics[UNCHECKED_ERR]++;
275+
analytics.validation_errors[UNCHECKED_ERR]++;
276276
}
277277

278278
// Verify additional questions
@@ -298,10 +298,10 @@ define(['jquery', 'controllers/tableController', 'helper/mpc', 'alertify', 'aler
298298

299299
if (!questionsValid) {
300300
errors = errors.concat(ADD_QUESTIONS_ERR);
301-
if(analytics[ADD_QUESTIONS_ERR] == null) {
302-
analytics[ADD_QUESTIONS_ERR] = 0;
301+
if(analytics.validation_errors[ADD_QUESTIONS_ERR] == null) {
302+
analytics.validation_errors[ADD_QUESTIONS_ERR] = 0;
303303
}
304-
analytics[ADD_QUESTIONS_ERR]++;
304+
analytics.validation_errors[ADD_QUESTIONS_ERR]++;
305305
}
306306

307307
// Register semantic discrepancies validator.
@@ -447,6 +447,8 @@ define(['jquery', 'controllers/tableController', 'helper/mpc', 'alertify', 'aler
447447
pairwise_hypercubes = mpc.encryptWithKey(pairwise_hypercubes, public_key);
448448
questions_public = mpc.encryptWithKey(questions_public, public_key); // This encrypts the public answers to questions
449449

450+
console.log('data', analytic_data);
451+
console.log('mask!',analytic_mask);
450452
var submission = {
451453
data: data,
452454
mask: mask,

client/app/controllers/unmaskController.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ define(['helper/mpc', 'controllers/tableController', 'filesaver'], function (mpc
1313
function aggregate_and_unmask(mOut, privateKey, session, password, callback) {
1414

1515
mOut = JSON.parse(mOut.data);
16-
16+
console.log(mOut);
1717
// Questions Public is the public answers to questions.
1818
var questions_public = [];
1919
for (var i = 0; i < mOut.length; i++) {
@@ -42,6 +42,7 @@ define(['helper/mpc', 'controllers/tableController', 'filesaver'], function (mpc
4242
// corresponding to a submission with decrypted
4343
// value fields
4444
var decrypted = decryptValueShares(sk, mOut, true);
45+
console.log(decrypted)
4546
questions_public = decryptValueShares(sk, questions_public, false);
4647

4748
// Aggregate decrypted values by key

client/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ <h2 class="text-center">Input your data</h2>
5454
<form>
5555
<div class="form-group">
5656
<label class="control-label" for="session">Session key</label>
57-
<input type="text" id="session" class="form-control" placeholder="Session key" pattern="^[a-zA-Z0-9]{26}$"
57+
<input type="text" id="session" class="form-control" placeholder="Session key" value="6fhvx8eb1xdqh679yx07xxcv20" pattern="^[a-zA-Z0-9]{26}$"
5858
autocomplete="off" required/>
5959
<span id="session-success" class="success-icon glyphicon glyphicon-ok form-control-feedback hidden"
6060
aria-hidden="true"></span>

server/index.js

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ function genPairs(num) {
5555
}
5656
return objPairs;
5757
}
58-
58+
const analyticsSchema = {
59+
validation_errors: joi.object().required(),
60+
mouse_positions: joi.object().required(),
61+
time_ms: joi.number().required()
62+
}
5963
const maskSchema = templateToJoiSchema(template, joi.string().required());
6064
const dataSchema = templateToJoiSchema(template, joi.number().required());
6165
const encryptedPublicQuestionsSchema = templateToJoiSchema(template.questions, joi.string().required());
@@ -135,6 +139,20 @@ async function createConnection() {
135139

136140
createConnection();
137141

142+
var Analytics = mongoose.model('Analytics', {
143+
_id: String,
144+
fields: Object,
145+
date: Number,
146+
session: String,
147+
});
148+
149+
var AnalyticsMask = mongoose.model('AnalyticsMask', {
150+
_id: String,
151+
fields: Object,
152+
date: Number,
153+
session: String
154+
});
155+
138156
// model for aggregate data
139157
var Aggregate = mongoose.model('Aggregate', {
140158
_id: String, // concat of session + user.
@@ -248,12 +266,15 @@ app.post('/', function (req, res) {
248266
console.log('POST /');
249267

250268
var body = req.body;
251-
console.log(body);
269+
console.log(body.data);
252270

271+
// TODO: make this make sense
253272
// TODO: set length restrictions on session and user
254273
var bodySchema = {
255274
mask: maskSchema.required(),
256-
data: dataSchema.required(),
275+
data: dataSchema.required(),
276+
analytic_data: analyticsSchema,
277+
analytic_mask: analyticsSchema,
257278
questions_public: encryptedPublicQuestionsSchema.required(),
258279
pairwise_hypercubes: pairwiseHyperCubeScheme.required(),
259280
session: joi.string().alphanum().required(),
@@ -280,7 +301,9 @@ app.post('/', function (req, res) {
280301
pairwise_hypercubes = body.pairwise_hypercubes,
281302
session = body.session,
282303
user = body.user,
283-
ID = session + user; // will use concat of user + session for now
304+
ID = session + user, // will use concat of user + session for now
305+
analytics = body.analytic_data,
306+
analyticsMask = body.analytics_mask;
284307

285308
// Ensure user key exists.
286309
UserKey.findOne({_id: ID}, function (err, data) {
@@ -294,6 +317,21 @@ app.post('/', function (req, res) {
294317
res.status(500).send('Invalid participation code.');
295318
} else { // User Key Found.
296319
// save the mask and individual aggregate
320+
321+
var analyticsToSave = new Analytics({
322+
_id: ID,
323+
fields: analytics,
324+
date: Date.now(),
325+
session: session
326+
});
327+
328+
var analyticsMasksToSave = new AnalyticsMask({
329+
_id: ID,
330+
fields: analyticsMask,
331+
date: Date.now(),
332+
session: session
333+
});
334+
297335
var aggToSave = new Aggregate({
298336
_id: ID,
299337
fields: req_data,
@@ -331,10 +369,22 @@ app.post('/', function (req, res) {
331369
{_id: ID},
332370
cubeToSave.toObject(),
333371
{upsert: true}
372+
),
373+
analyticsPromise = Analytics.update(
374+
{_id: ID},
375+
analyticsToSave.toObject(),
376+
{upsert: true}
377+
),
378+
analyticsMaskPromise = AnalyticsMask.update(
379+
{_id: ID},
380+
analyticsMasksToSave.toObject(),
381+
{upsert: true}
334382
);
335383

336-
Promise.join(aggPromise, maskPromise, cubePromise)
337-
.then(function (aggStored, maskStored, cubeStored) {
384+
385+
386+
Promise.join(aggPromise, maskPromise, cubePromise, analyticsPromise, analyticsMaskPromise)
387+
.then(function (aggStored, maskStored, cubeStored, analyticsStored, analyticsMaskStored) {
338388
res.send(body);
339389
return;
340390
})

0 commit comments

Comments
 (0)