[census] instead of disallowing suspicious answers, mark them

This commit is contained in:
Avris 2021-02-01 11:02:57 +01:00
parent 0d65127eb4
commit ca0eaa2056
5 changed files with 23 additions and 6 deletions

View File

@ -547,6 +547,7 @@ census:
- ['osobą niebinarną'] - ['osobą niebinarną']
- ['osobą cispłciową'] - ['osobą cispłciową']
- ['binarną osobą transpłciową'] - ['binarną osobą transpłciową']
# - ['nie wiem']
- -
type: 'number' type: 'number'
min: 1900 min: 1900

View File

@ -966,7 +966,7 @@ census:
By uniknąć tendencyjności, <strong>kolejność propozycji jest losowa</strong>. By uniknąć tendencyjności, <strong>kolejność propozycji jest losowa</strong>.
agree: > agree: >
Wyrażam zgodę na przetwarzanie moich odpowiedzi Wyrażam zgodę na przetwarzanie moich odpowiedzi
oraz na użycie zanonimizowanej wersji mojego adresu IP oraz fingerprintu przeglądarki oraz na użycie mojego adresu IP oraz fingerprintu przeglądarki
do przeciwdziałania wandalizmom i spamowi. do przeciwdziałania wandalizmom i spamowi.
Dane te nie są w stanie zidentyfikować żadnej osoby, Dane te nie są w stanie zidentyfikować żadnej osoby,
zostaną użyte wyłącznie w celu zapewnienia unikalności odpowiedzi zostaną użyte wyłącznie w celu zapewnienia unikalności odpowiedzi

View File

@ -0,0 +1,8 @@
-- Up
ALTER TABLE census ADD COLUMN ip TEXT NULL DEFAULT NULL;
ALTER TABLE census ADD COLUMN userAgent TEXT NULL DEFAULT NULL;
ALTER TABLE census ADD COLUMN acceptLanguage TEXT NULL DEFAULT NULL;
ALTER TABLE census ADD COLUMN suspicious INTEGER NOT NULL DEFAULT 0;
-- Down

View File

@ -168,6 +168,11 @@
countResponses, countResponses,
}; };
}, },
mounted() {
if (process.client) {
this.finished = !!parseInt(window.localStorage.getItem('census-finished') || 0);
}
},
methods: { methods: {
startSurvey() { startSurvey() {
this.q = 0; this.q = 0;
@ -224,6 +229,7 @@
writins: JSON.stringify(this.writins), writins: JSON.stringify(this.writins),
}); });
this.finished = true; this.finished = true;
window.localStorage.setItem('census-finished', '1');
} }
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs.questionform) { if (this.$refs.questionform) {

View File

@ -38,19 +38,21 @@ router.get('/census/finished', async (req, res) => {
}); });
router.post('/census/submit', async (req, res) => { router.post('/census/submit', async (req, res) => {
if (await hasFinished(req)) { const suspicious = await hasFinished(req);
return res.status(401).json({error: 'Unauthorised'});
}
const id = ulid(); const id = ulid();
await req.db.get(SQL`INSERT INTO census (id, locale, edition, userId, fingerprint, answers, writins) VALUES ( await req.db.get(SQL`INSERT INTO census (id, locale, edition, userId, fingerprint, answers, writins, ip, userAgent, acceptLanguage, suspicious) VALUES (
${id}, ${id},
${req.config.locale}, ${req.config.locale},
${req.config.census.edition}, ${req.config.census.edition},
${req.user ? req.user.id : null}, ${req.user ? req.user.id : null},
${buildFingerprint(req)}, ${buildFingerprint(req)},
${req.body.answers}, ${req.body.answers},
${req.body.writins} ${req.body.writins},
${req.ip},
${req.headers['user-agent']},
${req.headers['accept-language']},
${suspicious}
)`); )`);
return res.json(id); return res.json(id);