diff --git a/.github/workflows/django.yml b/.github/workflows/django.yml new file mode 100644 index 0000000000..21f0f6b6bf --- /dev/null +++ b/.github/workflows/django.yml @@ -0,0 +1,55 @@ +name: Python application +on: + push: + branches: + - develop + - master +jobs: + build: + strategy: + matrix: + pyversion: ['3.10.12','3.11'] + sqlversion: ['14.9', '15'] + + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:14.9 + env: + POSTGRES_USER: decide + POSTGRES_PASSWORD: decide + POSTGRES_DB: decide + ports: + - 5432:5432 + # needed because the postgres container does not provide a healthcheck + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{matrix.pyversion}} + uses: actions/setup-python@v4 + with: + python-version: ${{matrix.pyversion}} + - name: psycopg2 prerequisites + run: sudo apt-get install libpq-dev + - name: Install dependencies and config + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install codacy-coverage + cp decide/local_settings.gactions.py decide/local_settings.py + - name: Run migrations (unnecessary) + run: | + cd decide + python manage.py migrate + - name: Run tests + run: | + cd decide + coverage run --branch --source=. ./manage.py test --keepdb +# coverage run --branch --source=. ./manage.py test voting --keepdb + coverage xml + - name: Codacy Coverage Reporter + uses: codacy/codacy-coverage-reporter-action@v1 + with: + project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + coverage-reports: decide/coverage.xml \ No newline at end of file diff --git a/.gitmessage.txt b/.gitmessage.txt new file mode 100644 index 0000000000..4b26b95261 --- /dev/null +++ b/.gitmessage.txt @@ -0,0 +1,22 @@ +tipo: asunto #id + +cuerpo + +### tipo +# feat (nueva funcionalidad) +# fix (corrección de bugs) +# research (incorporación de código experimental, puede ser no funcional) +# refactor (refactorización de código) +# docs (actualización de documentación) +# test (incorporación o modificación de tests) +# conf (modificación de archivos de configuración) + +### asunto +# Consiste en una breve descripción del problema que se ha tratado y que debe de comenzar con un verbo en participio. +# Se referenciará la issue correspondiente (en caso de existir) tal que: `#` + +### cuerpo (opcional) +# Se utilizará en caso de que el asunto no sea suficientemente descriptivo. + +### Ejemplo +# conf : Actualizado docker-compose.yml #1 \ No newline at end of file diff --git a/README.md b/README.md index 83d0a57e27..9b13739e38 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ [![Build Status](https://travis-ci.com/wadobo/decide.svg?branch=master)](https://travis-ci.com/wadobo/decide) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/94a85eaa0e974c71af6899ea3b0d27e0)](https://www.codacy.com/app/Wadobo/decide?utm_source=github.com&utm_medium=referral&utm_content=wadobo/decide&utm_campaign=Badge_Grade) [![Codacy Badge](https://api.codacy.com/project/badge/Coverage/94a85eaa0e974c71af6899ea3b0d27e0)](https://www.codacy.com/app/Wadobo/decide?utm_source=github.com&utm_medium=referral&utm_content=wadobo/decide&utm_campaign=Badge_Coverage) +[![Python application](https://github.com/bogdanstefan/decidePrueba/actions/workflows/django.yml/badge.svg)](https://github.com/bogdanstefan/decidePrueba/actions/workflows/django.yml) +UN CAMBIO! Plataforma voto electrónico educativa ===================================== @@ -66,17 +68,154 @@ 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" + psql -c "ALTER USER decide CREATEDB" 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 +Creamos el superusuario, que será el administrador del sistema. Con este usuario podremos tener acceso +a todas las funcionalidades ofrecidas por Decide, como por ejemplo crear usuarios. El comando es el +siguiente: + + ./manage.py createsuperuser + Por último, ya podremos ejecutar el módulos o módulos seleccionados en la configuración de la siguiente manera: ./manage.py runserver +Tests +------------------- + +Una vez configurado postgres y ejecutado el migrate. +Para ejecutar todos los tests disponibles + + $./manage.py test + +Para ejecutar los tests que pertenecen a una categoria como “voting”, por ejemplo + + $./manage.py test voting + +Para ver la cobertura del codigo que estos tests prueban, se puede lanzar el siguiente comando: + + coverage run --source . ./manage.py test -v 2 + +Esto generará un "index.html", que se puede consultar para ver de forma especifica las partes del codigo no testeadas. + + +Guía rápida +------------------- + +Aclaración: En esta guía vamos a usar como url de base: "localhost:8000". + +### 1. Login como administrador del sistema + +Una vez iniciada la aplicación, accedemos a http://localhost:8000/admin/ e ingresamos las credenciales +del super usuario creado anteriormente. + +![Imagen 01: Login](./resources/quickstart/00_login.png) + +Si nos hemos conectado con éxito como un administrador, nos debería aparecer la siguiente vista: + +![Imagen 02: Menu](./resources/quickstart/01_menu.png) + +### 2. Creación de questions + +Buscamos el botón "add" dentro del apartado "questions" de la categoría "voting". En el textarea +etiquetado como "Desc" se añade la pregunta a realizar en la futura votación. Después en los +apartados de "question options" añadimos todas las posibles respuestas a la pregunta definida +anteriormente. Estas "questions options" se pueden eliminar clickando a la "X" situada a la derecha y +se pueden añadir mas opciones pulsando en "add questions options" situado mas abajo. + +No es necesario rellenar todas las "question options" que aparezcan en la vista. Una vez tengamos +todas las posibles respuestas que deseamos podemos guardar haciendo click en el botón "Save". + +![Imagen 03: Questions](./resources/quickstart/02_question.png) + +### 3. Creación de votings + +Hacemos click al botón "add" dentro de "Votings" en la categoría "Voting" y nos aparecerá el formulario +de creacion de votaciones. + +En dicho formulario le ponemos un nombre a la votación, la descripción es opcional, en el desplegable +"question" nos debe aparecer la pregunta generada en el apartado anterior de esta guía y la +seleccionamos. + +![Imagen 04: Voting](./resources/quickstart/03_voting.png) + +En el apartado "Auths" de su primera votación deberá crear uno. Para ello, debe clickar en el "+" a la +derecha de la lista de "Auths". Aparecerá una ventana nueva donde deberá rellenar un formulario con el +nombre que desee y la url, en nuestro caso es "http://localhost:8000". + +![Imagen 05: Auth](./resources/quickstart/04_auth.png) + +Pulsamos en el botón "Save" y ya tenemos nuestra votación creada. + +### 4. Creacion de census + +En "votings" buscamos la votación que hemos generado y entramos en ella para mirar en la barra de +direcciones la id de nuestra votación. En el siguiente ejemplo, la id es 19. + + http://localhost:8000/admin/voting/voting/19/change/ + +Nos dirigimos al apartado "censuss" en la categoría "census" y clickamos en "add". Ponemos la id de +nuestra votacion en "voting id" y en "voter id" ponemos la id del votante que queremos añadir. + +NOTA: el administrador si es el primer usuario creado tendrá la id 1. + +![Imagen 06: Census](./resources/quickstart/05_census.png) + +### 5. Comenzar la votación + +Llegados a este punto necesitamos abrir una votación, para ello debemos marcar el checkbox a la +izquierda de nuestra votación. Una vez seleccionado, tenemos que ir al desplegable de "action", +seleccionamos la opción "Start" y pulsamos en el boton "Go". Esperamos a que aparezca el "Start date" +y ya tendríamos la votación abierta y lista para votar. + +![Imagen 07: Start voting](./resources/quickstart/06_start.png) + +### 6. Votar + +Para poder votar primero debemos ingresar en la barra de direcciones de nuestro navegador lo siguiente: + + http://localhost:8000/booth/[id de la votación]/ + +![Imagen 08: Booth](./resources/quickstart/07_booth.png) + +Una vez accedemos, debemos iniciar sesión con un usuario que esté incluido en el censo. + +Cuando nos aparezca la pregunta, ya podemos seleccionar la respuesta y guardarla como un voto. +Al confirmar el voto, nos aparecerá lo siguiente: + +![Imagen 09: Vote success](./resources/quickstart/08_voted.png) + +El mensaje de "Congratulations. Your vote has been sent" nos confirma que nuestro voto ha sido +registrado correctamente. + +### 7. Conteo de votos + +Nos dirigimos nuevamente al apartado "voting" desde nuestro perfil de administrador. Primero tenemos +que cerrar la votación, para ello seleccionamos el checkbox a la izquierda de nuestra votación +marcamos "Stop" y pulsamos el botón "Go". Notará que en el apartado "End Date" ahora aparece +la fecha actual, esto nos indica que la votación ha sido cerrada y está lista para el conteo. + +Una vez cerrada la votación, volvemos a seleccionar el checkbox de la izquierda de nuestra votación +marcamos la opción "Tally" en el desplegable de "Actions" y pulsamos nuevamente en el botón "Go". + +![Imagen 10: Tally](./resources/quickstart/09_tally.png) + +### 8. Visualización de resultado + +Una vez tenemos la votación cerrada y con el conteo de votos realizado, ya podemos visualizar el +resultado accediendo a la siguiente url: + + http://localhost:8000/visualizer/[id de la votación]/ + +![Imagen 11: Visualizer](./resources/quickstart/10_visualizer.png) + + Ejecutar con docker ------------------- @@ -290,3 +429,63 @@ A tener en cuenta: concurrentes, cuando pongamos más de 100, lo normal es que empiecen a fallar muchas peticiones. * Si hacemos las pruebas en local, donde tenemos activado el modo debug de Django, lo normal es que las peticiones tarden algo más y consigamos menos RPS (Peticiones por segundo). + +Poblar con datos iniciales +-------------------------- + +Para probar el correcto funcionamiento de nuestra aplicación de decide, hemos generado una serie de +datos iniciales. Para ello, hemos elaborado un archivo JSON con datos que Django usa para generar +varias votaciones y usuarios de manera automática. Este se ha dotado con el nombre de "populate.json" +y se ha colocado junto a "manage.py". Lo pasos a seguir son los comentados abajo. + +Para borrar posibles datos en base de datos generados por el usuario, se recomienda ejecutar: + + ./manage.py flush + +Tras esto, poblamos la base de datos con datos iniciales de la siguiente manera: + + ./manage.py loaddata populate.json + +Se ha creado un usuario staff con las credenciales: +* Usuario: admin +* Contraseña: admin + +Por otra parte, el resto de usuarios (3 restantes) siguen la siguiente secuencia: +* Usuario: usuario# +* Contraseña: practica# + +donde # es la sucesión desde el valor 1 hasta el 3. + +En cuanto a las votaciones, se ha creado una votación cerrada con su correspondiente conteo, +una votación abierta con la que podemos interactuar y una votación que no se ha iniciado, +cubriendo así todas las posibilidades. +Si se quieren añadir más casuística a la carga inicial, basta con editar el "populate.json" siguiendo +la misma estructura que los datos contenidos en el mismo. + +Cabe añadir que previo a ejecutar ambos comandos, deberemos haber activado nuestro entorno de +Python 3.9. + +El archivo "populate.json" se ha generado manualmente con ayuda de la documentación encontrada en +[el siguiente portal web](https://docs.djangoproject.com/en/4.1/howto/initial-data/). + +Versiones actuales +------------------ + +En las ultimas actualizaciones se han modificado las versiones usadas por la aplicación Decide. Las +versiones usadas actualmente se corresponden a las siguientes: + +* Django = 4.1 +* pycryptodome = 3.15.0 +* djangorestframework = 3.14.0 +* django-cors-headers = 3.13.0 +* requests = 2.28.1 +* django-filter = 22.1 +* psycopg2 = 2.9.4 +* coverage = 6.5.0 +* jsonnet = 0.18.0 +* django-nose = 1.4.6 +* django-rest-swagger = 2.2.0 +* Python = 3.9 +* Vue=3 +* Bootstrap=5.2 +* selenium = 4.7.2 \ No newline at end of file diff --git a/decide/local_settings.gactions.py b/decide/local_settings.gactions.py new file mode 100644 index 0000000000..96f66a6ec1 --- /dev/null +++ b/decide/local_settings.gactions.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', +] + +BASEURL = 'http://localhost:8000' +APIS = { + 'authentication': BASEURL, + 'base': BASEURL, + 'booth': BASEURL, + 'census': BASEURL, + 'mixnet': BASEURL, + 'postproc': BASEURL, + 'store': BASEURL, + 'visualizer': BASEURL, + 'voting': BASEURL, +} + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'decide', + 'USER': 'decide', + 'PASSWORD': 'decide', + 'HOST': 'localhost', + 'PORT': '5432', + } +} + +# number of bits for the key, all auths should use the same number of bits +KEYBITS = 256 \ No newline at end of file diff --git a/decide/populate.json b/decide/populate.json new file mode 100644 index 0000000000..a010d4ca08 --- /dev/null +++ b/decide/populate.json @@ -0,0 +1,334 @@ +[ + { + "model": "auth.user", + "pk": 1, + "fields": { + "password": "pbkdf2_sha256$390000$5Vs4Wxo6xExNepVJ7vEH6o$ic8ndYcgdVI1JYfqtf73mnnu6oORvKZXreZ6aEhQgCU=", + "last_login": "2022-12-05T16:54:46.872Z", + "is_superuser": true, + "username": "admin", + "first_name": "", + "last_name": "", + "email": "admin@us.es", + "is_staff": true, + "is_active": true, + "date_joined": "2022-12-05T16:46:52.327Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "auth.user", + "pk": 2, + "fields": { + "password": "pbkdf2_sha256$390000$TRyhDgLJhi472nqRgqkP1g$pa0AWuS2M0l+Zw8BWLp3DyYsS2ePbrYD5Ic2l7lffgA=", + "last_login": null, + "is_superuser": false, + "username": "usuario1", + "first_name": "", + "last_name": "", + "email": "usuario1@us.es", + "is_staff": false, + "is_active": true, + "date_joined": "2022-12-05T16:51:28.355Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "auth.user", + "pk": 3, + "fields": { + "password": "pbkdf2_sha256$390000$zlUj34jN8pF8thjns5JkEP$Xq12/nq+bN9TswtrIOtZ0b0ILpKF93xgQPULMS5IUKQ=", + "last_login": null, + "is_superuser": false, + "username": "usuario2", + "first_name": "", + "last_name": "", + "email": "usuario2@us.es", + "is_staff": false, + "is_active": true, + "date_joined": "2022-12-05T17:36:15Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "auth.user", + "pk": 4, + "fields": { + "password": "pbkdf2_sha256$390000$GTy0v8epQXqxsBREPYqFTi$lye9MLqogqqO4NV9AKa1HZirDAfias78qY3wspFz17E=", + "last_login": null, + "is_superuser": false, + "username": "usuario3", + "first_name": "", + "last_name": "", + "email": "usuario3@us.es", + "is_staff": false, + "is_active": true, + "date_joined": "2022-12-05T17:37:11Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "base.auth", + "pk": 1, + "fields": { + "name": "http://localhost:8000", + "url": "http://localhost:8000", + "me": true + } + }, + { + "model": "base.key", + "pk": 1, + "fields": { + "p": 109883471017864569645918015172159067242360269802667253011156810127807785366867, + "g": 24776979955957295205204151261134357034690028706661542118198014802831892169370, + "y": 32637752614663619239037090432850502343289685882448407844371052786557241027433, + "x": 8619689454571113869222063423322343544377868178573541609333922892928933117760 + } + }, + { + "model": "base.key", + "pk": 2, + "fields": { + "p": 109883471017864569645918015172159067242360269802667253011156810127807785366867, + "g": 24776979955957295205204151261134357034690028706661542118198014802831892169370, + "y": 32637752614663619239037090432850502343289685882448407844371052786557241027433, + "x": 0 + } + }, + { + "model": "base.key", + "pk": 3, + "fields": { + "p": 109883471017864569645918015172159067242360269802667253011156810127807785366867, + "g": 24776979955957295205204151261134357034690028706661542118198014802831892169370, + "y": 32637752614663619239037090432850502343289685882448407844371052786557241027433, + "x": 0 + } + }, + { + "model": "base.key", + "pk": 4, + "fields": { + "p": 98243201412911698972603992897386042105177539556172061978332951587709236339147, + "g": 43275361860011226358251183880523624115062355141918701877109993217308974473260, + "y": 55890678337865339826841839119843508548195970732238494503564396313665709131152, + "x": 1653211098643486635546378435533232512710501241071807966962280695213199255750 + } + }, + { + "model": "base.key", + "pk": 5, + "fields": { + "p": 98243201412911698972603992897386042105177539556172061978332951587709236339147, + "g": 43275361860011226358251183880523624115062355141918701877109993217308974473260, + "y": 55890678337865339826841839119843508548195970732238494503564396313665709131152, + "x": 0 + } + }, + { + "model": "base.key", + "pk": 6, + "fields": { + "p": 98243201412911698972603992897386042105177539556172061978332951587709236339147, + "g": 43275361860011226358251183880523624115062355141918701877109993217308974473260, + "y": 55890678337865339826841839119843508548195970732238494503564396313665709131152, + "x": 0 + } + }, + { + "model": "census.census", + "pk": 1, + "fields": { + "voting_id": 1, + "voter_id": 1 + } + }, + { + "model": "census.census", + "pk": 2, + "fields": { + "voting_id": 1, + "voter_id": 2 + } + }, + { + "model": "census.census", + "pk": 3, + "fields": { + "voting_id": 2, + "voter_id": 2 + } + }, + { + "model": "census.census", + "pk": 4, + "fields": { + "voting_id": 2, + "voter_id": 3 + } + }, + { + "model": "census.census", + "pk": 5, + "fields": { + "voting_id": 2, + "voter_id": 4 + } + }, + { + "model": "mixnet.mixnet", + "pk": 1, + "fields": { + "voting_id": 1, + "auth_position": 0, + "key": 1, + "pubkey": 2, + "auths": [ + 1 + ] + } + }, + { + "model": "mixnet.mixnet", + "pk": 2, + "fields": { + "voting_id": 2, + "auth_position": 0, + "key": 4, + "pubkey": 5, + "auths": [ + 1 + ] + } + }, + { + "model": "store.vote", + "pk": 1, + "fields": { + "voting_id": 1, + "voter_id": 1, + "a": 63609216536759901883541894431562835922923548875978047046133664201965024234070, + "b": 21967688903940695487820355618666519880558108913678774267402000410057120920087, + "voted": "2022-12-05T16:53:49.831Z" + } + }, + { + "model": "store.vote", + "pk": 2, + "fields": { + "voting_id": 1, + "voter_id": 2, + "a": 87888882234667164738578069131969758903291075080869139979741816145660285281368, + "b": 73472716662728168145894394350551157571572661852473137154656883892758069415177, + "voted": "2022-12-05T16:54:25.288Z" + } + }, + { + "model": "store.vote", + "pk": 3, + "fields": { + "voting_id": 2, + "voter_id": 3, + "a": 69088252336401053993390820381906007104975250233782275241220593284696983602419, + "b": 52716768155559180121306184431860940242828081210732825604528334680523087589244, + "voted": "2022-12-05T17:41:20.811Z" + } + }, + { + "model": "voting.question", + "pk": 1, + "fields": { + "desc": "¿Es esto una votación correcta?" + } + }, + { + "model": "voting.questionoption", + "pk": 1, + "fields": { + "question": 1, + "number": 1, + "option": "Sí" + } + }, + { + "model": "voting.questionoption", + "pk": 2, + "fields": { + "question": 1, + "number": 2, + "option": "No" + } + }, + { + "model": "voting.voting", + "pk": 1, + "fields": { + "name": "Votación cerrada", + "desc": "Esta es la descripción de la votación cerrada", + "question": 1, + "start_date": "2022-12-05T16:50:39.644Z", + "end_date": "2022-12-05T16:54:59.111Z", + "pub_key": 3, + "tally": [ + 1, + 1 + ], + "postproc": [ + { + "votes": 2, + "number": 1, + "option": "Sí", + "postproc": 2 + }, + { + "votes": 0, + "number": 2, + "option": "No", + "postproc": 0 + } + ], + "auths": [ + 1 + ] + } + }, + { + "model": "voting.voting", + "pk": 2, + "fields": { + "name": "Votación abierta", + "desc": "Esta es la descripción de una votación abierta", + "question": 1, + "start_date": "2022-12-05T17:38:31.014Z", + "end_date": null, + "pub_key": 6, + "tally": null, + "postproc": null, + "auths": [ + 1 + ] + } + }, + { + "model": "voting.voting", + "pk": 3, + "fields": { + "name": "Votación creada", + "desc": "Esta es la descripción de una votación creada (no abierta)", + "question": 1, + "start_date": null, + "end_date": null, + "pub_key": null, + "tally": null, + "postproc": null, + "auths": [ + 1 + ] + } + } +] \ No newline at end of file diff --git a/django.yml b/django.yml new file mode 100644 index 0000000000..713e07d369 --- /dev/null +++ b/django.yml @@ -0,0 +1,52 @@ +name: Python application + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:10.8 + env: + POSTGRES_USER: decide + POSTGRES_PASSWORD: decide + POSTGRES_DB: decide + ports: + - 5432:5432 + # needed because the postgres container does not provide a healthcheck + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + steps: + - uses: actions/checkout@v1 + - name: Set up Python 3.8 + uses: actions/setup-python@v1 + with: + python-version: 3.8 + - name: psycopg2 prerequisites + run: sudo apt-get install libpq-dev + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install codacy-coverage + - name: Run migrations + run: cd decide;python manage.py migrate + - name: Run tests + run: cd decide;coverage run --branch --source=. ./manage.py test census --keepdb; coverage xml; + - name: Codacy Coverage Reporter + uses: codacy/codacy-coverage-reporter-action@v1.1.0 + with: + project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + coverage-reports: decide/coverage.xml + deploy: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: akhileshns/heroku-deploy@v3.12.12 # This is the action + with: + heroku_api_key: ${{secrets.HEROKU_API_KEY}} + heroku_app_name: " <>" + heroku_email: " <>" diff --git a/docker/Dockerfile b/docker/Dockerfile index 032eed28e2..a5109ed51c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,5 @@ from python:alpine +# from python:3.10-alpine RUN apk add --no-cache git postgresql-dev gcc libc-dev RUN apk add --no-cache gcc g++ make libffi-dev python3-dev build-base @@ -11,6 +12,7 @@ RUN pip install ipython WORKDIR /app RUN git clone https://github.com/wadobo/decide.git . +# RUN git clone https://github.com/part-pantoja/decide.git . RUN pip install -r requirements.txt WORKDIR /app/decide @@ -18,6 +20,6 @@ WORKDIR /app/decide # local settings.py ADD docker-settings.py /app/decide/local_settings.py -RUN ./manage.py collectstatic +RUN ./manage.py runserver #CMD ["gunicorn", "-w 5", "decide.wsgi", "--timeout=500", "-b 0.0.0.0:5000"] diff --git a/docker/docker-settings.py b/docker/docker-settings.py index 01e643d936..fb0e6b5c60 100644 --- a/docker/docker-settings.py +++ b/docker/docker-settings.py @@ -5,6 +5,7 @@ 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', + 'PASSWORD':'', 'HOST': 'db', 'PORT': 5432, } @@ -14,6 +15,8 @@ MEDIA_ROOT = '/app/static/media/' ALLOWED_HOSTS = ['*'] +CSRF_TRUSTED_ORIGINS = ['http://10.5.0.1:8000'] + # Modules in use, commented modules that you won't use MODULES = [ 'authentication', diff --git a/requirements.txt b/requirements.txt index d5860a1eb4..dd639ebb17 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,8 +4,10 @@ djangorestframework==3.7.7 django-cors-headers==2.1.0 requests==2.18.4 django-filter==1.1.0 -psycopg2==2.7.4 +psycopg2-binary==2.8.3 django-rest-swagger==2.2.0 coverage==4.5.2 django-nose==1.4.6 jsonnet==0.12.1 +gunicorn +django-heroku diff --git a/templateCommit.txt b/templateCommit.txt new file mode 100644 index 0000000000..8baf298382 --- /dev/null +++ b/templateCommit.txt @@ -0,0 +1,3 @@ +:
+ + \ No newline at end of file