From daf5dc3f923d57ff3b388bc0439a5c654dbbdaa0 Mon Sep 17 00:00:00 2001 From: Patricio Kumagae <pkumagae@boletinoficial.gob.ar> Date: Mon, 29 Apr 2019 15:21:01 -0300 Subject: [PATCH] =?UTF-8?q?Actualizaci=C3=B3n=20desde=20gitlab.bora.local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Poppins/local_settings_preprod.py | 11 +- .../django_registration/admin_email_body.txt | 9 - .../registration_form.html | 202 +++++++++++++++--- .../django_registration/update_user.html | 10 +- frontend/views.py | 66 +++++- locale/en/LC_MESSAGES/django.mo | Bin 474 -> 474 bytes locale/en/LC_MESSAGES/django.po | 50 +++-- locale/es/LC_MESSAGES/django.mo | Bin 3195 -> 3408 bytes locale/es/LC_MESSAGES/django.po | 52 +++-- 9 files changed, 302 insertions(+), 98 deletions(-) diff --git a/Poppins/local_settings_preprod.py b/Poppins/local_settings_preprod.py index e311bfc..ce3e8f1 100644 --- a/Poppins/local_settings_preprod.py +++ b/Poppins/local_settings_preprod.py @@ -25,12 +25,13 @@ DEFAULT_FROM_EMAIL = 'no-reply@bfa.ar' ADMIN_EMAIL = 'no-reply@bfa.ar' # NODO DE BLOACJAJEICHAIN -NODE_URL = 'http://10.23.10.73:54450' # salberchain +NODE_URL = 'http://10.23.10.71:8501' # salberchain + +DISTILLERY_ADDRESS = '0x9Da2aC818d39f4342f67eC94F86865A34b642342' # distillery + +DISTRIBUTOR_ACCOUNT = '0xc9cec0B3fbb502B2eF4d03eBf6a1A612CBdE53E3' # cuenta con mucho ether, vive en el 72 +# 0x21ea59FC5cE54a827E20BC9b736FeeD8F9C880Ff -# CFG BLOCKCHANGE -DISTILLERY_ADDRESS = '0x822c2b518dCfEE69d435E0C5F2e6d196FcC8320E' # distillery -DISTRIBUTOR_ACCOUNT = '0xA9cAc6C2EF4909A05eF24A12Ecadf9E541B5995F' # cuenta con mucho ether con su clave privada en -# el 10.23.10.73 # cuentas para pruebas: 0xd57c1f52ff4513c721bd22ccbee55b7cef440b5c y 0x6664e892a36e74e1e618b9bfb25caa0f18b311a4 # passphrase prueba para ambas cuentas diff --git a/frontend/templates/django_registration/admin_email_body.txt b/frontend/templates/django_registration/admin_email_body.txt index 01bd47a..64b31be 100644 --- a/frontend/templates/django_registration/admin_email_body.txt +++ b/frontend/templates/django_registration/admin_email_body.txt @@ -1,12 +1,3 @@ -{# -Copyright 2019 de la Dirección General de Sistemas Informáticos – SecretarÃa Legal y Técnica - Nación. - -This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/ -#} {% autoescape off %} Se ha registrado un nuevo usuario en la aplicación Poppins Usuario: {{ name }} diff --git a/frontend/templates/django_registration/registration_form.html b/frontend/templates/django_registration/registration_form.html index a38b61b..d9c9d95 100644 --- a/frontend/templates/django_registration/registration_form.html +++ b/frontend/templates/django_registration/registration_form.html @@ -15,12 +15,17 @@ You should have received a copy of the GNU General Public License along with thi {% bootstrap_javascript %} {% bootstrap_messages %} +{% block css %} + <link rel="stylesheet" type="text/css" media="screen" href="{% static 'frontend/css/tyc.css' %}" /> +{% endblock %} + {% block title %} {% trans "registro_de_usuarios" %} {% endblock %} {% block content %} {% include 'topnav-deslogueado.html' %} + <script src="tyc.css"></script> <main class="container" id="main-content"> <div class="row"> <section> @@ -72,14 +77,11 @@ You should have received a copy of the GNU General Public License along with thi <p>Utilizá ocho caracteres como mÃnimo con una combinación de letras, números y sÃmbolos.</p> </div> - <div class="form-group form-group-lg col-sm-12"> - <div> - <label class="control-label" for="terms">PolÃtica de Uso</label> - </div> - <div> - <input type="checkbox" name="terms" id="terms" placeholder="PolÃtica de Uso" required style="float: left; margin-top: 8px;"> - <label class="font_small" for="terms" style="font-weight: 100">He leÃdo y acepto la <a style="cursor: pointer" data-toggle="modal" data-target="#terms-modal">polÃtica de uso</a></label> - </div> + <div class="col-sm-12"> + <input class="" type="checkbox" id="terms" name="terms" required="required" + aria-required="true" /> + <label for="terms">Acepto las <a href="#terms-modal" data-toggle="modal" + data-target="#terms-modal">polÃticas de uso de BFA</a></label> </div> <script src='https://www.google.com/recaptcha/api.js'></script> @@ -94,30 +96,176 @@ You should have received a copy of the GNU General Public License along with thi </form> </section> </div> - <div class="modal" tabindex="-1" role="dialog" id="terms-modal"> - <div class="modal-dialog" role="document" style="width: 80%;"> + <div class="modal fade tyc" tabindex="-1" role="dialog" id="terms-modal"> + <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <div class="modal-header"> - <h4 class="modal-title">PolÃtica de uso</h4> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"> - <span aria-hidden="true">×</span> - </button> + <button type="button" class="close" data-dismiss="modal" aria-label="Cerrar"><span + aria-hidden="true">×</span></button> + <h1 class="modal-title">PolÃticas de Uso de BFA</h1> </div> <div class="modal-body"> - <p>What is Lorem Ipsum? -Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. - -Why do we use it? -It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). - - -Where does it come from? -Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. - - </p> + <p>Las presentes Políticas de Uso establecen los principios y normas que rigen el uso de la plataforma multiservicios de alcance federal implementada a través de una infraestructura blockchain denominada Blockchain Federal Argentina (BFA), por parte de los Usuarios, fueran o no Parte del CONTRATO DE COLABORACIÓN PÚBLICO-PRIVADA BLOCKCHAIN FEDERAL. </p> + <div class="indice"> + <h2 id="1">Contenido</h2> + <ul> + <li> + <a href="#1">1. La Red</a> + <ul> + <li><a href="#1.1">1.1 TecnologÃa</a></li> + <li><a href="#1.2">1.2 MetodologÃa</a></li> + <li> + <a href="#1.3">1.3 Nodos</a> + <ul> + <li><a href="#1.3.1">a. Selladores</a></li> + <li><a href="#1.3.2">b. Gateway</a></li> + <li><a href="#1.3.3">c. Bootnodes</a></li> + <li><a href="#1.3.4">d. Transaccionales</a></li> + <li><a href="#1.3.5">e. Verificadores</a></li> + <li><a href="#1.3.6">f. Archivadores</a></li> + <li><a href="#1.3.7">g. Nodos combinados</a></li> + </ul> + </li> + <li><a href="#1.4">1.4 Suspensión y remoción de nodos/cuentas</a></li> + <li><a href="#1.5">1.5 Fijación de Hora correcta</a></li> + <li><a href="#1.6">1.6 Funcionamiento de la DestilerÃa de Ether</a></li> + <li><a href="#1.7">1.7 Código abierto</a></li> + </ul> + </li> + <li> + <a href="#2">2. Usuarios</a> + <ul> + <li><a href="#2.1">2.1 Registro de Usuarios</a></li> + <li><a href="#2.2">2.2 Responsabilidad de los Usuarios</a></li> + <li><a href="#2.3">2.3 Reglas de funcionamiento de Cuentas Registradas</a></li> + <li><a href="#2.4">2.4 Reglas de funcionamiento de Smart Contracts</a></li> + </ul> + </li> + <li><a href="#3">3. Limitación de responsabilidad de la BFA</a></li> + </ul> + </div> + <div class="content"> + <h1 id="1">1. La Red</h1> + <h2 id="1.1">1.1 Tecnología</h2> + <p>BFA utiliza el software libre para blockchain denominado Ethereum.</p> + <h2 id="1.2">1.2 Metodología </h2> + <p>BFA se basa en el protocolo de consenso Prueba de Autoridad (<i>Proof of Authority</i>) para establecer los nodos que están autorizados a agregar bloques a la cadena.</p> + <h2 id="1.3">1.3 Nodos</h2> + <h4 id="1.3.1">a. Selladores</h4> + <h5>Descripción</h5> + <p>Los nodos selladores conforman el <i>core</i> de la red, la estructura central de la red confiable de BFA, y son los <i>únicos</i> que participan en el protocolo de consenso. En ese sentido, tienen cuentas validadas específicamente para agregar bloques a la cadena. No generan transacciones.</p> + <h5>Función</h5> + <p>La <i>única</i> función de los nodos selladores es agregar bloques de transacciones a la blockchain a través del proceso de sellado.</p> + <h5>Reglas de funcionamiento</h5> + <p>Sólo pueden ser operados por las Partes de BFA siguiendo los parámetros definidos para su operación y son monitoreados por los Centros de Monitoreo (NOCs) públicos. </p> + <p>Los selladores rechazarán o descartarán conexiones de otros nodos en la red. Solo se contactarán con nodos selladores o <i>gateways</i> creando así una red eficiente y confiable.</p> + <p>Se comunican entre sí en forma <i>mesh:</i></p> + <ul> + <li>no necesariamente todos con todos</li> + <li>los nodos selladores deben poder contactarse con los demás selladores y <i>gateway</i></li> + </ul> + <h4 id="1.3.2">b. Gateway </h4> + <h5>Descripción</h5> + <p>Los nodos <i>gateway</i> conforman el borde del <i>core</i>. Son puestos entre la red confiable y el resto de la red blockchain y son operados por las Partes de BFA. No generan transacciones. </p> + <h5>Función</h5> + <p>La única función de los nodos <i>gateway</i> es mediar la conexión entre los nodos selladores y los demás de la red.</p> + <h5>Reglas de funcionamiento</h5> + <p>Sólo pueden ser operados por las Partes de BFA siguiendo los parámetros definidos para la operación de nodos <i>gateway.</i></p> + <p>Se comunican con cualquier nodo de la red (tanto selladores como de otro tipo) y son monitoreados por los NOCs públicos. </p> + <h4 id="1.3.3">c. Bootnodes</h4> + <h5>Descripción</h5> + <p>BFA provee un pequeño conjunto de <i>bootnodes</i> que pueden ser utilizados por todos los nodos de la red, excepto los selladores. No tienen cuentas asociadas a ellos y no generan transacciones.</p> + <h5>Función</h5> + <p>La función de los <i>bootnodes</i> es ayudar a todos los nodos a encontrar los demás nodos en la red.</p> + <h5>Reglas de funcionamiento</h5> + <p>Se comunican con cualquier nodo de la red excepto los selladores. Los <i>bootnodes</i> operados por BFA no tienen cuentas asociadas a ellos y utilizan direcciones IPv4 e IPv6 fijas, públicas y conocidas.</p> + <h4 id="1.3.4">d. Transaccionales</h4> + <h5>Descripción</h5> + <p>Los nodos transaccionales (<i>transaction nodes</i>) son aquellos que pueden enviar transacciones para que luego sean procesadas (agregadas a la blockchain) por los nodos selladores. Son los primeros nodos en ver una transacción firmada por una cuenta. Normalmente ésta está relacionada con el operador del nodo.</p> + <h5>Función</h5> + <p>La función de los nodos transaccionales es inyectar transacciones en la red.</p> + <h5>Reglas de funcionamiento</h5> + <p>Los nodos transaccionales se conectan entre sí y con cualquier nodo de la red (excepto los selladores) a voluntad. </p> + <p>Pueden ser operados por cualquier persona o institución pero, para que las transacciones sean aceptadas, DEBEN ser enviadas por una cuenta registrada (no necesariamente deben ser Parte pero sí Usuario de BFA). Generalmente son ejecutados por operadores de servicios que utilizan la blockchain (los Usuarios que implementan aplicaciones).</p> + <p>Necesitan firmar un acuerdo con BFA para recibir, sin costo, Ether, para utilizar como el combustible necesario para enviar transacciones a la blockchain. NO DEBEN enviar Ether a otras cuentas (incluyendo contratos). Ver más sobre Ether en <a href="#1.6">1.6 Funcionamiento de la Destilería de Ether</a>.</p> + <h4 id="1.3.5">e. Verificadores</h4> + <h5>Descripción</h5> + <p>Los nodos verificadores son aquellos que pueden ver el contenido completo de la blockchain y comprobar su validez. No generan transacciones.</p> + <h5>Función</h5> + <p>Se utilizan para leer y verificar el contenido de la blockchain y además pueden llamar a funciones <i>read-only</i> de los <i>smart contracts</i>.</p> + <h5>Reglas de funcionamiento</h5> + <p>Los nodos verificadores pueden ser operados por cualquier usuario, sin necesidad de autorización de BFA. Estos se comunican a cualquier nodo de la red excepto los selladores. Pueden ser operados por cualquiera, inclusive con cuentas no registradas.</p> + <h4 id="1.3.6">f. Archivadores</h4> + <h5>Descripción</h5> + <p>Los nodos archivadores son aquellos que mantienen un archivo histórico de todos los bloques de la red. Normalmente no generan transacciones (aunque podría utilizarse de archivador un nodo transaccional).</p> + <h5>Función</h5> + <p>La función del nodo archivador es mantener una copia completa de la blockchain.</p> + <h5>Reglas de funcionamiento</h5> + <p>BFA provee nodos archivadores públicos que tienen conectividad a Internet vía IPv4 e IPv6. Estos nodos no requieren cuentas validadas asociadas a ellos.</p> + <p>Cualquier persona u organización que no sea Parte de BFA puede elegir proveer el servicio de archivadores independientemente de BFA. Se comunican con cualquier nodo de la red excepto los selladores.</p> + <h4 id="1.3.7">g. Nodos combinados</h4> + <p>Es posible combinar la operación de distintos tipos de nodos. Por ejemplo, un nodo transaccional podría funcionar también como archivador. En principio, la función de verificador la realizan todos los nodos excepto los <i>bootnodes</i>.</p> + <h2 id="1.4">1.4 Suspensión y remoción de nodos/cuentas</h2> + <p>Los nodos (y cuentas asociadas) que no cumplan con las presentes <b>Políticas de Uso</b> podrán ser suspendidos en su operación y se deberán determinar las causas del incumplimiento. Si ocurrió por un problema de seguridad o producto de un error de software o configuración, se deberá resolver el problema y luego reactivar el nodo/cuenta. </p> + <p>En caso de detectarse un comportamiento malicioso, se deberá cumplir con el procedimiento de suspensión y remoción de nodos transaccionales definido por el Consejo de Administración (CdA) para remover de forma permanente un nodo/cuenta, eventualmente cancelando la membresía.</p> + <h2 id="1.5">1.5 Fijación de Hora correcta</h2> + <p>Los bloques tienen un sello de tiempo <i>(timestamp)</i> embebido en ellos. Los selladores DEBEN sincronizar sus relojes con la hora UTC utilizando el protocolo NTP.</p> + <p>Los nodos transaccionales DEBERÍAN asegurarse de que sus relojes están sincronizados. Dependiendo de los casos de uso, los nodos <i>read-only</i> también DEBERÍAN asegurarse de que sus relojes están sincronizados.</p> + <h2 id="1.6">1.6 Funcionamiento de la Destilería de Ether</h2> + <p>BFA opera una Destilería que, periódicamente, envía Ether a los nodos transaccionales, de modo que puedan continuar con las operaciones normales. </p> + <p>La Destilería de Ether puede implementar métodos para detectar incumplimiento, a las Políticas de Uso. Y ante la posibilidad de un abuso, implicará investigar el comportamiento del nodo en cuestión y resolver su situación y podrá detener o minimizar transferencias subsecuentes de Ether a los nodos transaccionales. </p> + <p>BFA puede ajustar administrativamente la configuración por nodo/cuenta transaccional y organización.</p> + <p>La Destilería seguirá el procedimiento para la asignación de Ether definido por el CdA.</p> + <h2 id="1.7">1.7 Código abierto</h2> + <p>El software propuesto, así como los desarrollos que pudieran realizarse y ponerse a disposición de los Usuarios, se basa en principios y reglas jurídicas del software libre y de código abierto (<i>open source software</i>).</p> + <p>Por lo anterior, no son necesarios nuevos acuerdos con el creador o emisor del código fuente para reutilizar la licencia original del mismo. No existe relación comercial entre el creador del software y los Usuarios. Ningún Usuario puede reclamar daños o perjuicios a sus contrapartes que les suministren servicios o provean bienes digitales, sobre la base de deficiencias, fallos o defectos del software o de los sistemas operativos empleados en régimen abierto, libre u <i>open source</i>.</p> + <h1 id="2">2. Usuarios</h1> + <p>BFA podrá ser utilizada por cualquier interesado con fines económicos, de gestión, científicos, de experimentación o de investigación, de conformidad a las reglas y principios establecidos en el Contrato, el Reglamento Interno y en las Políticas de Uso de la plataforma.</p> + <p>No existe vínculo contractual alguno entre BFA y los Usuarios finales de la blockchain. </p> + <p>Dado que para enviar transacciones que se puedan agregar a la blockchain es necesario contar con Ether, los Usuarios DEBEN registrarse y aceptar el Reglamento Interno y las presentes Políticas de Uso.</p> + <p>Una vez registrado, un Usuario podrá informar las cuentas que utilizará y solicitar Ether para las mismas.</p> + <h2 id="2.1">2.1 Registro de Usuarios</h2> + <p>Cualquier persona puede registrarse como Usuario de BFA utilizando la aplicación de registro de BFA para lo cual sólo debe validar que posee control sobre la cuenta de correo electrónico que utilice para el registro.</p> + <p>Cada usuario registrado podrá cargar una o más cuentas Ethereum para utilizar en la plataforma BFA (ver <a href="#2.4">2.4 Reglas de funcionamiento de cuentas registradas</a>).</p> + <p>Asimismo, en forma optativa, los Usuarios podrán validar su identidad a través de la plataforma de autenticación externa <a target="_blank" rel="nofollow" href="https://autenticar.gob.ar/">Autenticar (PAEC)</a>.</p> + <h2 id="2.2">2.2 Responsabilidad de los Usuarios </h2> + <p>Todos los Usuarios finales que por cualquier concepto empleen la plataforma de BFA, por sí mismos o a través de terceros, aceptan voluntariamente que el uso de la misma tiene lugar bajo su única y exclusiva responsabilidad, y se comprometen a cumplir el Reglamento Interno, las Políticas de Uso y demás normativas de BFA en todo momento y en cualquier circunstancia de uso de BFA. </p> + <p>Quienes usen la plataforma de BFA, sean Parte o no, para sustentar sus negocios, lo harán a su costa, asumiendo total responsabilidad sobre el uso de aplicaciones y el manejo de datos personales que corran en las aplicaciones, soportando sus riesgos inherentes y sus implicaciones legales, que no se trasladan a BFA ni a ninguna de las demás Partes que la conforman.</p> + <p>Asimismo, los Usuarios se comprometen a utilizar la plataforma de BFA de conformidad con la ley, así como con la moral y buenas costumbres generalmente aceptadas y el orden público.</p> + <p>El Usuario se obliga a abstenerse de utilizarla con fines o efectos ilícitos, contrarios a lo establecido en las presentes Políticas de Uso, lesivos de los derechos e intereses de terceros, o que de cualquier forma puedan dañar o inutilizar la plataforma de BFA o impedir la normal utilización de la misma por parte de los Usuarios.</p> + <h2 id="2.3">2.3 Reglas de funcionamiento de Cuentas Registradas</h2> + <p>Las transacciones DEBEN ser enviadas a la plataforma BFA desde los nodos transaccionales utilizando un <i>gasPrice</i> uniforme que definirá el CdA de modo tal que los nodos selladores no den preferencia a unas transacciones sobre otras.</p> + <p>El CdA establecerá la cantidad de Ether que se asigna periódicamente a cada cuenta estableciendo un valor por defecto y permitiendo incrementarlo en base a solicitudes de los Usuarios y al buen comportamiento de los mismos en relación al Reglamento Interno y a las Políticas de Uso.</p> + <p>Ante una violación (voluntaria o involuntaria) del Reglamento Interno o las Políticas de Uso por parte de una cuenta asignada a un usuario, el CdA podrá determinar la reducción de la cantidad de Ether otorgado a esta cuenta hasta que se analice conjuntamente con el Usuario el motivo y el mismo se corrija.</p> + <h2 id="2.4">2.4 Reglas de funcionamiento de Smart Contracts </h2> + <p>El desarrollo y uso de los <i>smart contracts</i> quedará bajo la exclusiva responsabilidad y esfera de intimidad del Usuario que los despliegue y los Usuarios que lo invoquen. BFA no asumirá responsabilidad alguna por los daños que pueda causar dicha vinculación.</p> + <h4>Almacenamiento <i>off chain</i></h4> + <p>Información primaria es la información en sí. En la plataforma blockchain de BFA no se almacena información primaria, sólo se guardan <i>hashes</i> de esa información y no nombres, imágenes, números de cuenta, documentos u otros datos (sean privados o no).</p> + <p>Los Usuarios y aplicaciones son responsables de resguardar esos documentos de la manera que consideren más adecuada pero <i>fuera</i> de la cadena de bloques que conforma la plataforma BFA. Al estar los digestos criptográficos sellados en la blockchain se puede mostrar que los mismos no fueron modificados luego de que ese hash se haya almacenado en la cadena de bloques.</p> + <p>Se apunta, por un lado, a utilizar eficientemente los bloques y, por el otro, a minimizar el riesgo de que información que no debería ser pública (por el motivo que fuera) aparezca en la cadena, teniendo en cuenta que, una vez que un dato es ingresado en la cadena, no puede ser eliminado posteriormente.</p> + <p>Las responsabilidades sobre los datos y su protección (respecto de la Ley de Protección de Datos Personales, la GDPR, etc.) recaen sobre quien opere sobre esos datos y no sobre BFA.</p> + <p>Cada aplicación, si lo requiere, DEBERÁ almacenar la información primaria <i>off-chain</i>, ya sea en una base de datos tradicional o, si se prefiere/requiere, en otro tipo de repositorio, como por ejemplo un IPFS público o privado.</p> + <p>La responsabilidad sobre la protección de ese repositorio recae sobre el operador (u operadores) de la aplicación y no sobre BFA.</p> + <h4>Eficiencia de los <i>smart contracts</i></h4> + <p>Dado que el Ether que se utiliza para invocar a los <i>smart contracts</i> no tiene costo para los Usuarios, DEBE tenerse especial cuidado en el desarrollo de los <i>smart contracts </i>para que sean eficientes y no consuman muchos recursos. Los <i>smart contracts</i> NO PODRÁN transferir Ether a otras cuentas ya que la única función del Ether es ser utilizado como gas y el mismo se distribuye exclusivamente desde la Destilería.</p> + <p>El CdA puede solicitar el análisis de aparentes ineficiencias detectadas en base al consumo de Ether y actuar en consecuencia (ver <a href="#2.3">2.3 Reglas de funcionamiento de cuentas registradas</a>).</p> + <h1 id="3">3. Limitación de responsabilidades de BFA</h1> + <ul> + <li>BFA no es responsable de los <b>contenidos de las transacciones </b>incorporadas en la blockchain.</li> + <li>BFA certifica exclusivamente que se han recibido transacciones correctamente firmadas, <b>no certifica la exactitud ni veracidad </b>del contenido de los datos encontrados en la blockchain. </li> + <li>BFA no tiene jurisdicción ni responsabilidad sobre el contenido de la blockchain. La responsabilidad sobre los documentos digitales certificados por el Hash de BFA, es pura y exclusiva del Usuario y/o Parte que la gestiona, dentro de su esfera de intimidad.</li> + <li>El hecho de que BFA otorgue Ether para ser utilizado como combustible a terceros para crear transacciones no significa que BFA apruebe ni sea responsable del contenido de las mismas.</li> + <li>BFA no certifica la <b>identidad </b>de los titulares de las cuentas. La firma electrónica simplemente atestigua que las transacciones fueron firmadas correctamente por una cuenta determinada.</li> + <li>BFA no garantiza que las <b>transacciones sean finalizadas.</b> Existe la posibilidad que una transacción no quede incorporada en la cadena de bloques (Transacción no exitosa).</li> + <li>BFA no será responsable de los <b>daños directos o indirectos ocasionados a Usuarios finales</b> como consecuencia de operaciones, transacciones o actividades desarrolladas por otros Usuarios de BFA.</li> + <li>No existe un contrato o relación jurídica entre los Usuarios y BFA, sin perjuicio de las relaciones que puedan presentarse entre una Parte y un Usuario. Por lo tanto, BFA no será responsable ante los Usuarios finales por interrupciones en su servicio, fallas operativas, caídas del sistema o fallas de cualquier elemento de software o hardware operado por BFA, independientemente de la causa de dicha falla o caída.</li> + <li>El Usuario hace uso del software libre propuesto por BFA, así como los desarrollos que pudieran realizarse bajo su exclusiva responsabilidad conforme a los principios del uso de software libre y sistemas informáticos en régimen abierto. Ningún Usuario puede reclamar daños o perjuicios a sus contrapartes que les suministren servicios o provean bienes digitales, sobre la base de deficiencias, fallos o defectos del software o de los sistemas operativos empleados en régimen abierto, libre u <em>open source</em>.</li> + <li>Los nodos de BFA no responderán frente a otros nodos de la plataforma ante interrupciones operativas, fallas, pérdidas o daños ocasionados directa o indirectamente que se originen por el incumplimiento de las reglas de funcionamiento, políticas de uso y procedimientos establecidos. En caso de detectarse un comportamiento malicioso, se deberá cumplir con el procedimiento de suspensión y remoción de nodos definido por el CdA para eliminar de forma permanente un nodo/cuenta.</li> + </ul> + </div> </div> <div class="modal-footer"> - <button type="button" class="btn btn-primary" data-dismiss="modal" >Cerrar</button> + <button type="button" class="btn btn-default btn-lg" data-dismiss="modal">Cerrar</button> </div> </div> </div> @@ -178,7 +326,7 @@ Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots required: "Ingresá una contraseña", minlength: "La contraseña debe tener al menos 8 caracteres" }, - terms: "Debes aceptar la polÃtica de uso" + terms: "Debés aceptar las polÃticas de uso de BFA" }, rules:{ diff --git a/frontend/templates/django_registration/update_user.html b/frontend/templates/django_registration/update_user.html index 695a82b..eb92c40 100644 --- a/frontend/templates/django_registration/update_user.html +++ b/frontend/templates/django_registration/update_user.html @@ -47,26 +47,26 @@ </div> <div class="form-group form-group-lg col-sm-12"> <label for="email" class="form-required">Correo electrónico</label> - <input class="form-control" type="text" id="email" name="email" value="{{ user.email }}" size="60" maxlength="255" required="required" aria-required="true"> + <input class="form-control" type="text" id="email" name="email" value="{{ user.email }}" size="60" maxlength="255" required="required" aria-required="true" disabled> </div> <div class="form-group form-group-lg col-sm-12"> <a href="/change_password/">Cambiar contraseña</a> </div> <div class="form-group form-group-lg col-sm-12"> <label for="cuit">CUIT</label> - <input class="form-control" type="text" id="cuit" name="cuit" value="{{ custom_user.cuit|default_if_none:"" }}" size="60" maxlength="13"> + <input class="form-control" type="text" id="cuit" name="cuit" value="{{ custom_user.cuit|default_if_none:"" }}" size="60" maxlength="13" disabled> </div> <div class="form-group form-group-lg col-sm-12"> <label for="org">Organización</label> - <input class="form-control" type="text" id="organization" name="organization" value="{{ custom_user.organization|default_if_none:"" }}" size="60" maxlength="255"> + <input class="form-control" type="text" id="organization" name="organization" value="{{ custom_user.organization|default_if_none:"" }}" size="60" maxlength="255" disabled> </div> <div class="form-group form-group-lg col-sm-12"> <label for="rol">Rol</label> - <input class="form-control" type="text" id="rol" name="rol" value="{{ custom_user.rol|default_if_none:"" }}" size="60" maxlength="255"> + <input class="form-control" type="text" id="rol" name="rol" value="{{ custom_user.rol|default_if_none:"" }}" size="60" maxlength="255" disabled> </div> <div class="form-group form-group-lg col-sm-12"> <label for="sector">Sector</label> - <select name="section" id="section" class="form-control"> + <select name="section" id="section" class="form-control" disabled> <option value="">Seleccione un sector</option> {% for section in sections %} <option value="{{ section.id }}" {% if section.id == custom_user.section_id %}selected="selected"{% endif %}>{{ section.name }}</option> diff --git a/frontend/views.py b/frontend/views.py index e94108c..6ff5f89 100644 --- a/frontend/views.py +++ b/frontend/views.py @@ -17,9 +17,9 @@ from django.http import HttpResponseRedirect from django.http.response import JsonResponse from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.views import LoginView -from django.contrib.auth.models import User from django.contrib.auth.decorators import login_required - +from django.core.validators import validate_email +from django.core.exceptions import ValidationError from django.contrib import messages from django.utils.translation import ugettext as _ from django.db import transaction, IntegrityError @@ -334,8 +334,6 @@ class CaptchaLoginView(LoginView): form = self.get_form() if form.is_valid(): - return self.form_valid(form) - ''' Begin reCAPTCHA validation ''' recaptcha_response = request.POST.get('g-recaptcha-response') data = { @@ -394,20 +392,41 @@ def update_user(request): else: try: + + email_changed = False + with transaction.atomic(): user.first_name = request.POST['first_name'] user.last_name = request.POST['last_name'] - user.email = request.POST['email'] + # Tarea #18822 - [BFA-registro] Campo mail - Readonly - INICIO + #validate_email(request.POST['email']) + # Tarea #18822 - [BFA-registro] Campo mail - Readonly - FIN + + # Cambio para tener que validar la cuenta cuando se cambia el mail. Queda para el futuro + # if user.email != request.POST['email']: + # user.is_active = False + # send_email_changed_email(request, request.POST['email']) + # email_changed = True + # Fin + + # Tarea #18822 - [BFA-registro] Campo mail - Readonly - INICIO + #user.email = request.POST['email'] + # Tarea #18822 - [BFA-registro] Campo mail - Readonly - FIN user.save() - custom_user.cuit = request.POST['cuit'] - custom_user.organization = request.POST['organization'] - custom_user.rol = request.POST['rol'] - custom_user.section_id = request.POST['section'] - custom_user.save() + # Tarea #18590 - [BFA-registro] bloquear edición de campos en front-end - INICIO + # + # custom_user.cuit = request.POST['cuit'] + # custom_user.organization = request.POST['organization'] + # custom_user.rol = request.POST['rol'] + # custom_user.section_id = request.POST['section'] + # custom_user.save() + # Tarea #18590 - [BFA-registro] bloquear edición de campos en front-end - FIN messages.success(request, _('user_updated')) + except ValidationError as e: + messages.error(request, str(e.messages[0]), extra_tags='danger') except Exception as e: messages.error(request, _('user_update_error'), extra_tags='danger') client.captureException() @@ -416,6 +435,33 @@ def update_user(request): return HttpResponseRedirect('/mis_datos/') +def send_email_changed_email(request, new_email): + + try: + r = RegistrationView() + activation_key = r.get_activation_key(request.user) + + context = {} + + context['user'] = request.user + context['activation_key'] = activation_key + context['scheme'] = 'https' if request.is_secure() else 'http' + context['site'] = get_current_site(request) + + message = render_to_string( + template_name='django_registration/email_changed_body.html', + context=context, + request=request + ) + + request.user.email = new_email + request.user.email_user(_('email_changed_subject'), message, settings.DEFAULT_FROM_EMAIL, html_message=message) + except Exception as e: + client.captureException() + logger.error(str(e)) + raise + + @login_required(login_url='/accounts/login/') def change_password(request): if request.method == 'GET': diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index 6acd14ee47a2649d2844080090aa7df67945e2c2..9e752054f957dff51578e5708a04e31212a43514 100644 GIT binary patch delta 21 ccmcb`e2aO)RxT4=0}};9BP#>rjr*k;0Z$+XdjJ3c delta 21 ccmcb`e2aO)RxU$bV?zZ)Ln}kWjr*k;0Z#1(b^rhX diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 8074572..18d0ce8 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-31 11:11-0300\n" +"POT-Creation-Date: 2019-04-04 12:03-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Poppins/settings.py:127 +#: Poppins/settings.py:130 msgid "Spanish" msgstr "" @@ -95,7 +95,7 @@ msgstr "" msgid "no_se_encontraron_cuentas" msgstr "" -#: frontend/templates/dapp/account_list.html:212 +#: frontend/templates/dapp/account_list.html:234 msgid "no_se_encontraron_cuentas_existentes" msgstr "" @@ -143,71 +143,79 @@ msgstr "" msgid "password_reset_complete" msgstr "" -#: frontend/views.py:72 frontend/views.py:344 +#: frontend/views.py:71 frontend/views.py:352 msgid "invalid_captcha" msgstr "No reCAPTCHA" -#: frontend/views.py:98 +#: frontend/views.py:97 msgid "error_register" msgstr "" -#: frontend/views.py:176 +#: frontend/views.py:179 msgid "account_added" msgstr "" -#: frontend/views.py:178 +#: frontend/views.py:184 msgid "existing_account" msgstr "" -#: frontend/views.py:180 +#: frontend/views.py:186 msgid "address_not_valid" msgstr "" -#: frontend/views.py:183 frontend/views.py:185 frontend/views.py:188 -#: frontend/views.py:240 frontend/views.py:243 +#: frontend/views.py:190 frontend/views.py:193 frontend/views.py:198 +#: frontend/views.py:248 frontend/views.py:253 msgid "error_create_view" msgstr "" -#: frontend/views.py:183 +#: frontend/views.py:190 msgid "existing_service" msgstr "" -#: frontend/views.py:235 +#: frontend/views.py:243 msgid "existing_account_added" msgstr "" -#: frontend/views.py:238 +#: frontend/views.py:246 msgid "user_already_has_account" msgstr "" -#: frontend/views.py:286 +#: frontend/views.py:294 logica_cuentas/services.py:117 msgid "cuenta_borrada" msgstr "" -#: frontend/views.py:290 +#: frontend/views.py:298 logica_cuentas/services.py:121 msgid "cuenta_desvinculada" msgstr "" -#: frontend/views.py:293 +#: frontend/views.py:301 msgid "error_borrar_cuenta" msgstr "" -#: frontend/views.py:305 +#: frontend/views.py:313 msgid "ether_solicitado" msgstr "" -#: frontend/views.py:308 +#: frontend/views.py:316 msgid "error_peticion_ether" msgstr "" -#: frontend/views.py:403 +#: frontend/views.py:427 +msgid "email_changed" +msgstr "" + +#: frontend/views.py:429 msgid "user_updated" msgstr "" -#: frontend/views.py:405 +#: frontend/views.py:433 msgid "user_update_error" msgstr "" -#: frontend/views.py:420 +#: frontend/views.py:460 +msgid "email_changed_subject" +msgstr "" + +#: frontend/views.py:476 msgid "password_changed" msgstr "" diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo index 50643e4f77afbbb39b333d814624535a3939c0d5..271863f2835bd6af983d024efd719d7466a91b67 100644 GIT binary patch delta 1231 zcmYk*OGs5g9LMqT{mL?XT(i<q%gVYpHH8XVD71*ARgXo89M7Hd<bCLUMG)M`TInXD zf+(tWyDk;Di4Y=pt_x}#t*k}RgY5e|-Js#l`OM6@GxMLv`PsJ8Ui{EneaDbu<Q?RN z3S*ApuSy=I)hc7^@e4NN53IxbYGXEH3##6Y>#+~@|0CFhqviHfxQY5Ws^2WquW05d z)X*@Gn&1|0!AGbL&ruzgaWlS0O|*(FxK_4>LAFxwLbV^pMm&KV@H8s0II4d#Y%dyf zl|lmz3uW)(HtLUY7cQa({D|Si7@@v~wHV={9q2&SdwD3(C~DkMY{N0sLL9Ec%NSvP zbAv)VKEP?V|0OE&9>Q(K7^*&k9XN)Xa2gd*7WtX$JUVe6b(BxB3*Vvw`i$zghD>4V zh^|<mu%3b<yNNNphX?TuTKtClFhUeFID&id8TQ~iwD=n}a3=@99ea_v%qZ#zPND)i zUv8gi;`|xgT%lnQ=WqaD;4pqdooNUArIih%R&b{5IBEiiT0jc5@@uG-KSYiD3bm78 zQAb+CMca*i&Fp^#g`H&HnQpQo)T)#$S&_4_@J<j<7zl((!R#kT$qH0SJENq_tYDOM zUk-$&zjq-#R_YBp|K9Qo-GMNwa$R46R<)O`3#hMw%O0*k_drS8t)yM}m-OXo_1w?! zeyCl?p~Tl49;NYoFYc1T?Ukzg-AOM<O!!k?>Y|Gq_kV37o1eVo{9I|O`dnq>P_%!@ z4h$acKU7+-{a#TVNm$=YP6l4a=JGZkWSs8@OQn>JJ9|8;aVSl?to8g{P~cywyeoJ~ zm&!SH@bi?sm_6$<!G*wIdSYF|CW6$ooy|Kt<&x>Fb*Vz&#naXcJESuimp0|0lMU&( M`tiE-x_+_h5A{8fGXMYp delta 1011 zcmYk*J4jqX6vpv!cXfT6)fm_HvAf3C`iR~HgJ_}HDHaA|WuagdHilGI%C!<Zg(XE0 zQfVdFTuhTf5DP<^AcR1OqE;fNNTHx1;Qt#ZkOQ;7JHx#*=giE0P5g=b$CZ(HhUlWz z(-!iK8N{C<eu#sxF@^XU%kU7Rc!DuJcl}!|ryq*kzaPUA`U%u{D^_72>bp^79^Xvy zkk7!Zd*PLPVG$oPzKWV)10P`E+{Z`szq$S;7SsQW6<ElmN<5DGK8+gh#UdQG`o@g$ zP|LteY{oaJg>q;Y#v1wo7T_1u4jj7v4^*P3sEMyJj(S;@)?z7kqUPzx1WsVqXS=gJ zDD&^kT8U?<{uMT&%Fu#IR6=d2%AWI+#39ttO=B7tPzilNeHS20m{0fw_pk?lqo3j- zP1+e8!MFGt+wce<V?NoWFoT+C4D0X(GKZN%ZS6d2;bk|zj!a=T@F{Miho{(wRVAFi z&Ty2QqDp2^8810kPz$V~w(>oy(k)b_2dIfJP&?PaKI;g3u>~iQ4Yo;jphAgrSMAQ0 zv%U>gsfGU!?vV{uru&hiv5sB19sh+ARA|Tar_tG}YTcnGnhI>C>GmshH*^mgXt8mA zlsSo-Y8pFZD+C)Er>g3r=`X0@j@b%z9Ewg_GWRRI8GMXPhKjxJXI{$l20SmQj^5<u Mc1s(Bouc*d9ZWGyx&QzG diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index 3fe005f..267d5c3 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-31 11:11-0300\n" +"POT-Creation-Date: 2019-04-04 12:03-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Poppins/settings.py:127 +#: Poppins/settings.py:130 msgid "Spanish" msgstr "" @@ -95,7 +95,7 @@ msgstr "Cuentas" msgid "no_se_encontraron_cuentas" msgstr "TodavÃa no tenés cuentas asociadas a tu usuario." -#: frontend/templates/dapp/account_list.html:212 +#: frontend/templates/dapp/account_list.html:234 msgid "no_se_encontraron_cuentas_existentes" msgstr "No se encontraron cuentas existentes para agregar" @@ -143,73 +143,83 @@ msgstr "¿Olvidaste tu contraseña?" msgid "password_reset_complete" msgstr "Tu contraseña ha sido cambiada" -#: frontend/views.py:72 frontend/views.py:344 +#: frontend/views.py:71 frontend/views.py:352 msgid "invalid_captcha" msgstr "Completá el captcha" -#: frontend/views.py:98 +#: frontend/views.py:97 msgid "error_register" msgstr "Ocurrió un error al realizar el registro" -#: frontend/views.py:176 +#: frontend/views.py:179 msgid "account_added" msgstr "Cuenta %s agregada" -#: frontend/views.py:178 +#: frontend/views.py:184 msgid "existing_account" msgstr "La cuenta %s ya se encuentra registrada" -#: frontend/views.py:180 +#: frontend/views.py:186 msgid "address_not_valid" msgstr "La dirección %s no es válida" -#: frontend/views.py:183 frontend/views.py:185 frontend/views.py:188 -#: frontend/views.py:240 frontend/views.py:243 +#: frontend/views.py:190 frontend/views.py:193 frontend/views.py:198 +#: frontend/views.py:248 frontend/views.py:253 msgid "error_create_view" msgstr "Ocurrió un error al intentar agregar la cuenta" -#: frontend/views.py:183 +#: frontend/views.py:190 msgid "existing_service" msgstr "Ya existe un servicio llamado %s" -#: frontend/views.py:235 +#: frontend/views.py:243 msgid "existing_account_added" msgstr "La cuenta existente %s fue agregada" -#: frontend/views.py:238 +#: frontend/views.py:246 msgid "user_already_has_account" msgstr "La cuenta %s ya ha sido vinculada" -#: frontend/views.py:286 +#: frontend/views.py:294 logica_cuentas/services.py:117 msgid "cuenta_borrada" msgstr "La cuenta %s ha sido borrada" -#: frontend/views.py:290 +#: frontend/views.py:298 logica_cuentas/services.py:121 msgid "cuenta_desvinculada" msgstr "La cuenta %s ha sido desvinculada" -#: frontend/views.py:293 +#: frontend/views.py:301 msgid "error_borrar_cuenta" msgstr "Ocurrió un error al intentar borrar la cuenta" -#: frontend/views.py:305 +#: frontend/views.py:313 msgid "ether_solicitado" msgstr "" "Su solicitud de carga para la cuenta %s será evaluada por los " "administradores. Nos contactaremos a la brevedad." -#: frontend/views.py:308 +#: frontend/views.py:316 msgid "error_peticion_ether" msgstr "No se pudo realizar la petición" -#: frontend/views.py:403 +#: frontend/views.py:427 +msgid "email_changed" +msgstr "" +"Al cambiar tu dirección de E-mail debes activar nuevamente tu cuenta. " +"Verificá el link que hemos enviado a tu correo" + +#: frontend/views.py:429 msgid "user_updated" msgstr "Usuario modificado" -#: frontend/views.py:405 +#: frontend/views.py:433 msgid "user_update_error" msgstr "Ocurrió un error al intentar modificar el usuario" -#: frontend/views.py:420 +#: frontend/views.py:460 +msgid "email_changed_subject" +msgstr "E-mail modificado" + +#: frontend/views.py:476 msgid "password_changed" msgstr "Contraseña modificada. Por favor ingresá nuevamente" -- GitLab