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

Actualización desde gitlab.bora.local

parent 7e2ec9d2
No related branches found
No related tags found
No related merge requests found
FROM python:3.5 FROM python:3.5.2
RUN apt-get update && apt-get install -y --no-install-recommends apt-utils RUN apt-get update && apt-get install -y --no-install-recommends apt-utils
RUN apt-get update && apt-get -y upgrade && apt-get install -y apt-transport-https software-properties-common libsasl2-dev python-dev libldap2-dev libssl-dev unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc memcached RUN apt-get update && apt-get -y upgrade && apt-get install -y apt-transport-https software-properties-common libsasl2-dev python-dev libldap2-dev libssl-dev unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc memcached
RUN apt-get install -y gettext RUN apt-get install -y gettext
......
# -*- coding: utf-8 -*-
""" """
Copyright 2019 de la Dirección General de Sistemas Informáticos – Secretaría Legal y Técnica - Nación. Copyright 2019 de la Dirección General de Sistemas Informáticos – Secretaría Legal y Técnica - Nación.
...@@ -7,6 +8,8 @@ This program is distributed in the hope that it will be useful, but WITHOUT ANY ...@@ -7,6 +8,8 @@ This program is distributed in the hope that it will be useful, but WITHOUT ANY
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/ You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/
""" """
import sys
""" """
Django settings for Poppins project. Django settings for Poppins project.
...@@ -148,7 +151,7 @@ STATIC_URL = '/static/' ...@@ -148,7 +151,7 @@ STATIC_URL = '/static/'
ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window
ACCOUNT_DEFAULT_LIMIT = 100000 # in wei ACCOUNT_DEFAULT_LIMIT = 2000000000 # in wei
LOGIN_REDIRECT_URL = '/accounts/list/' LOGIN_REDIRECT_URL = '/accounts/list/'
LOGOUT_REDIRECT_URL = '/accounts/login/' LOGOUT_REDIRECT_URL = '/accounts/login/'
...@@ -182,16 +185,22 @@ LOGGING = { ...@@ -182,16 +185,22 @@ LOGGING = {
} }
}, },
'handlers': { 'handlers': {
'stdout': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'stream': sys.stdout,
'formatter': 'history'
},
'info_file': { 'info_file': {
'level': 'INFO', 'level': 'INFO',
'class': 'logging.FileHandler', 'class': 'logging.FileHandler',
'filename': LOG_ROOT + 'server.info.log', 'filename': LOG_ROOT + 'info.log',
'formatter': 'history', 'formatter': 'history',
}, },
'error_file': { 'error_file': {
'level': 'ERROR', 'level': 'ERROR',
'class': 'logging.FileHandler', 'class': 'logging.FileHandler',
'filename': LOG_ROOT + 'server.error.log', 'filename': LOG_ROOT + 'error.log',
'formatter': 'detailed', 'formatter': 'detailed',
}, },
'sentry': { 'sentry': {
...@@ -215,5 +224,10 @@ LOGGING = { ...@@ -215,5 +224,10 @@ LOGGING = {
'level': 'DEBUG', 'level': 'DEBUG',
'propagate': True, 'propagate': True,
}, },
'cmd-logger': {
'handlers': ['stdout', 'info_file', 'error_file', 'sentry'],
'level': 'DEBUG',
'propagate': True
}
}, },
} }
...@@ -36,15 +36,14 @@ from Poppins import settings ...@@ -36,15 +36,14 @@ from Poppins import settings
from api.models import CustomUser, Institution, Service, Section from api.models import CustomUser, Institution, Service, Section
from api.managers import RegistrationManager, ServiceManager from api.managers import RegistrationManager, ServiceManager
from dapp.models import Account from dapp.models import Account
from dapp.services import AsociacionCuenta, PetitorioEtherCuenta, NotValidAddressException from dapp.services import AsociacionCuenta, PetitorioEtherCuenta, NotValidAddressException, DesvinculacionCuenta
from logica_cuentas.models import RelacionUsuarioAccount as CustomUserAccount, RelacionUsuarioAccountStatus from logica_cuentas.models import RelacionUsuarioAccount as CustomUserAccount, RelacionUsuarioAccountStatus
from logica_cuentas.services import AltaCuentaEthereum from logica_cuentas.services import AltaCuentaEthereum, CreacionRelacionCuentaUsuario
logger = logging.getLogger('logger') logger = logging.getLogger('logger')
class RegistrationView(RegistrationView): class RegistrationView(RegistrationView):
email_body_template = 'django_registration/activation_email_body.html' email_body_template = 'django_registration/activation_email_body.html'
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
...@@ -86,7 +85,7 @@ class RegistrationView(RegistrationView): ...@@ -86,7 +85,7 @@ class RegistrationView(RegistrationView):
user = super().register(form) user = super().register(form)
CustomUser.objects.create( CustomUser.objects.create(
user_id=user.id, user_id=user.id
) )
RegistrationManager.send_email_to_admin(form) RegistrationManager.send_email_to_admin(form)
...@@ -139,7 +138,10 @@ class AccountListView(LoginRequiredMixin, ListView): ...@@ -139,7 +138,10 @@ class AccountListView(LoginRequiredMixin, ListView):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['institutions'] = CustomUser.objects.get(user_id=self.request.user.id).enabled_institutions.all() context['institutions'] = CustomUser.objects.get(user_id=self.request.user.id).enabled_institutions.all()
context['services'] = Service.objects.filter(id__in=list(Account.objects.filter(institution_id__in=list(CustomUser.objects.get(user_id=self.request.user.id).enabled_institutions.values_list('id', flat=True))).values_list('service_id', flat=True))) context['services'] = Service.objects.filter(id__in=list(Account.objects.filter(institution_id__in=list(
CustomUser.objects.get(user_id=self.request.user.id).enabled_institutions.values_list('id',
flat=True))).values_list(
'service_id', flat=True)))
context['distillery_address'] = settings.DISTILLERY_ADDRESS context['distillery_address'] = settings.DISTILLERY_ADDRESS
return context return context
...@@ -167,22 +169,30 @@ class AccountCreateView(LoginRequiredMixin, CreateView): ...@@ -167,22 +169,30 @@ class AccountCreateView(LoginRequiredMixin, CreateView):
service = ServiceManager.create_service(request.POST['service_name']) service = ServiceManager.create_service(request.POST['service_name'])
account, clave = self.alta_cuenta.alta_cuenta_ethereum(request.POST['address'], account, clave = self.alta_cuenta.alta_cuenta_ethereum(request.POST['address'],
Institution.objects.filter(id=request.POST['institution']).first(), Institution.objects.filter(
id=request.POST['institution']).first(),
service, service,
custom_user, custom_user,
settings.ACCOUNT_DEFAULT_LIMIT settings.ACCOUNT_DEFAULT_LIMIT
) )
messages.success(request, (_('account_added') % (request.POST['address']) + ' <input type="hidden" id="hidden-clave" value="'+clave+'" /> <input type="hidden" id="hidden-address" value="'+request.POST['address']+'" /> <input type="hidden" id="hidden-contract-address" value="'+settings.DISTILLERY_ADDRESS+'" />')) messages.success(request, (_('account_added') % (request.POST[
'address']) + ' <input type="hidden" id="hidden-clave" value="' + clave + '" /> <input type="hidden" id="hidden-address" value="' +
request.POST[
'address'] + '" /> <input type="hidden" id="hidden-contract-address" value="' + settings.DISTILLERY_ADDRESS + '" />'))
else: else:
messages.error(request, _('existing_account') % request.POST['address'], extra_tags='danger') messages.error(request, _('existing_account') % request.POST['address'], extra_tags='danger')
except NotValidAddressException: except NotValidAddressException:
messages.error(request, _('address_not_valid') % request.POST['address'], extra_tags='danger') messages.error(request, _('address_not_valid') % request.POST['address'], extra_tags='danger')
except IntegrityError as e: except IntegrityError as e:
if 'service_name_key' in str(e): if 'service_name_key' in str(e):
messages.error(request, _('error_create_view') + ': ' + _('existing_service') % request.POST['service_name'], extra_tags='danger') messages.error(request,
_('error_create_view') + ': ' + _('existing_service') % request.POST['service_name'],
extra_tags='danger')
else: else:
messages.error(request, _('error_create_view'), extra_tags='danger') messages.error(request, _('error_create_view'), extra_tags='danger')
client.captureException()
logger.error(str(e))
except Exception as e: except Exception as e:
client.captureException() client.captureException()
messages.error(request, _('error_create_view'), extra_tags='danger') messages.error(request, _('error_create_view'), extra_tags='danger')
...@@ -192,25 +202,23 @@ class AccountCreateView(LoginRequiredMixin, CreateView): ...@@ -192,25 +202,23 @@ class AccountCreateView(LoginRequiredMixin, CreateView):
class CustomUserAccountCreateView(LoginRequiredMixin, CreateView): class CustomUserAccountCreateView(LoginRequiredMixin, CreateView):
model = CustomUserAccount model = CustomUserAccount
success_url = '/accounts/list/' success_url = '/accounts/list/'
creacion_vinculo = CreacionRelacionCuentaUsuario()
manager = CustomUserAccount.objects
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
try: try:
with transaction.atomic(): with transaction.atomic():
sin_verificar = RelacionUsuarioAccountStatus.objects.get_sin_verificar_relacion()
account = Account.objects.filter(service__id=request.POST['service']).first() account = Account.objects.filter(service__id=request.POST['service']).first()
custom_user = CustomUser.objects.filter(user_id=request.user.id).first() custom_user = CustomUser.objects.filter(user_id=request.user.id).first()
custom_user_account = CustomUserAccount.objects.create(user=custom_user, account=account, status=sin_verificar) custom_user_account = self.creacion_vinculo.vincular(custom_user, account)
account_users = User.objects.filter(id__in=list(CustomUserAccount.objects.filter(account=account.id).values_list('user_id', flat=True))) owner = self.manager.owner(account)
scheme = 'https' if self.request.is_secure() else 'http' scheme = 'https' if self.request.is_secure() else 'http'
site = get_current_site(self.request) site = get_current_site(self.request)
...@@ -227,7 +235,7 @@ class CustomUserAccountCreateView(LoginRequiredMixin, CreateView): ...@@ -227,7 +235,7 @@ class CustomUserAccountCreateView(LoginRequiredMixin, CreateView):
render_to_string('django_registration/approve_account_subject.txt'), render_to_string('django_registration/approve_account_subject.txt'),
render_to_string('django_registration/approve_account_body.html', body_context), render_to_string('django_registration/approve_account_body.html', body_context),
settings.DEFAULT_FROM_EMAIL, settings.DEFAULT_FROM_EMAIL,
list(account_users.values_list('email', flat=True)), [owner.email],
fail_silently=False, fail_silently=False,
html_message=render_to_string('django_registration/approve_account_body.html', body_context) html_message=render_to_string('django_registration/approve_account_body.html', body_context)
) )
...@@ -238,6 +246,8 @@ class CustomUserAccountCreateView(LoginRequiredMixin, CreateView): ...@@ -238,6 +246,8 @@ class CustomUserAccountCreateView(LoginRequiredMixin, CreateView):
messages.error(request, _('user_already_has_account') % (account.address), extra_tags='danger') messages.error(request, _('user_already_has_account') % (account.address), extra_tags='danger')
else: else:
messages.error(request, _('error_create_view'), extra_tags='danger') messages.error(request, _('error_create_view'), extra_tags='danger')
client.captureException()
logger.error(str(e))
except Exception as e: except Exception as e:
client.captureException() client.captureException()
messages.error(request, _('error_create_view'), extra_tags='danger') messages.error(request, _('error_create_view'), extra_tags='danger')
...@@ -249,16 +259,16 @@ class CustomUserAccountCreateView(LoginRequiredMixin, CreateView): ...@@ -249,16 +259,16 @@ class CustomUserAccountCreateView(LoginRequiredMixin, CreateView):
class AccountDeleteView(LoginRequiredMixin, DeleteView): class AccountDeleteView(LoginRequiredMixin, DeleteView):
model = CustomUserAccount model = CustomUserAccount
success_url = '/accounts/list/' success_url = '/accounts/list/'
desvinculacion_account = DesvinculacionCuenta()
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
try: try:
# TODO: pasar todo esto a clase en services
with transaction.atomic(): with transaction.atomic():
customuser_account = self.get_object() customuser_account = self.get_object()
custom_user = CustomUser.objects.get(user_id=request.user.id)
if customuser_account.account.owner == custom_user: if customuser_account.is_owner:
accounts = CustomUserAccount.objects.filter(account_id=customuser_account.account_id) accounts = CustomUserAccount.objects.filter(account_id=customuser_account.account_id)
...@@ -279,9 +289,7 @@ class AccountDeleteView(LoginRequiredMixin, DeleteView): ...@@ -279,9 +289,7 @@ class AccountDeleteView(LoginRequiredMixin, DeleteView):
account_address = customuser_account.account.address account_address = customuser_account.account.address
customuser_account.delete() customuser_account.delete()
account.delete() self.desvinculacion_account.desvincular_cuenta(account)
service = Service.objects.get(pk=account.service_id)
service.delete()
messages.success(request, _('cuenta_borrada') % account_address) messages.success(request, _('cuenta_borrada') % account_address)
...@@ -293,7 +301,6 @@ class AccountDeleteView(LoginRequiredMixin, DeleteView): ...@@ -293,7 +301,6 @@ class AccountDeleteView(LoginRequiredMixin, DeleteView):
messages.error(request, _('error_borrar_cuenta'), extra_tags='danger') messages.error(request, _('error_borrar_cuenta'), extra_tags='danger')
logger.error(str(e)) logger.error(str(e))
return HttpResponseRedirect(self.success_url) return HttpResponseRedirect(self.success_url)
...@@ -347,31 +354,31 @@ class CaptchaLoginView(LoginView): ...@@ -347,31 +354,31 @@ class CaptchaLoginView(LoginView):
else: else:
return self.form_invalid(form) return self.form_invalid(form)
@csrf_exempt @csrf_exempt
def get_service_address(request): def get_service_address(request):
if not request.POST['service']: if not request.POST['service']:
return JsonResponse({'status': 'success', 'address': ''}) return JsonResponse({'status': 'success', 'address': ''})
account = Account.objects.filter(service=Service.objects.get(pk=request.POST['service'])) account = Account.objects.filter(service=Service.objects.get(pk=request.POST['service']))
return JsonResponse({'status':'success', 'address': account.values().first()['address']}) return JsonResponse({'status': 'success', 'address': account.values().first()['address']})
def approve_account(request, pk):
def approve_account(request, pk):
custom_user_account = CustomUserAccount.objects.filter(id=pk).first() custom_user_account = CustomUserAccount.objects.filter(id=pk).first()
custom_user_account.status = RelacionUsuarioAccountStatus.objects.get_relacion_verificada() custom_user_account.status = RelacionUsuarioAccountStatus.objects.get_relacion_verificada()
custom_user_account.save() custom_user_account.save()
return HttpResponseRedirect('/accounts/approved/') return HttpResponseRedirect('/accounts/approved/')
def account_approved(request): def account_approved(request):
return render(request, 'django_registration/account_approved.html') return render(request, 'django_registration/account_approved.html')
@login_required(login_url='/accounts/login/') @login_required(login_url='/accounts/login/')
def update_user(request): def update_user(request):
custom_user = CustomUser.objects.get(user_id=request.user.id) custom_user = CustomUser.objects.get(user_id=request.user.id)
user = request.user user = request.user
...@@ -401,14 +408,16 @@ def update_user(request): ...@@ -401,14 +408,16 @@ def update_user(request):
custom_user.save() custom_user.save()
messages.success(request, _('user_updated')) messages.success(request, _('user_updated'))
except Exception: except Exception as e:
messages.error(request, _('user_update_error'), extra_tags='danger') messages.error(request, _('user_update_error'), extra_tags='danger')
client.captureException()
logger.error(str(e))
return HttpResponseRedirect('/mis_datos/') return HttpResponseRedirect('/mis_datos/')
@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':
return render(request, 'registration/change_password.html', {}) return render(request, 'registration/change_password.html', {})
else: else:
...@@ -418,4 +427,4 @@ def change_password(request): ...@@ -418,4 +427,4 @@ def change_password(request):
messages.success(request, _('password_changed')) messages.success(request, _('password_changed'))
return HttpResponseRedirect('/mis_datos/') return HttpResponseRedirect('/mis_datos/')
\ No newline at end of file
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