Skip to content
Snippets Groups Projects
Commit daf5dc3f authored by Patricio Kumagae's avatar Patricio Kumagae
Browse files

Actualización desde gitlab.bora.local

parent 376c9b57
No related branches found
No related tags found
No related merge requests found
...@@ -25,12 +25,13 @@ DEFAULT_FROM_EMAIL = 'no-reply@bfa.ar' ...@@ -25,12 +25,13 @@ DEFAULT_FROM_EMAIL = 'no-reply@bfa.ar'
ADMIN_EMAIL = 'no-reply@bfa.ar' ADMIN_EMAIL = 'no-reply@bfa.ar'
# NODO DE BLOACJAJEICHAIN # 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 # cuentas para pruebas: 0xd57c1f52ff4513c721bd22ccbee55b7cef440b5c y 0x6664e892a36e74e1e618b9bfb25caa0f18b311a4
# passphrase prueba para ambas cuentas # passphrase prueba para ambas cuentas
......
{#
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 %} {% autoescape off %}
Se ha registrado un nuevo usuario en la aplicación Poppins Se ha registrado un nuevo usuario en la aplicación Poppins
Usuario: {{ name }} Usuario: {{ name }}
......
...@@ -15,12 +15,17 @@ You should have received a copy of the GNU General Public License along with thi ...@@ -15,12 +15,17 @@ You should have received a copy of the GNU General Public License along with thi
{% bootstrap_javascript %} {% bootstrap_javascript %}
{% bootstrap_messages %} {% bootstrap_messages %}
{% block css %}
<link rel="stylesheet" type="text/css" media="screen" href="{% static 'frontend/css/tyc.css' %}" />
{% endblock %}
{% block title %} {% block title %}
{% trans "registro_de_usuarios" %} {% trans "registro_de_usuarios" %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
{% include 'topnav-deslogueado.html' %} {% include 'topnav-deslogueado.html' %}
<script src="tyc.css"></script>
<main class="container" id="main-content"> <main class="container" id="main-content">
<div class="row"> <div class="row">
<section> <section>
...@@ -72,14 +77,11 @@ You should have received a copy of the GNU General Public License along with thi ...@@ -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> <p>Utilizá ocho caracteres como mínimo con una combinación de letras, números y símbolos.</p>
</div> </div>
<div class="form-group form-group-lg col-sm-12"> <div class="col-sm-12">
<div> <input class="" type="checkbox" id="terms" name="terms" required="required"
<label class="control-label" for="terms">Política de Uso</label> aria-required="true" />
</div> <label for="terms">Acepto las <a href="#terms-modal" data-toggle="modal"
<div> data-target="#terms-modal">políticas de uso de BFA</a></label>
<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> </div>
<script src='https://www.google.com/recaptcha/api.js'></script> <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 ...@@ -94,30 +96,176 @@ You should have received a copy of the GNU General Public License along with thi
</form> </form>
</section> </section>
</div> </div>
<div class="modal" tabindex="-1" role="dialog" id="terms-modal"> <div class="modal fade tyc" tabindex="-1" role="dialog" id="terms-modal">
<div class="modal-dialog" role="document" style="width: 80%;"> <div class="modal-dialog modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">Política de uso</h4> <button type="button" class="close" data-dismiss="modal" aria-label="Cerrar"><span
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> aria-hidden="true">&times;</span></button>
<span aria-hidden="true">&times;</span> <h1 class="modal-title">Políticas de Uso de BFA</h1>
</button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<p>What is Lorem Ipsum? <p>Las presentes Pol&iacute;ticas de Uso establecen los principios y normas que rigen el uso de la plataforma multiservicios de alcance federal implementada a trav&eacute;s de una infraestructura blockchain denominada Blockchain Federal Argentina (BFA), por parte de los Usuarios, fueran o no Parte del CONTRATO DE COLABORACI&Oacute;N P&Uacute;BLICO-PRIVADA BLOCKCHAIN FEDERAL. </p>
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. <div class="indice">
<h2 id="1">Contenido</h2>
Why do we use it? <ul>
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). <li>
<a href="#1">1. La Red</a>
<ul>
Where does it come from? <li><a href="#1.1">1.1 Tecnología</a></li>
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. <li><a href="#1.2">1.2 Metodología</a></li>
<li>
</p> <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&iacute;a</h2>
<p>BFA utiliza el software libre para blockchain denominado Ethereum.</p>
<h2 id="1.2">1.2 Metodolog&iacute;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&aacute;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&oacute;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>&uacute;nicos</i> que participan en el protocolo de consenso. En ese sentido, tienen cuentas validadas espec&iacute;ficamente para agregar bloques a la cadena. No generan transacciones.</p>
<h5>Funci&oacute;n</h5>
<p>La <i>&uacute;nica</i> funci&oacute;n de los nodos selladores es agregar bloques de transacciones a la blockchain a trav&eacute;s del proceso de sellado.</p>
<h5>Reglas de funcionamiento</h5>
<p>S&oacute;lo pueden ser operados por las Partes de BFA siguiendo los par&aacute;metros definidos para su operaci&oacute;n y son monitoreados por los Centros de Monitoreo (NOCs) p&uacute;blicos. </p>
<p>Los selladores rechazar&aacute;n o descartar&aacute;n conexiones de otros nodos en la red. Solo se contactar&aacute;n con nodos selladores o <i>gateways</i> creando as&iacute; una red eficiente y confiable.</p>
<p>Se comunican entre s&iacute; en forma <i>mesh:</i></p>
<ul>
<li>no necesariamente todos con todos</li>
<li>los nodos selladores deben poder contactarse con los dem&aacute;s selladores y <i>gateway</i></li>
</ul>
<h4 id="1.3.2">b. Gateway </h4>
<h5>Descripci&oacute;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&oacute;n</h5>
<p>La &uacute;nica funci&oacute;n de los nodos <i>gateway</i> es mediar la conexi&oacute;n entre los nodos selladores y los dem&aacute;s de la red.</p>
<h5>Reglas de funcionamiento</h5>
<p>S&oacute;lo pueden ser operados por las Partes de BFA siguiendo los par&aacute;metros definidos para la operaci&oacute;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&uacute;blicos. </p>
<h4 id="1.3.3">c. Bootnodes</h4>
<h5>Descripci&oacute;n</h5>
<p>BFA provee un peque&ntilde;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&oacute;n</h5>
<p>La funci&oacute;n de los <i>bootnodes</i> es ayudar a todos los nodos a encontrar los dem&aacute;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&uacute;blicas y conocidas.</p>
<h4 id="1.3.4">d. Transaccionales</h4>
<h5>Descripci&oacute;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&oacute;n firmada por una cuenta. Normalmente &eacute;sta est&aacute; relacionada con el operador del nodo.</p>
<h5>Funci&oacute;n</h5>
<p>La funci&oacute;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&iacute; y con cualquier nodo de la red (excepto los selladores) a voluntad. </p>
<p>Pueden ser operados por cualquier persona o instituci&oacute;n pero, para que las transacciones sean aceptadas, DEBEN ser enviadas por una cuenta registrada (no necesariamente deben ser Parte pero s&iacute; 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 &nbsp;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&aacute;s sobre Ether en <a href="#1.6">1.6 Funcionamiento de la Destiler&iacute;a de Ether</a>.</p>
<h4 id="1.3.5">e. Verificadores</h4>
<h5>Descripci&oacute;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&oacute;n</h5>
<p>Se utilizan para leer y verificar el contenido de la blockchain y adem&aacute;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&oacute;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&oacute;n</h5>
<p>Los nodos archivadores son aquellos que mantienen un archivo hist&oacute;rico de todos los bloques de la red. Normalmente no generan transacciones (aunque podr&iacute;a utilizarse de archivador un nodo transaccional).</p>
<h5>Funci&oacute;n</h5>
<p>La funci&oacute;n del nodo archivador es mantener una copia completa de la blockchain.</p>
<h5>Reglas de funcionamiento</h5>
<p>BFA provee nodos archivadores p&uacute;blicos que tienen conectividad a Internet v&iacute;a IPv4 e IPv6. Estos nodos no requieren cuentas validadas asociadas a ellos.</p>
<p>Cualquier persona u organizaci&oacute;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&oacute;n de distintos tipos de nodos. Por ejemplo, un nodo transaccional podr&iacute;a funcionar tambi&eacute;n como archivador. En principio, la funci&oacute;n de verificador la realizan todos los nodos excepto los <i>bootnodes</i>.</p>
<h2 id="1.4">1.4 Suspensi&oacute;n y remoci&oacute;n de nodos/cuentas</h2>
<p>Los nodos (y cuentas asociadas) que no cumplan con las presentes <b>Pol&iacute;ticas de Uso</b> podr&aacute;n ser suspendidos en su operaci&oacute;n y se deber&aacute;n determinar las causas del incumplimiento. Si ocurri&oacute; por un problema de seguridad o producto de un error de software o configuraci&oacute;n, se deber&aacute; resolver el problema y luego reactivar el nodo/cuenta. </p>
<p>En caso de detectarse un comportamiento malicioso, se deber&aacute; cumplir con el procedimiento de suspensi&oacute;n y remoci&oacute;n de nodos transaccionales definido por el Consejo de Administraci&oacute;n (CdA) para remover de forma permanente un nodo/cuenta, eventualmente cancelando la membres&iacute;a.</p>
<h2 id="1.5">1.5 Fijaci&oacute;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&Iacute;AN asegurarse de que sus relojes est&aacute;n sincronizados. Dependiendo de los casos de uso, los nodos <i>read-only</i> tambi&eacute;n DEBER&Iacute;AN asegurarse de que sus relojes est&aacute;n sincronizados.</p>
<h2 id="1.6">1.6 Funcionamiento de la Destiler&iacute;a de Ether</h2>
<p>BFA opera una Destiler&iacute;a que, peri&oacute;dicamente, env&iacute;a Ether a los nodos transaccionales, de modo que puedan continuar con las operaciones normales. </p>
<p>La Destiler&iacute;a de Ether puede implementar m&eacute;todos para detectar incumplimiento, a las Pol&iacute;ticas de Uso. Y ante la posibilidad de un abuso, implicar&aacute; investigar el comportamiento del nodo en cuesti&oacute;n y resolver su situaci&oacute;n y podr&aacute; detener o minimizar transferencias subsecuentes de Ether a los nodos transaccionales. </p>
<p>BFA puede ajustar administrativamente la configuraci&oacute;n por nodo/cuenta transaccional y organizaci&oacute;n.</p>
<p>La Destiler&iacute;a seguir&aacute; el procedimiento para la asignaci&oacute;n de Ether definido por el CdA.</p>
<h2 id="1.7">1.7 C&oacute;digo abierto</h2>
<p>El software propuesto, as&iacute; como los desarrollos que pudieran realizarse y ponerse a disposici&oacute;n de los Usuarios, se basa en principios y reglas jur&iacute;dicas del software libre y de c&oacute;digo abierto (<i>open source software</i>).</p>
<p>Por lo anterior, no son necesarios nuevos acuerdos con el creador o emisor del c&oacute;digo fuente para reutilizar la licencia original del mismo. No existe relaci&oacute;n comercial entre el creador del software y los Usuarios. Ning&uacute;n Usuario puede reclamar da&ntilde;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&eacute;gimen abierto, libre u <i>open source</i>.</p>
<h1 id="2">2. Usuarios</h1>
<p>BFA podr&aacute; ser utilizada por cualquier interesado con fines econ&oacute;micos, de gesti&oacute;n, cient&iacute;ficos, de experimentaci&oacute;n o de investigaci&oacute;n, de conformidad a las reglas y principios establecidos en el Contrato, el Reglamento Interno y en las Pol&iacute;ticas de Uso de la plataforma.</p>
<p>No existe v&iacute;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&iacute;ticas de Uso.</p>
<p>Una vez registrado, un Usuario podr&aacute; informar las cuentas que utilizar&aacute; 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&oacute;n de registro de BFA para lo cual s&oacute;lo debe validar que posee control sobre la cuenta de correo electr&oacute;nico que utilice para el registro.</p>
<p>Cada usuario registrado podr&aacute; cargar una o m&aacute;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&aacute;n validar su identidad a trav&eacute;s de la plataforma de autenticaci&oacute;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&iacute; mismos o a trav&eacute;s de terceros, aceptan voluntariamente que el uso de la misma tiene lugar bajo su &uacute;nica y exclusiva responsabilidad, y se comprometen a cumplir el Reglamento Interno, las Pol&iacute;ticas de Uso y dem&aacute;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&aacute;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&aacute;s Partes que la conforman.</p>
<p>Asimismo, los Usuarios se comprometen a utilizar la plataforma de BFA de conformidad con la ley, as&iacute; como con la moral y buenas costumbres generalmente aceptadas y el orden p&uacute;blico.</p>
<p>El Usuario se obliga a abstenerse de utilizarla con fines o efectos il&iacute;citos, contrarios a lo establecido en las presentes Pol&iacute;ticas de Uso, lesivos de los derechos e intereses de terceros, o que de cualquier forma puedan da&ntilde;ar o inutilizar la plataforma de BFA o impedir la normal utilizaci&oacute;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&aacute; el CdA de modo tal que los nodos selladores no den preferencia a unas transacciones sobre otras.</p>
<p>El CdA establecer&aacute; la cantidad de Ether que se asigna peri&oacute;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&oacute;n al Reglamento Interno y a las Pol&iacute;ticas de Uso.</p>
<p>Ante una violaci&oacute;n (voluntaria o involuntaria) del Reglamento Interno o las Pol&iacute;ticas de Uso por parte de una cuenta asignada a un usuario, el CdA podr&aacute; determinar la reducci&oacute;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&aacute; bajo la exclusiva responsabilidad y esfera de intimidad del Usuario que los despliegue y los Usuarios que lo invoquen. BFA no asumir&aacute; responsabilidad alguna por los da&ntilde;os que pueda causar dicha vinculaci&oacute;n.</p>
<h4>Almacenamiento <i>off chain</i></h4>
<p>Informaci&oacute;n primaria es la informaci&oacute;n en s&iacute;. En la plataforma blockchain de BFA no se almacena informaci&oacute;n primaria, s&oacute;lo se guardan <i>hashes</i> de esa informaci&oacute;n y no nombres, im&aacute;genes, n&uacute;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&aacute;s adecuada pero <i>fuera</i> de la cadena de bloques que conforma la plataforma BFA. Al estar los digestos criptogr&aacute;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&oacute;n que no deber&iacute;a ser p&uacute;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&oacute;n (respecto de la Ley de Protecci&oacute;n de Datos Personales, la GDPR, etc.) recaen sobre quien opere sobre esos datos y no sobre BFA.</p>
<p>Cada aplicaci&oacute;n, si lo requiere, DEBER&Aacute; almacenar la informaci&oacute;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&uacute;blico o privado.</p>
<p>La responsabilidad sobre la protecci&oacute;n de ese repositorio recae sobre el operador (u operadores) de la aplicaci&oacute;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&Aacute;N transferir Ether a otras cuentas ya que la &uacute;nica funci&oacute;n del Ether es ser utilizado como gas y el mismo se distribuye exclusivamente desde la Destiler&iacute;a.</p>
<p>El CdA puede solicitar el an&aacute;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&oacute;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&oacute;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&oacute;nica &nbsp;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&oacute;n no quede incorporada en la cadena de bloques (Transacci&oacute;n no exitosa).</li>
<li>BFA no ser&aacute; responsable de los <b>da&ntilde;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&oacute;n jur&iacute;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&aacute; responsable ante los Usuarios finales por interrupciones en su servicio, fallas operativas, ca&iacute;das del sistema o fallas de cualquier elemento de software o hardware operado por BFA, independientemente de la causa de dicha falla o ca&iacute;da.</li>
<li>El Usuario hace uso del software libre propuesto por BFA, as&iacute; como los desarrollos que pudieran realizarse bajo su exclusiva responsabilidad conforme a los principios del uso de software libre y sistemas inform&aacute;ticos en r&eacute;gimen abierto. Ning&uacute;n Usuario puede reclamar da&ntilde;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&eacute;gimen abierto, libre u <em>open source</em>.</li>
<li>Los nodos de BFA no responder&aacute;n frente a otros nodos de la plataforma ante interrupciones operativas, fallas, p&eacute;rdidas o da&ntilde;os ocasionados directa o indirectamente que se originen por el incumplimiento de las reglas de funcionamiento, pol&iacute;ticas de uso &nbsp;y procedimientos establecidos. En caso de detectarse un comportamiento malicioso, se deber&aacute; cumplir con el procedimiento de suspensi&oacute;n y remoci&oacute;n de nodos definido por el CdA para eliminar de forma permanente un nodo/cuenta.</li>
</ul>
</div>
</div> </div>
<div class="modal-footer"> <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> </div>
</div> </div>
...@@ -178,7 +326,7 @@ Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots ...@@ -178,7 +326,7 @@ Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots
required: "Ingresá una contraseña", required: "Ingresá una contraseña",
minlength: "La contraseña debe tener al menos 8 caracteres" 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:{ rules:{
......
...@@ -47,26 +47,26 @@ ...@@ -47,26 +47,26 @@
</div> </div>
<div class="form-group form-group-lg col-sm-12"> <div class="form-group form-group-lg col-sm-12">
<label for="email" class="form-required">Correo electrónico</label> <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>
<div class="form-group form-group-lg col-sm-12"> <div class="form-group form-group-lg col-sm-12">
<a href="/change_password/">Cambiar contraseña</a> <a href="/change_password/">Cambiar contraseña</a>
</div> </div>
<div class="form-group form-group-lg col-sm-12"> <div class="form-group form-group-lg col-sm-12">
<label for="cuit">CUIT</label> <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>
<div class="form-group form-group-lg col-sm-12"> <div class="form-group form-group-lg col-sm-12">
<label for="org">Organización</label> <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>
<div class="form-group form-group-lg col-sm-12"> <div class="form-group form-group-lg col-sm-12">
<label for="rol">Rol</label> <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>
<div class="form-group form-group-lg col-sm-12"> <div class="form-group form-group-lg col-sm-12">
<label for="sector">Sector</label> <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> <option value="">Seleccione un sector</option>
{% for section in sections %} {% for section in sections %}
<option value="{{ section.id }}" {% if section.id == custom_user.section_id %}selected="selected"{% endif %}>{{ section.name }}</option> <option value="{{ section.id }}" {% if section.id == custom_user.section_id %}selected="selected"{% endif %}>{{ section.name }}</option>
......
...@@ -17,9 +17,9 @@ from django.http import HttpResponseRedirect ...@@ -17,9 +17,9 @@ from django.http import HttpResponseRedirect
from django.http.response import JsonResponse from django.http.response import JsonResponse
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.views import LoginView from django.contrib.auth.views import LoginView
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required 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.contrib import messages
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.db import transaction, IntegrityError from django.db import transaction, IntegrityError
...@@ -334,8 +334,6 @@ class CaptchaLoginView(LoginView): ...@@ -334,8 +334,6 @@ class CaptchaLoginView(LoginView):
form = self.get_form() form = self.get_form()
if form.is_valid(): if form.is_valid():
return self.form_valid(form)
''' Begin reCAPTCHA validation ''' ''' Begin reCAPTCHA validation '''
recaptcha_response = request.POST.get('g-recaptcha-response') recaptcha_response = request.POST.get('g-recaptcha-response')
data = { data = {
...@@ -394,20 +392,41 @@ def update_user(request): ...@@ -394,20 +392,41 @@ def update_user(request):
else: else:
try: try:
email_changed = False
with transaction.atomic(): with transaction.atomic():
user.first_name = request.POST['first_name'] user.first_name = request.POST['first_name']
user.last_name = request.POST['last_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() user.save()
custom_user.cuit = request.POST['cuit'] # Tarea #18590 - [BFA-registro] bloquear edición de campos en front-end - INICIO
custom_user.organization = request.POST['organization'] #
custom_user.rol = request.POST['rol'] # custom_user.cuit = request.POST['cuit']
custom_user.section_id = request.POST['section'] # custom_user.organization = request.POST['organization']
custom_user.save() # 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')) messages.success(request, _('user_updated'))
except ValidationError as e:
messages.error(request, str(e.messages[0]), extra_tags='danger')
except Exception as e: except Exception as e:
messages.error(request, _('user_update_error'), extra_tags='danger') messages.error(request, _('user_update_error'), extra_tags='danger')
client.captureException() client.captureException()
...@@ -416,6 +435,33 @@ def update_user(request): ...@@ -416,6 +435,33 @@ def update_user(request):
return HttpResponseRedirect('/mis_datos/') 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/') @login_required(login_url='/accounts/login/')
def change_password(request): def change_password(request):
if request.method == 'GET': if request.method == 'GET':
......
No preview for this file type
...@@ -8,7 +8,7 @@ msgid "" ...@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -18,7 +18,7 @@ msgstr "" ...@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: Poppins/settings.py:127 #: Poppins/settings.py:130
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
...@@ -95,7 +95,7 @@ msgstr "" ...@@ -95,7 +95,7 @@ msgstr ""
msgid "no_se_encontraron_cuentas" msgid "no_se_encontraron_cuentas"
msgstr "" msgstr ""
#: frontend/templates/dapp/account_list.html:212 #: frontend/templates/dapp/account_list.html:234
msgid "no_se_encontraron_cuentas_existentes" msgid "no_se_encontraron_cuentas_existentes"
msgstr "" msgstr ""
...@@ -143,71 +143,79 @@ msgstr "" ...@@ -143,71 +143,79 @@ msgstr ""
msgid "password_reset_complete" msgid "password_reset_complete"
msgstr "" msgstr ""
#: frontend/views.py:72 frontend/views.py:344 #: frontend/views.py:71 frontend/views.py:352
msgid "invalid_captcha" msgid "invalid_captcha"
msgstr "No reCAPTCHA" msgstr "No reCAPTCHA"
#: frontend/views.py:98 #: frontend/views.py:97
msgid "error_register" msgid "error_register"
msgstr "" msgstr ""
#: frontend/views.py:176 #: frontend/views.py:179
msgid "account_added" msgid "account_added"
msgstr "" msgstr ""
#: frontend/views.py:178 #: frontend/views.py:184
msgid "existing_account" msgid "existing_account"
msgstr "" msgstr ""
#: frontend/views.py:180 #: frontend/views.py:186
msgid "address_not_valid" msgid "address_not_valid"
msgstr "" msgstr ""
#: frontend/views.py:183 frontend/views.py:185 frontend/views.py:188 #: frontend/views.py:190 frontend/views.py:193 frontend/views.py:198
#: frontend/views.py:240 frontend/views.py:243 #: frontend/views.py:248 frontend/views.py:253
msgid "error_create_view" msgid "error_create_view"
msgstr "" msgstr ""
#: frontend/views.py:183 #: frontend/views.py:190
msgid "existing_service" msgid "existing_service"
msgstr "" msgstr ""
#: frontend/views.py:235 #: frontend/views.py:243
msgid "existing_account_added" msgid "existing_account_added"
msgstr "" msgstr ""
#: frontend/views.py:238 #: frontend/views.py:246
msgid "user_already_has_account" msgid "user_already_has_account"
msgstr "" msgstr ""
#: frontend/views.py:286 #: frontend/views.py:294 logica_cuentas/services.py:117
msgid "cuenta_borrada" msgid "cuenta_borrada"
msgstr "" msgstr ""
#: frontend/views.py:290 #: frontend/views.py:298 logica_cuentas/services.py:121
msgid "cuenta_desvinculada" msgid "cuenta_desvinculada"
msgstr "" msgstr ""
#: frontend/views.py:293 #: frontend/views.py:301
msgid "error_borrar_cuenta" msgid "error_borrar_cuenta"
msgstr "" msgstr ""
#: frontend/views.py:305 #: frontend/views.py:313
msgid "ether_solicitado" msgid "ether_solicitado"
msgstr "" msgstr ""
#: frontend/views.py:308 #: frontend/views.py:316
msgid "error_peticion_ether" msgid "error_peticion_ether"
msgstr "" msgstr ""
#: frontend/views.py:403 #: frontend/views.py:427
msgid "email_changed"
msgstr ""
#: frontend/views.py:429
msgid "user_updated" msgid "user_updated"
msgstr "" msgstr ""
#: frontend/views.py:405 #: frontend/views.py:433
msgid "user_update_error" msgid "user_update_error"
msgstr "" msgstr ""
#: frontend/views.py:420 #: frontend/views.py:460
msgid "email_changed_subject"
msgstr ""
#: frontend/views.py:476
msgid "password_changed" msgid "password_changed"
msgstr "" msgstr ""
No preview for this file type
...@@ -8,7 +8,7 @@ msgid "" ...@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -18,7 +18,7 @@ msgstr "" ...@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: Poppins/settings.py:127 #: Poppins/settings.py:130
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
...@@ -95,7 +95,7 @@ msgstr "Cuentas" ...@@ -95,7 +95,7 @@ msgstr "Cuentas"
msgid "no_se_encontraron_cuentas" msgid "no_se_encontraron_cuentas"
msgstr "Todavía no tenés cuentas asociadas a tu usuario." 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" msgid "no_se_encontraron_cuentas_existentes"
msgstr "No se encontraron cuentas existentes para agregar" msgstr "No se encontraron cuentas existentes para agregar"
...@@ -143,73 +143,83 @@ msgstr "¿Olvidaste tu contraseña?" ...@@ -143,73 +143,83 @@ msgstr "¿Olvidaste tu contraseña?"
msgid "password_reset_complete" msgid "password_reset_complete"
msgstr "Tu contraseña ha sido cambiada" 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" msgid "invalid_captcha"
msgstr "Completá el captcha" msgstr "Completá el captcha"
#: frontend/views.py:98 #: frontend/views.py:97
msgid "error_register" msgid "error_register"
msgstr "Ocurrió un error al realizar el registro" msgstr "Ocurrió un error al realizar el registro"
#: frontend/views.py:176 #: frontend/views.py:179
msgid "account_added" msgid "account_added"
msgstr "Cuenta %s agregada" msgstr "Cuenta %s agregada"
#: frontend/views.py:178 #: frontend/views.py:184
msgid "existing_account" msgid "existing_account"
msgstr "La cuenta %s ya se encuentra registrada" msgstr "La cuenta %s ya se encuentra registrada"
#: frontend/views.py:180 #: frontend/views.py:186
msgid "address_not_valid" msgid "address_not_valid"
msgstr "La dirección %s no es válida" msgstr "La dirección %s no es válida"
#: frontend/views.py:183 frontend/views.py:185 frontend/views.py:188 #: frontend/views.py:190 frontend/views.py:193 frontend/views.py:198
#: frontend/views.py:240 frontend/views.py:243 #: frontend/views.py:248 frontend/views.py:253
msgid "error_create_view" msgid "error_create_view"
msgstr "Ocurrió un error al intentar agregar la cuenta" msgstr "Ocurrió un error al intentar agregar la cuenta"
#: frontend/views.py:183 #: frontend/views.py:190
msgid "existing_service" msgid "existing_service"
msgstr "Ya existe un servicio llamado %s" msgstr "Ya existe un servicio llamado %s"
#: frontend/views.py:235 #: frontend/views.py:243
msgid "existing_account_added" msgid "existing_account_added"
msgstr "La cuenta existente %s fue agregada" msgstr "La cuenta existente %s fue agregada"
#: frontend/views.py:238 #: frontend/views.py:246
msgid "user_already_has_account" msgid "user_already_has_account"
msgstr "La cuenta %s ya ha sido vinculada" msgstr "La cuenta %s ya ha sido vinculada"
#: frontend/views.py:286 #: frontend/views.py:294 logica_cuentas/services.py:117
msgid "cuenta_borrada" msgid "cuenta_borrada"
msgstr "La cuenta %s ha sido borrada" msgstr "La cuenta %s ha sido borrada"
#: frontend/views.py:290 #: frontend/views.py:298 logica_cuentas/services.py:121
msgid "cuenta_desvinculada" msgid "cuenta_desvinculada"
msgstr "La cuenta %s ha sido desvinculada" msgstr "La cuenta %s ha sido desvinculada"
#: frontend/views.py:293 #: frontend/views.py:301
msgid "error_borrar_cuenta" msgid "error_borrar_cuenta"
msgstr "Ocurrió un error al intentar borrar la cuenta" msgstr "Ocurrió un error al intentar borrar la cuenta"
#: frontend/views.py:305 #: frontend/views.py:313
msgid "ether_solicitado" msgid "ether_solicitado"
msgstr "" msgstr ""
"Su solicitud de carga para la cuenta %s será evaluada por los " "Su solicitud de carga para la cuenta %s será evaluada por los "
"administradores. Nos contactaremos a la brevedad." "administradores. Nos contactaremos a la brevedad."
#: frontend/views.py:308 #: frontend/views.py:316
msgid "error_peticion_ether" msgid "error_peticion_ether"
msgstr "No se pudo realizar la petición" 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" msgid "user_updated"
msgstr "Usuario modificado" msgstr "Usuario modificado"
#: frontend/views.py:405 #: frontend/views.py:433
msgid "user_update_error" msgid "user_update_error"
msgstr "Ocurrió un error al intentar modificar el usuario" 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" msgid "password_changed"
msgstr "Contraseña modificada. Por favor ingresá nuevamente" msgstr "Contraseña modificada. Por favor ingresá nuevamente"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment