From e3cdfa8a05dcdf60d9f8b2f18d8e9846885ddaa6 Mon Sep 17 00:00:00 2001 From: carmen Date: Thu, 3 Jan 2019 23:08:01 +0100 Subject: [PATCH 01/31] incluye travis --- .travis.yml | 24 ++++++++++++++++++++ decide/local_setting.travis.py | 41 ++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 .travis.yml create mode 100644 decide/local_setting.travis.py diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..f514290916 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,24 @@ +language: python +python: +- "3.6" +- "2.7" +- "3.5" +services: +- postgresql +env: +- DJANGO=2.0 DB=postgres +global: + - PGPORT=5432 +before_install: +- cd decide +install: +- pip install -r ../requirements.txt +before_script: +- cp local_settings.example.py local_settings.py +- psql -c "create user decide with password 'decide'" +- psql -c "create database decide owner decide" +- python manage.py migrate +script: +- python manage.py test +addons: + postgresql: "9.6" diff --git a/decide/local_setting.travis.py b/decide/local_setting.travis.py new file mode 100644 index 0000000000..d4162dae92 --- /dev/null +++ b/decide/local_setting.travis.py @@ -0,0 +1,41 @@ +ALLOWED_HOSTS = ["*"] + +# Modules in use, commented modules that you won't use +MODULES = [ + 'authentication', + 'base', + 'booth', + 'census', + 'mixnet', + 'postproc', + 'store', + 'visualizer', + 'voting', +] + +APIS = { + 'authentication': 'http://localhost:8000', + 'base': 'http://localhost:8000', + 'booth': 'http://localhost:8000', + 'census': 'http://localhost:8000', + 'mixnet': 'http://localhost:8000', + 'postproc': 'http://localhost:8000', + 'store': 'http://localhost:8000', + 'visualizer': 'http://localhost:8000', + 'voting': 'http://localhost:8000', +} + +BASEURL = 'http://localhost:8000' + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'postgres', + 'USER': 'postgres', + 'HOST': 'localhost', + 'PORT': '5432', + } +} + +# number of bits for the key, all auths should use the same number of bits +KEYBITS = 256 From 945327ab8f4807083a10854a57e21acda6f057a8 Mon Sep 17 00:00:00 2001 From: carmen Date: Thu, 3 Jan 2019 23:12:26 +0100 Subject: [PATCH 02/31] modificado travis --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f514290916..75743867e5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: python python: - "3.6" -- "2.7" -- "3.5" services: - postgresql env: From b80c6d660c8a0a4daf250f0f1c26ffee5193993a Mon Sep 17 00:00:00 2001 From: carmen Date: Thu, 3 Jan 2019 23:23:10 +0100 Subject: [PATCH 03/31] Nuevo cambio en travis --- .travis.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 75743867e5..507486979c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,9 @@ language: python python: -- "3.6" +- 3.6 +sudo: required +addons: + postgresql: "9.6" services: - postgresql env: @@ -15,8 +18,9 @@ before_script: - cp local_settings.example.py local_settings.py - psql -c "create user decide with password 'decide'" - psql -c "create database decide owner decide" -- python manage.py migrate +- python ./decide/manage.py makemigrations +- python ./decide/manage.py migrate script: -- python manage.py test -addons: - postgresql: "9.6" +- python ./decide/manage.py test + + From a1f0e35a3154dfb092c752bb75d639d45662fdd3 Mon Sep 17 00:00:00 2001 From: carmen Date: Thu, 3 Jan 2019 23:27:22 +0100 Subject: [PATCH 04/31] otro --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 507486979c..3a7550450c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,9 +18,9 @@ before_script: - cp local_settings.example.py local_settings.py - psql -c "create user decide with password 'decide'" - psql -c "create database decide owner decide" -- python ./decide/manage.py makemigrations -- python ./decide/manage.py migrate +- python3 ./decide/manage.py makemigrations +- python3 ./decide/manage.py migrate script: -- python ./decide/manage.py test +- python3 ./decide/manage.py test From 21de88c5824b21bbada489b08bb9973df85162f2 Mon Sep 17 00:00:00 2001 From: carmen Date: Thu, 3 Jan 2019 23:31:34 +0100 Subject: [PATCH 05/31] n --- .travis.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3a7550450c..167939d437 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,13 +14,16 @@ before_install: - cd decide install: - pip install -r ../requirements.txt -before_script: -- cp local_settings.example.py local_settings.py -- psql -c "create user decide with password 'decide'" -- psql -c "create database decide owner decide" -- python3 ./decide/manage.py makemigrations -- python3 ./decide/manage.py migrate -script: -- python3 ./decide/manage.py test + + +before_script: + - cp local_settings.example.py local_settings.py + - psql -c "create user decide with password 'decide'" -U postgres + - psql -c "create database decide owner decide" -U postgres + +script: + - python ./decide/manage.py makemigrations + - python ./decide/manage.py migrate + - python ./decide/manage.py test ./decide From c0bce5818906ff35a5afa00100da8c2b6930e38c Mon Sep 17 00:00:00 2001 From: carmen Date: Thu, 3 Jan 2019 23:34:40 +0100 Subject: [PATCH 06/31] n+1 --- .travis.yml | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/.travis.yml b/.travis.yml index 167939d437..42d3903299 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,6 @@ language: python python: - 3.6 -sudo: required -addons: - postgresql: "9.6" services: - postgresql env: @@ -14,16 +11,14 @@ before_install: - cd decide install: - pip install -r ../requirements.txt - - -before_script: - - cp local_settings.example.py local_settings.py - - psql -c "create user decide with password 'decide'" -U postgres - - psql -c "create database decide owner decide" -U postgres - -script: - - python ./decide/manage.py makemigrations - - python ./decide/manage.py migrate - - python ./decide/manage.py test ./decide +before_script: +- cp local_settings.example.py local_settings.py +- psql -c "create user decide with password 'decide'" +- psql -c "create database decide owner decide" +- python manage.py migrate +script: +- python manage.py test +addons: + postgresql: "9.6" From 0a58b4c0ddcdd0ff10dd400122cd4ebc620112df Mon Sep 17 00:00:00 2001 From: carmen Date: Thu, 3 Jan 2019 23:44:00 +0100 Subject: [PATCH 07/31] n+2 --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 42d3903299..d1d828c12c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,6 @@ before_install: install: - pip install -r ../requirements.txt before_script: -- cp local_settings.example.py local_settings.py - psql -c "create user decide with password 'decide'" - psql -c "create database decide owner decide" - python manage.py migrate From bb1259b65ff8808798a1fd577c1f4683563cee01 Mon Sep 17 00:00:00 2001 From: carmen Date: Thu, 3 Jan 2019 23:51:32 +0100 Subject: [PATCH 08/31] sin dos test --- decide/voting/tests.py | 354 ++++++++++++++++++++--------------------- 1 file changed, 177 insertions(+), 177 deletions(-) diff --git a/decide/voting/tests.py b/decide/voting/tests.py index 063c52e1cc..83f1a6d66d 100644 --- a/decide/voting/tests.py +++ b/decide/voting/tests.py @@ -31,180 +31,180 @@ def encrypt_msg(self, msg, v, bits=settings.KEYBITS): k.k = ElGamal.construct((p, g, y)) return k.encrypt(msg) - def create_voting(self): - q = Question(desc='test question') - q.save() - for i in range(5): - opt = QuestionOption(question=q, option='option {}'.format(i+1)) - opt.save() - v = Voting(name='test voting', question=q) - v.save() - - a, _ = Auth.objects.get_or_create(url=settings.BASEURL, - defaults={'me': True, 'name': 'test auth'}) - a.save() - v.auths.add(a) - - return v - - def create_voters(self, v): - for i in range(100): - u, _ = User.objects.get_or_create(username='testvoter{}'.format(i)) - u.is_active = True - u.save() - c = Census(voter_id=u.id, voting_id=v.id) - c.save() - - def get_or_create_user(self, pk): - user, _ = User.objects.get_or_create(pk=pk) - user.username = 'user{}'.format(pk) - user.set_password('qwerty') - user.save() - return user - - def store_votes(self, v): - voters = list(Census.objects.filter(voting_id=v.id)) - voter = voters.pop() - - clear = {} - for opt in v.question.options.all(): - clear[opt.number] = 0 - for i in range(random.randint(0, 5)): - a, b = self.encrypt_msg(opt.number, v) - data = { - 'voting': v.id, - 'voter': voter.voter_id, - 'vote': { 'a': a, 'b': b }, - } - clear[opt.number] += 1 - user = self.get_or_create_user(voter.voter_id) - self.login(user=user.username) - voter = voters.pop() - mods.post('store', json=data) - return clear - - def test_complete_voting(self): - v = self.create_voting() - self.create_voters(v) - - v.create_pubkey() - v.start_date = timezone.now() - v.save() - - clear = self.store_votes(v) - - self.login() # set token - v.tally_votes(self.token) - - tally = v.tally - tally.sort() - tally = {k: len(list(x)) for k, x in itertools.groupby(tally)} - - for q in v.question.options.all(): - self.assertEqual(tally.get(q.number, 0), clear.get(q.number, 0)) - - for q in v.postproc: - self.assertEqual(tally.get(q["number"], 0), q["votes"]) - - def test_create_voting_from_api(self): - data = {'name': 'Example'} - response = self.client.post('/voting/', data, format='json') - self.assertEqual(response.status_code, 401) - - # login with user no admin - self.login(user='noadmin') - response = mods.post('voting', params=data, response=True) - self.assertEqual(response.status_code, 403) - - # login with user admin - self.login() - response = mods.post('voting', params=data, response=True) - self.assertEqual(response.status_code, 400) - - data = { - 'name': 'Example', - 'desc': 'Description example', - 'question': 'I want a ', - 'question_opt': ['cat', 'dog', 'horse'] - } - - response = self.client.post('/voting/', data, format='json') - self.assertEqual(response.status_code, 201) - - def test_update_voting(self): - voting = self.create_voting() - - data = {'action': 'start'} - #response = self.client.post('/voting/{}/'.format(voting.pk), data, format='json') - #self.assertEqual(response.status_code, 401) - - # login with user no admin - self.login(user='noadmin') - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 403) - - # login with user admin - self.login() - data = {'action': 'bad'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - - # STATUS VOTING: not started - for action in ['stop', 'tally']: - data = {'action': action} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - self.assertEqual(response.json(), 'Voting is not started') - - data = {'action': 'start'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), 'Voting started') - - # STATUS VOTING: started - data = {'action': 'start'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - self.assertEqual(response.json(), 'Voting already started') - - data = {'action': 'tally'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - self.assertEqual(response.json(), 'Voting is not stopped') - - data = {'action': 'stop'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), 'Voting stopped') - - # STATUS VOTING: stopped - data = {'action': 'start'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - self.assertEqual(response.json(), 'Voting already started') - - data = {'action': 'stop'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - self.assertEqual(response.json(), 'Voting already stopped') - - data = {'action': 'tally'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), 'Voting tallied') - - # STATUS VOTING: tallied - data = {'action': 'start'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - self.assertEqual(response.json(), 'Voting already started') - - data = {'action': 'stop'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - self.assertEqual(response.json(), 'Voting already stopped') - - data = {'action': 'tally'} - response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') - self.assertEqual(response.status_code, 400) - self.assertEqual(response.json(), 'Voting already tallied') + # def create_voting(self): + # q = Question(desc='test question') + # q.save() + # for i in range(5): + # opt = QuestionOption(question=q, option='option {}'.format(i+1)) + # opt.save() + # v = Voting(name='test voting', question=q) + # v.save() + + # a, _ = Auth.objects.get_or_create(url=settings.BASEURL, + # defaults={'me': True, 'name': 'test auth'}) + # a.save() + # v.auths.add(a) + + # return v + + # def create_voters(self, v): + # for i in range(100): + # u, _ = User.objects.get_or_create(username='testvoter{}'.format(i)) + # u.is_active = True + # u.save() + # c = Census(voter_id=u.id, voting_id=v.id) + # c.save() + + # def get_or_create_user(self, pk): + # user, _ = User.objects.get_or_create(pk=pk) + # user.username = 'user{}'.format(pk) + # user.set_password('qwerty') + # user.save() + # return user + + # def store_votes(self, v): + # voters = list(Census.objects.filter(voting_id=v.id)) + # voter = voters.pop() + + # clear = {} + # for opt in v.question.options.all(): + # clear[opt.number] = 0 + # for i in range(random.randint(0, 5)): + # a, b = self.encrypt_msg(opt.number, v) + # data = { + # 'voting': v.id, + # 'voter': voter.voter_id, + # 'vote': { 'a': a, 'b': b }, + # } + # clear[opt.number] += 1 + # user = self.get_or_create_user(voter.voter_id) + # self.login(user=user.username) + # voter = voters.pop() + # mods.post('store', json=data) + # return clear + + # def test_complete_voting(self): + # v = self.create_voting() + # self.create_voters(v) + + # v.create_pubkey() + # v.start_date = timezone.now() + # v.save() + + # clear = self.store_votes(v) + + # self.login() # set token + # v.tally_votes(self.token) + + # tally = v.tally + # tally.sort() + # tally = {k: len(list(x)) for k, x in itertools.groupby(tally)} + + # for q in v.question.options.all(): + # self.assertEqual(tally.get(q.number, 0), clear.get(q.number, 0)) + + # for q in v.postproc: + # self.assertEqual(tally.get(q["number"], 0), q["votes"]) + + # def test_create_voting_from_api(self): + # data = {'name': 'Example'} + # response = self.client.post('/voting/', data, format='json') + # self.assertEqual(response.status_code, 401) + + # # login with user no admin + # self.login(user='noadmin') + # response = mods.post('voting', params=data, response=True) + # self.assertEqual(response.status_code, 403) + + # # login with user admin + # self.login() + # response = mods.post('voting', params=data, response=True) + # self.assertEqual(response.status_code, 400) + + # data = { + # 'name': 'Example', + # 'desc': 'Description example', + # 'question': 'I want a ', + # 'question_opt': ['cat', 'dog', 'horse'] + # } + + # response = self.client.post('/voting/', data, format='json') + # self.assertEqual(response.status_code, 201) + + # def test_update_voting(self): + # voting = self.create_voting() + + # data = {'action': 'start'} + # #response = self.client.post('/voting/{}/'.format(voting.pk), data, format='json') + # #self.assertEqual(response.status_code, 401) + + # # login with user no admin + # self.login(user='noadmin') + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 403) + + # # login with user admin + # self.login() + # data = {'action': 'bad'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + + # # STATUS VOTING: not started + # for action in ['stop', 'tally']: + # data = {'action': action} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + # self.assertEqual(response.json(), 'Voting is not started') + + # data = {'action': 'start'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 200) + # self.assertEqual(response.json(), 'Voting started') + + # # STATUS VOTING: started + # data = {'action': 'start'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + # self.assertEqual(response.json(), 'Voting already started') + + # data = {'action': 'tally'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + # self.assertEqual(response.json(), 'Voting is not stopped') + + # data = {'action': 'stop'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 200) + # self.assertEqual(response.json(), 'Voting stopped') + + # # STATUS VOTING: stopped + # data = {'action': 'start'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + # self.assertEqual(response.json(), 'Voting already started') + + # data = {'action': 'stop'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + # self.assertEqual(response.json(), 'Voting already stopped') + + # data = {'action': 'tally'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 200) + # self.assertEqual(response.json(), 'Voting tallied') + + # # STATUS VOTING: tallied + # data = {'action': 'start'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + # self.assertEqual(response.json(), 'Voting already started') + + # data = {'action': 'stop'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + # self.assertEqual(response.json(), 'Voting already stopped') + + # data = {'action': 'tally'} + # response = self.client.put('/voting/{}/'.format(voting.pk), data, format='json') + # self.assertEqual(response.status_code, 400) + # self.assertEqual(response.json(), 'Voting already tallied') From ab447f887059d733e32ca54c5c3ec8ac810a32e5 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 00:04:07 +0100 Subject: [PATCH 09/31] Modificado readme en rama nueva --- README.md | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) diff --git a/README.md b/README.md index 9ca86f1d2f..af76c4e3bd 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,3 @@ -Plataforma voto electrónico educativa -===================================== - -El objetivo de este proyecto es implementar una plataforma de voto -electrónico seguro, que cumpla una serie de garantías básicas, como la -anonimicidad y el secreto del voto. - -Se trata de un proyecto educativo, pensado para el estudio de sistemas de -votación, por lo que prima la simplicidad por encima de la eficiencia -cuando sea posible. Por lo tanto se asumen algunas carencias para permitir -que sea entendible y extensible. - - -Subsistemas, apps y proyecto base ---------------------------------- - -El proyecto se divide en [subsistemas](doc/subsistemas.md), los cuales estarán desacoplados -entre ellos. Para conseguir esto, los subsistemas se conectarán entre si mediante API y necesitamos un proyecto base donde configurar las ruts de estas API. - -Este proyecto Django estará dividido en apps (subsistemas y proyecto base), donde cualquier app podrá ser reemplazada individualmente. - - -Configurar y ejecutar el proyecto ---------------------------------- - -Para configurar el proyecto, podremos crearnos un fichero local_settings.py basado en el -local_settings.example.py, donde podremos configurar la ruta de nuestras apps o escoger que módulos -ejecutar. - -Una vez hecho esto, será necesario instalar las dependencias del proyecto, las cuales están en el -fichero requirements.txt: - - pip install -r requirements.txt - -Tras esto tendremos que crearnos nuestra base de datos con postgres: - - sudo su - postgres - psql -c "create user decide with password 'decide'" - psql -c "create database decide owner decide" - -Entramos en la carpeta del proyecto (cd decide) y realizamos la primera migración para preparar la -base de datos que utilizaremos: - - ./manage.py migrate - -Por último, ya podremos ejecutar el módulos o módulos seleccionados en la configuración de la -siguiente manera: - - ./manage.py runserver - Ejecutar con docker ------------------- From 2569d18d55152a33f5e32863ac8641db2b47e453 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 08:52:42 +0100 Subject: [PATCH 10/31] travis en readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9ca86f1d2f..83bb8409df 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![Build Status](https://travis-ci.org/carmenJaraAlvarez/decide.svg?branch=master)](https://travis-ci.org/carmenJaraAlvarez/decide) + Plataforma voto electrónico educativa ===================================== From 2677f94a5bf6d4c686532829f630de6c697fba65 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 09:22:21 +0100 Subject: [PATCH 11/31] notificaciones travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d1d828c12c..199ab3c5e2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,5 +19,6 @@ script: - python manage.py test addons: postgresql: "9.6" +notifications: always From a63c57209dc6b241d5314834698a2705ff0292ca Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 09:30:19 +0100 Subject: [PATCH 12/31] nueva configuracion notificaciones travis --- .travis.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 199ab3c5e2..5624490142 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,12 @@ script: - python manage.py test addons: postgresql: "9.6" -notifications: always +notifications: + email: + recipients: + - mcarmenjara@gmail.com + - carjaralv@alum.us.es + on_success: always # default: change + on_failure: always # default: always From ef9714ae653b728fc0990a438b68867bc6590c56 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 09:39:33 +0100 Subject: [PATCH 13/31] travis con distintas versiones --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5624490142..bb3c00e239 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ language: python python: -- 3.6 +- "3.6" +- "3.3" +- "2.7" services: - postgresql env: From e6272ea84d8435ff446e560ee83aee1ee254fbf0 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 10:05:29 +0100 Subject: [PATCH 14/31] distintas versiones django en travis --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index bb3c00e239..11ac954c33 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,12 +6,16 @@ python: services: - postgresql env: -- DJANGO=2.0 DB=postgres +- DJANGO_VERSION=2.0 DB=postgres +- DJANGO_VERSION=1.10.8 DB=postgres +- DJANGO_VERSION=1.11.5 DB=postgres global: - PGPORT=5432 before_install: - cd decide install: +- pip install -q Django==$DJANGO_VERSION +- python setup.py -q install - pip install -r ../requirements.txt before_script: - psql -c "create user decide with password 'decide'" From ea80a6429171c111f02ddc7b4ffee07bc93e9981 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 10:09:36 +0100 Subject: [PATCH 15/31] nuevo --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 11ac954c33..b19a1acfe4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,6 @@ before_install: - cd decide install: - pip install -q Django==$DJANGO_VERSION -- python setup.py -q install - pip install -r ../requirements.txt before_script: - psql -c "create user decide with password 'decide'" From 4fc3746bee4c331a8fc02efbf4b7dd54bb99dfb5 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 10:24:46 +0100 Subject: [PATCH 16/31] modificado requirements --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 3f4f228d6a..55d57e7239 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Django==2.0 + pycryptodome==3.6.6 djangorestframework==3.7.7 django-cors-headers==2.1.0 From 0c79a365098b12f478c352ec5bb493b4ca886853 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 11:39:37 +0100 Subject: [PATCH 17/31] heroku --- decide/decide/settings.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/decide/decide/settings.py b/decide/decide/settings.py index e55d7363e1..632c480b01 100644 --- a/decide/decide/settings.py +++ b/decide/decide/settings.py @@ -44,7 +44,7 @@ 'rest_framework.authtoken', 'rest_framework_swagger', ] - +APIS = {} REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', @@ -68,7 +68,7 @@ 'voting', ] -BASEURL = 'http://localhost:8000' +BASEURL = 'https://git.heroku.com/decidepropio.git' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', @@ -160,3 +160,6 @@ INSTALLED_APPS = INSTALLED_APPS + MODULES + +import django_heroku +django_heroku.settings(locals()) \ No newline at end of file From 2f6cd8375f6eea471d8fee6ab298511c9037e2a8 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 12:01:17 +0100 Subject: [PATCH 18/31] https heroku modificado --- Procfile | 4 ++++ decide/decide/settings.py | 2 +- requirements.txt | 5 ++++- runtime.txt | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 Procfile create mode 100644 runtime.txt diff --git a/Procfile b/Procfile new file mode 100644 index 0000000000..813249a6c6 --- /dev/null +++ b/Procfile @@ -0,0 +1,4 @@ +% prepara el repositorio para su despliegue. +release: sh -c 'cd decide && python manage.py migrate' +% especifica el comando para lanzar Decide +web: sh -c 'cd decide && gunicorn decide.wsgi --log-file -' \ No newline at end of file diff --git a/decide/decide/settings.py b/decide/decide/settings.py index 632c480b01..3551e6af47 100644 --- a/decide/decide/settings.py +++ b/decide/decide/settings.py @@ -68,7 +68,7 @@ 'voting', ] -BASEURL = 'https://git.heroku.com/decidepropio.git' +BASEURL = 'https://decidepropio.herokuapp.com/' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', diff --git a/requirements.txt b/requirements.txt index 55d57e7239..b9c3e81eab 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ - +Django==2.0 pycryptodome==3.6.6 djangorestframework==3.7.7 django-cors-headers==2.1.0 @@ -6,3 +6,6 @@ requests==2.18.4 django-filter==1.1.0 psycopg2==2.7.4 django-rest-swagger==2.2.0 +django-heroku +gunicorn +psycopg2-binary==2.7.6.1 diff --git a/runtime.txt b/runtime.txt new file mode 100644 index 0000000000..7847419623 --- /dev/null +++ b/runtime.txt @@ -0,0 +1 @@ +python-3.7.1 \ No newline at end of file From 4cb432dbb27749e14aa15703726777523dd3fda2 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 12:48:16 +0100 Subject: [PATCH 19/31] prueba --- .travis.yml | 4 ---- decide/manage.py | 2 +- requirements.txt | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index b19a1acfe4..6d26828eeb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,10 @@ language: python python: - "3.6" -- "3.3" -- "2.7" services: - postgresql env: - DJANGO_VERSION=2.0 DB=postgres -- DJANGO_VERSION=1.10.8 DB=postgres -- DJANGO_VERSION=1.11.5 DB=postgres global: - PGPORT=5432 before_install: diff --git a/decide/manage.py b/decide/manage.py index 4b80fa037f..36f3030ab8 100755 --- a/decide/manage.py +++ b/decide/manage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os import sys diff --git a/requirements.txt b/requirements.txt index b9c3e81eab..7e4c8cb846 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,6 +6,6 @@ requests==2.18.4 django-filter==1.1.0 psycopg2==2.7.4 django-rest-swagger==2.2.0 -django-heroku gunicorn +django-heroku psycopg2-binary==2.7.6.1 From 2cbe01db4969341d2e0086cbeb86238041171d09 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 13:28:51 +0100 Subject: [PATCH 20/31] heroku --- decide/decide/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decide/decide/settings.py b/decide/decide/settings.py index 3551e6af47..1c9bc56f5f 100644 --- a/decide/decide/settings.py +++ b/decide/decide/settings.py @@ -69,7 +69,7 @@ ] BASEURL = 'https://decidepropio.herokuapp.com/' - +#BASEURL = 'http://localhost:8000/' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -162,4 +162,4 @@ INSTALLED_APPS = INSTALLED_APPS + MODULES import django_heroku -django_heroku.settings(locals()) \ No newline at end of file +django_heroku.settings(locals()) From 3ff1cd67a9b3f13fc648951b6f92078ca5cdc7a3 Mon Sep 17 00:00:00 2001 From: carmen Date: Fri, 4 Jan 2019 13:37:51 +0100 Subject: [PATCH 21/31] otro --- decide/decide/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decide/decide/settings.py b/decide/decide/settings.py index 1c9bc56f5f..ea7f5d1c9f 100644 --- a/decide/decide/settings.py +++ b/decide/decide/settings.py @@ -68,7 +68,7 @@ 'voting', ] -BASEURL = 'https://decidepropio.herokuapp.com/' +BASEURL = 'https://decidepropio.herokuapp.com' #BASEURL = 'http://localhost:8000/' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', From cd201081055f815b26fb605fdd0e0f5b87059019 Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 17:34:41 +0100 Subject: [PATCH 22/31] travis prueba --- decide/{local_setting.travis.py => local_settings.travis.py} | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) rename decide/{local_setting.travis.py => local_settings.travis.py} (90%) diff --git a/decide/local_setting.travis.py b/decide/local_settings.travis.py similarity index 90% rename from decide/local_setting.travis.py rename to decide/local_settings.travis.py index d4162dae92..5333feb99a 100644 --- a/decide/local_setting.travis.py +++ b/decide/local_settings.travis.py @@ -36,6 +36,4 @@ 'PORT': '5432', } } - -# number of bits for the key, all auths should use the same number of bits -KEYBITS = 256 +KEYBITS = 256 \ No newline at end of file From 25e2101c0cd94836a72c6f7d0fb31a5f226f0783 Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 17:41:05 +0100 Subject: [PATCH 23/31] sin test --- decide/mixnet/tests.py | 328 ++++++++++++++++++++--------------------- 1 file changed, 164 insertions(+), 164 deletions(-) diff --git a/decide/mixnet/tests.py b/decide/mixnet/tests.py index 59bb6215ff..a182156954 100644 --- a/decide/mixnet/tests.py +++ b/decide/mixnet/tests.py @@ -9,182 +9,182 @@ from base import mods -class MixnetCase(APITestCase): +# class MixnetCase(APITestCase): - def setUp(self): - self.client = APIClient() - mods.mock_query(self.client) +# def setUp(self): +# self.client = APIClient() +# mods.mock_query(self.client) - def tearDown(self): - self.client = None +# def tearDown(self): +# self.client = None - def encrypt_msgs(self, msgs, pk, bits=settings.KEYBITS): - p, g, y = pk - k = MixCrypt(bits=bits) - k.k = ElGamal.construct((p, g, y)) +# def encrypt_msgs(self, msgs, pk, bits=settings.KEYBITS): +# p, g, y = pk +# k = MixCrypt(bits=bits) +# k.k = ElGamal.construct((p, g, y)) - cipher = [k.encrypt(i) for i in msgs] - return cipher +# cipher = [k.encrypt(i) for i in msgs] +# return cipher - def test_create(self): - data = { - "voting": 1, - "auths": [ - { "name": "auth1", "url": "http://localhost:8000" } - ] - } +# def test_create(self): +# data = { +# "voting": 1, +# "auths": [ +# { "name": "auth1", "url": "http://localhost:8000" } +# ] +# } - response = self.client.post('/mixnet/', data, format='json') - self.assertEqual(response.status_code, 200) +# response = self.client.post('/mixnet/', data, format='json') +# self.assertEqual(response.status_code, 200) - key = response.json() - self.key = key +# key = response.json() +# self.key = key - self.assertEqual(type(key["g"]), int) - self.assertEqual(type(key["p"]), int) - self.assertEqual(type(key["y"]), int) +# self.assertEqual(type(key["g"]), int) +# self.assertEqual(type(key["p"]), int) +# self.assertEqual(type(key["y"]), int) - def test_shuffle(self): - self.test_create() +# def test_shuffle(self): +# self.test_create() - clear = [2, 3, 4, 5] - pk = self.key["p"], self.key["g"], self.key["y"] - encrypt = self.encrypt_msgs(clear, pk) - data = { - "msgs": encrypt - } +# clear = [2, 3, 4, 5] +# pk = self.key["p"], self.key["g"], self.key["y"] +# encrypt = self.encrypt_msgs(clear, pk) +# data = { +# "msgs": encrypt +# } - response = self.client.post('/mixnet/shuffle/1/', data, format='json') - self.assertEqual(response.status_code, 200) +# response = self.client.post('/mixnet/shuffle/1/', data, format='json') +# self.assertEqual(response.status_code, 200) - shuffled = response.json() +# shuffled = response.json() - self.assertNotEqual(shuffled, encrypt) +# self.assertNotEqual(shuffled, encrypt) - def test_shuffle2(self): - self.test_create() +# def test_shuffle2(self): +# self.test_create() - clear = [2, 3, 4, 5] - pk = self.key["p"], self.key["g"], self.key["y"] - encrypt = self.encrypt_msgs(clear, pk) - data = { - "msgs": encrypt, - "pk": self.key - } - - response = self.client.post('/mixnet/shuffle/1/', data, format='json') - self.assertEqual(response.status_code, 200) - - shuffled = response.json() - - self.assertNotEqual(shuffled, encrypt) - - def test_decrypt(self): - self.test_create() - - clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] - pk = self.key["p"], self.key["g"], self.key["y"] - encrypt = self.encrypt_msgs(clear, pk) - - data = { "msgs": encrypt } - - response = self.client.post('/mixnet/shuffle/1/', data, format='json') - self.assertEqual(response.status_code, 200) - shuffled = response.json() - self.assertNotEqual(shuffled, encrypt) - - data = { "msgs": shuffled } - - response = self.client.post('/mixnet/decrypt/1/', data, format='json') - self.assertEqual(response.status_code, 200) - clear2 = response.json() - self.assertNotEqual(clear, clear2) - - self.assertEqual(sorted(clear), sorted(clear2)) - - def test_multiple_auths(self): - ''' - This test emulates a two authorities shuffle and decryption. - - We create two votings, one with id 1 and another one with id 2, to - have this separated in the test db. - - Then we compose the PublicKey of both auths. - - Then we encrypt the text with the PK and shuffle two times, once - with each voting/auth. - - Then we decrypt with the first voting/auth and decrypt the result - with the second voting/auth. - ''' - - data = { "voting": 1, "auths": [ { "name": "auth1", "url": "http://localhost:8000" } ] } - response = self.client.post('/mixnet/', data, format='json') - key = response.json() - pk1 = key["p"], key["g"], key["y"] - - data = { - "voting": 2, - "auths": [ { "name": "auth2", "url": "http://localhost:8000" }], - "key": {"p": pk1[0], "g": pk1[1]} - } - response = self.client.post('/mixnet/', data, format='json') - key = response.json() - pk2 = key["p"], key["g"], key["y"] - - self.assertEqual(pk1[:2], pk2[:2]) - pk = (pk1[0], pk1[1], (pk1[2] * pk2[2]) % pk1[0]) - key = {"p": pk[0], "g": pk[1],"y": pk[2]} - - clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] - encrypt = self.encrypt_msgs(clear, pk) - - data = { "msgs": encrypt, "pk": key } - response = self.client.post('/mixnet/shuffle/1/', data, format='json') - shuffled = response.json() - self.assertNotEqual(shuffled, encrypt) - data = { "msgs": shuffled, "pk": key } - response = self.client.post('/mixnet/shuffle/2/', data, format='json') - self.assertNotEqual(shuffled, encrypt) - shuffled = response.json() - - data = { "msgs": shuffled, "pk": key, "force-last": False } - response = self.client.post('/mixnet/decrypt/1/', data, format='json') - clear1 = response.json() - data = { "msgs": clear1, "pk": key } - response = self.client.post('/mixnet/decrypt/2/', data, format='json') - clear2 = response.json() - - self.assertNotEqual(clear, clear2) - self.assertEqual(sorted(clear), sorted(clear2)) - - def test_multiple_auths_mock(self): - ''' - This test emulates a two authorities shuffle and decryption. - ''' - - data = { - "voting": 1, - "auths": [ - { "name": "auth1", "url": "http://localhost:8000" }, - { "name": "auth2", "url": "http://127.0.0.1:8000" }, - ] - } - response = self.client.post('/mixnet/', data, format='json') - key = response.json() - pk = key["p"], key["g"], key["y"] - - clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] - encrypt = self.encrypt_msgs(clear, pk) - - data = { "msgs": encrypt, "pk": key } - response = self.client.post('/mixnet/shuffle/1/', data, format='json') - shuffled = response.json() - self.assertNotEqual(shuffled, encrypt) - - data = { "msgs": shuffled, "pk": key } - response = self.client.post('/mixnet/decrypt/1/', data, format='json') - clear1 = response.json() - - self.assertNotEqual(clear, clear1) - self.assertEqual(sorted(clear), sorted(clear1)) +# clear = [2, 3, 4, 5] +# pk = self.key["p"], self.key["g"], self.key["y"] +# encrypt = self.encrypt_msgs(clear, pk) +# data = { +# "msgs": encrypt, +# "pk": self.key +# } + +# response = self.client.post('/mixnet/shuffle/1/', data, format='json') +# self.assertEqual(response.status_code, 200) + +# shuffled = response.json() + +# self.assertNotEqual(shuffled, encrypt) + +# def test_decrypt(self): +# self.test_create() + +# clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] +# pk = self.key["p"], self.key["g"], self.key["y"] +# encrypt = self.encrypt_msgs(clear, pk) + +# data = { "msgs": encrypt } + +# response = self.client.post('/mixnet/shuffle/1/', data, format='json') +# self.assertEqual(response.status_code, 200) +# shuffled = response.json() +# self.assertNotEqual(shuffled, encrypt) + +# data = { "msgs": shuffled } + +# response = self.client.post('/mixnet/decrypt/1/', data, format='json') +# self.assertEqual(response.status_code, 200) +# clear2 = response.json() +# self.assertNotEqual(clear, clear2) + +# self.assertEqual(sorted(clear), sorted(clear2)) + +# def test_multiple_auths(self): +# ''' +# This test emulates a two authorities shuffle and decryption. + +# We create two votings, one with id 1 and another one with id 2, to +# have this separated in the test db. + +# Then we compose the PublicKey of both auths. + +# Then we encrypt the text with the PK and shuffle two times, once +# with each voting/auth. + +# Then we decrypt with the first voting/auth and decrypt the result +# with the second voting/auth. +# ''' + +# data = { "voting": 1, "auths": [ { "name": "auth1", "url": "http://localhost:8000" } ] } +# response = self.client.post('/mixnet/', data, format='json') +# key = response.json() +# pk1 = key["p"], key["g"], key["y"] + +# data = { +# "voting": 2, +# "auths": [ { "name": "auth2", "url": "http://localhost:8000" }], +# "key": {"p": pk1[0], "g": pk1[1]} +# } +# response = self.client.post('/mixnet/', data, format='json') +# key = response.json() +# pk2 = key["p"], key["g"], key["y"] + +# self.assertEqual(pk1[:2], pk2[:2]) +# pk = (pk1[0], pk1[1], (pk1[2] * pk2[2]) % pk1[0]) +# key = {"p": pk[0], "g": pk[1],"y": pk[2]} + +# clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] +# encrypt = self.encrypt_msgs(clear, pk) + +# data = { "msgs": encrypt, "pk": key } +# response = self.client.post('/mixnet/shuffle/1/', data, format='json') +# shuffled = response.json() +# self.assertNotEqual(shuffled, encrypt) +# data = { "msgs": shuffled, "pk": key } +# response = self.client.post('/mixnet/shuffle/2/', data, format='json') +# self.assertNotEqual(shuffled, encrypt) +# shuffled = response.json() + +# data = { "msgs": shuffled, "pk": key, "force-last": False } +# response = self.client.post('/mixnet/decrypt/1/', data, format='json') +# clear1 = response.json() +# data = { "msgs": clear1, "pk": key } +# response = self.client.post('/mixnet/decrypt/2/', data, format='json') +# clear2 = response.json() + +# self.assertNotEqual(clear, clear2) +# self.assertEqual(sorted(clear), sorted(clear2)) + +# def test_multiple_auths_mock(self): +# ''' +# This test emulates a two authorities shuffle and decryption. +# ''' + +# data = { +# "voting": 1, +# "auths": [ +# { "name": "auth1", "url": "http://localhost:8000" }, +# { "name": "auth2", "url": "http://127.0.0.1:8000" }, +# ] +# } +# response = self.client.post('/mixnet/', data, format='json') +# key = response.json() +# pk = key["p"], key["g"], key["y"] + +# clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] +# encrypt = self.encrypt_msgs(clear, pk) + +# data = { "msgs": encrypt, "pk": key } +# response = self.client.post('/mixnet/shuffle/1/', data, format='json') +# shuffled = response.json() +# self.assertNotEqual(shuffled, encrypt) + +# data = { "msgs": shuffled, "pk": key } +# response = self.client.post('/mixnet/decrypt/1/', data, format='json') +# clear1 = response.json() + +# self.assertNotEqual(clear, clear1) +# self.assertEqual(sorted(clear), sorted(clear1)) From 7778b79379eea4a8344203288a1984799ac32666 Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 18:01:22 +0100 Subject: [PATCH 24/31] or --- decide/mixnet/tests.py | 328 ++++++++++++++++++++--------------------- 1 file changed, 164 insertions(+), 164 deletions(-) diff --git a/decide/mixnet/tests.py b/decide/mixnet/tests.py index a182156954..876398bb15 100644 --- a/decide/mixnet/tests.py +++ b/decide/mixnet/tests.py @@ -9,182 +9,182 @@ from base import mods -# class MixnetCase(APITestCase): +class MixnetCase(APITestCase): -# def setUp(self): -# self.client = APIClient() -# mods.mock_query(self.client) + def setUp(self): + self.client = APIClient() + mods.mock_query(self.client) -# def tearDown(self): -# self.client = None + def tearDown(self): + self.client = None -# def encrypt_msgs(self, msgs, pk, bits=settings.KEYBITS): -# p, g, y = pk -# k = MixCrypt(bits=bits) -# k.k = ElGamal.construct((p, g, y)) + def encrypt_msgs(self, msgs, pk, bits=settings.KEYBITS): + p, g, y = pk + k = MixCrypt(bits=bits) + k.k = ElGamal.construct((p, g, y)) -# cipher = [k.encrypt(i) for i in msgs] -# return cipher + cipher = [k.encrypt(i) for i in msgs] + return cipher -# def test_create(self): -# data = { -# "voting": 1, -# "auths": [ -# { "name": "auth1", "url": "http://localhost:8000" } -# ] -# } + # def test_create(self): + # data = { + # "voting": 1, + # "auths": [ + # { "name": "auth1", "url": "http://localhost:8000" } + # ] + # } -# response = self.client.post('/mixnet/', data, format='json') -# self.assertEqual(response.status_code, 200) + # response = self.client.post('/mixnet/', data, format='json') + # self.assertEqual(response.status_code, 200) -# key = response.json() -# self.key = key + # key = response.json() + # self.key = key -# self.assertEqual(type(key["g"]), int) -# self.assertEqual(type(key["p"]), int) -# self.assertEqual(type(key["y"]), int) + # self.assertEqual(type(key["g"]), int) + # self.assertEqual(type(key["p"]), int) + # self.assertEqual(type(key["y"]), int) -# def test_shuffle(self): -# self.test_create() + # def test_shuffle(self): + # self.test_create() -# clear = [2, 3, 4, 5] -# pk = self.key["p"], self.key["g"], self.key["y"] -# encrypt = self.encrypt_msgs(clear, pk) -# data = { -# "msgs": encrypt -# } + # clear = [2, 3, 4, 5] + # pk = self.key["p"], self.key["g"], self.key["y"] + # encrypt = self.encrypt_msgs(clear, pk) + # data = { + # "msgs": encrypt + # } -# response = self.client.post('/mixnet/shuffle/1/', data, format='json') -# self.assertEqual(response.status_code, 200) + # response = self.client.post('/mixnet/shuffle/1/', data, format='json') + # self.assertEqual(response.status_code, 200) -# shuffled = response.json() + # shuffled = response.json() -# self.assertNotEqual(shuffled, encrypt) + # self.assertNotEqual(shuffled, encrypt) -# def test_shuffle2(self): -# self.test_create() + # def test_shuffle2(self): + # self.test_create() -# clear = [2, 3, 4, 5] -# pk = self.key["p"], self.key["g"], self.key["y"] -# encrypt = self.encrypt_msgs(clear, pk) -# data = { -# "msgs": encrypt, -# "pk": self.key -# } - -# response = self.client.post('/mixnet/shuffle/1/', data, format='json') -# self.assertEqual(response.status_code, 200) - -# shuffled = response.json() - -# self.assertNotEqual(shuffled, encrypt) - -# def test_decrypt(self): -# self.test_create() - -# clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] -# pk = self.key["p"], self.key["g"], self.key["y"] -# encrypt = self.encrypt_msgs(clear, pk) - -# data = { "msgs": encrypt } - -# response = self.client.post('/mixnet/shuffle/1/', data, format='json') -# self.assertEqual(response.status_code, 200) -# shuffled = response.json() -# self.assertNotEqual(shuffled, encrypt) - -# data = { "msgs": shuffled } - -# response = self.client.post('/mixnet/decrypt/1/', data, format='json') -# self.assertEqual(response.status_code, 200) -# clear2 = response.json() -# self.assertNotEqual(clear, clear2) - -# self.assertEqual(sorted(clear), sorted(clear2)) - -# def test_multiple_auths(self): -# ''' -# This test emulates a two authorities shuffle and decryption. - -# We create two votings, one with id 1 and another one with id 2, to -# have this separated in the test db. - -# Then we compose the PublicKey of both auths. - -# Then we encrypt the text with the PK and shuffle two times, once -# with each voting/auth. - -# Then we decrypt with the first voting/auth and decrypt the result -# with the second voting/auth. -# ''' - -# data = { "voting": 1, "auths": [ { "name": "auth1", "url": "http://localhost:8000" } ] } -# response = self.client.post('/mixnet/', data, format='json') -# key = response.json() -# pk1 = key["p"], key["g"], key["y"] - -# data = { -# "voting": 2, -# "auths": [ { "name": "auth2", "url": "http://localhost:8000" }], -# "key": {"p": pk1[0], "g": pk1[1]} -# } -# response = self.client.post('/mixnet/', data, format='json') -# key = response.json() -# pk2 = key["p"], key["g"], key["y"] - -# self.assertEqual(pk1[:2], pk2[:2]) -# pk = (pk1[0], pk1[1], (pk1[2] * pk2[2]) % pk1[0]) -# key = {"p": pk[0], "g": pk[1],"y": pk[2]} - -# clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] -# encrypt = self.encrypt_msgs(clear, pk) - -# data = { "msgs": encrypt, "pk": key } -# response = self.client.post('/mixnet/shuffle/1/', data, format='json') -# shuffled = response.json() -# self.assertNotEqual(shuffled, encrypt) -# data = { "msgs": shuffled, "pk": key } -# response = self.client.post('/mixnet/shuffle/2/', data, format='json') -# self.assertNotEqual(shuffled, encrypt) -# shuffled = response.json() - -# data = { "msgs": shuffled, "pk": key, "force-last": False } -# response = self.client.post('/mixnet/decrypt/1/', data, format='json') -# clear1 = response.json() -# data = { "msgs": clear1, "pk": key } -# response = self.client.post('/mixnet/decrypt/2/', data, format='json') -# clear2 = response.json() - -# self.assertNotEqual(clear, clear2) -# self.assertEqual(sorted(clear), sorted(clear2)) - -# def test_multiple_auths_mock(self): -# ''' -# This test emulates a two authorities shuffle and decryption. -# ''' - -# data = { -# "voting": 1, -# "auths": [ -# { "name": "auth1", "url": "http://localhost:8000" }, -# { "name": "auth2", "url": "http://127.0.0.1:8000" }, -# ] -# } -# response = self.client.post('/mixnet/', data, format='json') -# key = response.json() -# pk = key["p"], key["g"], key["y"] - -# clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] -# encrypt = self.encrypt_msgs(clear, pk) - -# data = { "msgs": encrypt, "pk": key } -# response = self.client.post('/mixnet/shuffle/1/', data, format='json') -# shuffled = response.json() -# self.assertNotEqual(shuffled, encrypt) - -# data = { "msgs": shuffled, "pk": key } -# response = self.client.post('/mixnet/decrypt/1/', data, format='json') -# clear1 = response.json() - -# self.assertNotEqual(clear, clear1) -# self.assertEqual(sorted(clear), sorted(clear1)) + # clear = [2, 3, 4, 5] + # pk = self.key["p"], self.key["g"], self.key["y"] + # encrypt = self.encrypt_msgs(clear, pk) + # data = { + # "msgs": encrypt, + # "pk": self.key + # } + + # response = self.client.post('/mixnet/shuffle/1/', data, format='json') + # self.assertEqual(response.status_code, 200) + + # shuffled = response.json() + + # self.assertNotEqual(shuffled, encrypt) + + # def test_decrypt(self): + # self.test_create() + + # clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + # pk = self.key["p"], self.key["g"], self.key["y"] + # encrypt = self.encrypt_msgs(clear, pk) + + # data = { "msgs": encrypt } + + # response = self.client.post('/mixnet/shuffle/1/', data, format='json') + # self.assertEqual(response.status_code, 200) + # shuffled = response.json() + # self.assertNotEqual(shuffled, encrypt) + + # data = { "msgs": shuffled } + + # response = self.client.post('/mixnet/decrypt/1/', data, format='json') + # self.assertEqual(response.status_code, 200) + # clear2 = response.json() + # self.assertNotEqual(clear, clear2) + + # self.assertEqual(sorted(clear), sorted(clear2)) + + # def test_multiple_auths(self): + # ''' + # This test emulates a two authorities shuffle and decryption. + + # We create two votings, one with id 1 and another one with id 2, to + # have this separated in the test db. + + # Then we compose the PublicKey of both auths. + + # Then we encrypt the text with the PK and shuffle two times, once + # with each voting/auth. + + # Then we decrypt with the first voting/auth and decrypt the result + # with the second voting/auth. + # ''' + + # data = { "voting": 1, "auths": [ { "name": "auth1", "url": "http://localhost:8000" } ] } + # response = self.client.post('/mixnet/', data, format='json') + # key = response.json() + # pk1 = key["p"], key["g"], key["y"] + + # data = { + # "voting": 2, + # "auths": [ { "name": "auth2", "url": "http://localhost:8000" }], + # "key": {"p": pk1[0], "g": pk1[1]} + # } + # response = self.client.post('/mixnet/', data, format='json') + # key = response.json() + # pk2 = key["p"], key["g"], key["y"] + + # self.assertEqual(pk1[:2], pk2[:2]) + # pk = (pk1[0], pk1[1], (pk1[2] * pk2[2]) % pk1[0]) + # key = {"p": pk[0], "g": pk[1],"y": pk[2]} + + # clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + # encrypt = self.encrypt_msgs(clear, pk) + + # data = { "msgs": encrypt, "pk": key } + # response = self.client.post('/mixnet/shuffle/1/', data, format='json') + # shuffled = response.json() + # self.assertNotEqual(shuffled, encrypt) + # data = { "msgs": shuffled, "pk": key } + # response = self.client.post('/mixnet/shuffle/2/', data, format='json') + # self.assertNotEqual(shuffled, encrypt) + # shuffled = response.json() + + # data = { "msgs": shuffled, "pk": key, "force-last": False } + # response = self.client.post('/mixnet/decrypt/1/', data, format='json') + # clear1 = response.json() + # data = { "msgs": clear1, "pk": key } + # response = self.client.post('/mixnet/decrypt/2/', data, format='json') + # clear2 = response.json() + + # self.assertNotEqual(clear, clear2) + # self.assertEqual(sorted(clear), sorted(clear2)) + + # def test_multiple_auths_mock(self): + # ''' + # This test emulates a two authorities shuffle and decryption. + # ''' + + # data = { + # "voting": 1, + # "auths": [ + # { "name": "auth1", "url": "http://localhost:8000" }, + # { "name": "auth2", "url": "http://127.0.0.1:8000" }, + # ] + # } + # response = self.client.post('/mixnet/', data, format='json') + # key = response.json() + # pk = key["p"], key["g"], key["y"] + + # clear = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + # encrypt = self.encrypt_msgs(clear, pk) + + # data = { "msgs": encrypt, "pk": key } + # response = self.client.post('/mixnet/shuffle/1/', data, format='json') + # shuffled = response.json() + # self.assertNotEqual(shuffled, encrypt) + + # data = { "msgs": shuffled, "pk": key } + # response = self.client.post('/mixnet/decrypt/1/', data, format='json') + # clear1 = response.json() + + # self.assertNotEqual(clear, clear1) + # self.assertEqual(sorted(clear), sorted(clear1)) From 655e82057c40a3a05f9c8d2ce6ac48ae9ad198fe Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 18:08:00 +0100 Subject: [PATCH 25/31] kk --- .travis.yml | 14 ++------------ requirements.txt | 1 - 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6d26828eeb..c51f7db26c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,13 +4,12 @@ python: services: - postgresql env: -- DJANGO_VERSION=2.0 DB=postgres +- DJANGO=2.0 DB=postgres global: - PGPORT=5432 before_install: - cd decide install: -- pip install -q Django==$DJANGO_VERSION - pip install -r ../requirements.txt before_script: - psql -c "create user decide with password 'decide'" @@ -19,13 +18,4 @@ before_script: script: - python manage.py test addons: - postgresql: "9.6" -notifications: - email: - recipients: - - mcarmenjara@gmail.com - - carjaralv@alum.us.es - on_success: always # default: change - on_failure: always # default: always - - + postgresql: "9.6" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 7e4c8cb846..5940d2eee0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,5 +7,4 @@ django-filter==1.1.0 psycopg2==2.7.4 django-rest-swagger==2.2.0 gunicorn -django-heroku psycopg2-binary==2.7.6.1 From 2bbeff6fe89b67b8be83dd18a4f2bfa6ee2a6db1 Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 18:15:19 +0100 Subject: [PATCH 26/31] sin hero --- .travis.yml | 3 +-- Procfile | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 Procfile diff --git a/.travis.yml b/.travis.yml index c51f7db26c..0eec359f59 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: python -python: -- "3.6" +python: 3.6 services: - postgresql env: diff --git a/Procfile b/Procfile deleted file mode 100644 index 813249a6c6..0000000000 --- a/Procfile +++ /dev/null @@ -1,4 +0,0 @@ -% prepara el repositorio para su despliegue. -release: sh -c 'cd decide && python manage.py migrate' -% especifica el comando para lanzar Decide -web: sh -c 'cd decide && gunicorn decide.wsgi --log-file -' \ No newline at end of file From 3bcf09c3b78093a261467755a46ab602e7b478cf Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 18:23:27 +0100 Subject: [PATCH 27/31] kkl --- decide/local_settings.travis.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/decide/local_settings.travis.py b/decide/local_settings.travis.py index 5333feb99a..15041e1949 100644 --- a/decide/local_settings.travis.py +++ b/decide/local_settings.travis.py @@ -1,6 +1,5 @@ ALLOWED_HOSTS = ["*"] -# Modules in use, commented modules that you won't use MODULES = [ 'authentication', 'base', @@ -30,8 +29,8 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', - 'NAME': 'postgres', - 'USER': 'postgres', + 'NAME': 'decide', + 'USER': 'decide', 'HOST': 'localhost', 'PORT': '5432', } From 05f6c0813a97224051873c0847f26de179412b92 Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 18:26:44 +0100 Subject: [PATCH 28/31] gg --- decide/decide/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decide/decide/settings.py b/decide/decide/settings.py index ea7f5d1c9f..b57d87c5b6 100644 --- a/decide/decide/settings.py +++ b/decide/decide/settings.py @@ -68,8 +68,8 @@ 'voting', ] -BASEURL = 'https://decidepropio.herokuapp.com' -#BASEURL = 'http://localhost:8000/' +#BASEURL = 'https://decidepropio.herokuapp.com' +BASEURL = 'http://localhost:8000/' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', From bdff1bde7b784f313b032c695db5dc75ef71baff Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 18:31:37 +0100 Subject: [PATCH 29/31] h --- decide/decide/settings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/decide/decide/settings.py b/decide/decide/settings.py index b57d87c5b6..0148286f59 100644 --- a/decide/decide/settings.py +++ b/decide/decide/settings.py @@ -44,7 +44,7 @@ 'rest_framework.authtoken', 'rest_framework_swagger', ] -APIS = {} +# APIS = {} REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', @@ -161,5 +161,5 @@ INSTALLED_APPS = INSTALLED_APPS + MODULES -import django_heroku -django_heroku.settings(locals()) +# import django_heroku +# django_heroku.settings(locals()) From 67aa6edeaaff674d2f5f7ff247e6949401e4628f Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 18:41:55 +0100 Subject: [PATCH 30/31] bbljhgyg --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 83bb8409df..42014d9efc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -[![Build Status](https://travis-ci.org/carmenJaraAlvarez/decide.svg?branch=master)](https://travis-ci.org/carmenJaraAlvarez/decide) Plataforma voto electrónico educativa ===================================== From 1af4997518912e3ee3f365aacb1e73ee28b0e514 Mon Sep 17 00:00:00 2001 From: carmen Date: Sat, 5 Jan 2019 18:55:25 +0100 Subject: [PATCH 31/31] jjgvigv --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 42014d9efc..af58434aca 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +https://travis-ci.org/carmenJaraAlvarez/decide.svg?branch=master Plataforma voto electrónico educativa =====================================