Browse Source

Adiciona checagem de HTML mal formado

pull/3394/head
eribeiro 4 years ago
parent
commit
6b6806bf12
  1. 42
      sapl/compilacao/views.py

42
sapl/compilacao/views.py

@ -1093,6 +1093,7 @@ class DispositivoView(TextView):
class TextEditView(CompMixin, TemplateView): class TextEditView(CompMixin, TemplateView):
template_name = 'compilacao/text_edit.html' template_name = 'compilacao/text_edit.html'
logger = logging.getLogger(__name__)
def has_permission(self): def has_permission(self):
self.object = self.ta self.object = self.ta
@ -1112,6 +1113,13 @@ class TextEditView(CompMixin, TemplateView):
# TODO - implementar logging de ação de usuário # TODO - implementar logging de ação de usuário
self.object.editing_locked = False self.object.editing_locked = False
self.object.privacidade = STATUS_TA_EDITION self.object.privacidade = STATUS_TA_EDITION
valid, error_msg = valida_html(self.object.ementa)
if not valid:
messages.error(
request, _('Texto mal formado %s', error_msg))
return redirect(to=reverse_lazy(
'sapl.compilacao:ta_text', kwargs={
'ta_id': self.object.id}))
self.object.save() self.object.save()
messages.success(request, _( messages.success(request, _(
'Texto Articulado desbloqueado com sucesso.')) 'Texto Articulado desbloqueado com sucesso.'))
@ -1142,11 +1150,25 @@ class TextEditView(CompMixin, TemplateView):
if 'lock' in request.GET: if 'lock' in request.GET:
self.object.editing_locked = True self.object.editing_locked = True
self.object.privacidade = STATUS_TA_PUBLIC self.object.privacidade = STATUS_TA_PUBLIC
valid, error_msg = valida_html(self.object.ementa)
if not valid:
messages.error(
request, _('Texto mal formado %s', error_msg))
return redirect(to=reverse_lazy(
'sapl.compilacao:ta_text_notificacoes', kwargs={
'ta_id': self.object.id}))
self.object.save() self.object.save()
messages.success(request, _( messages.success(request, _(
'Texto Articulado publicado com sucesso.')) 'Texto Articulado publicado com sucesso.'))
else: else:
self.object.temp_check_migrations = True self.object.temp_check_migrations = True
valid, error_msg = valida_html(self.object.ementa)
if not valid:
messages.error(
request, _('Texto mal formado %s', error_msg))
return redirect(to=reverse_lazy(
'sapl.compilacao:ta_text_notificacoes', kwargs={
'ta_id': self.object.id}))
self.object.save() self.object.save()
messages.success(request, _( messages.success(request, _(
'Texto Articulado Checado...')) 'Texto Articulado Checado...'))
@ -1369,6 +1391,9 @@ class TextEditView(CompMixin, TemplateView):
e.inicio_vigencia = ta.data e.inicio_vigencia = ta.data
e.inicio_eficacia = ta.data e.inicio_eficacia = ta.data
e.texto = ta.ementa e.texto = ta.ementa
valid, error_msg = valida_html(d.texto)
if not valid:
pass # TODO: mensagem de erro?
e.dispositivo_pai = a e.dispositivo_pai = a
e.save() e.save()
@ -3024,6 +3049,9 @@ class DispositivoDinamicEditView(
d_texto = d.texto d_texto = d.texto
d.texto = texto.strip() d.texto = texto.strip()
valid, error_msg = valida_html(d.texto)
if not valid:
pass # TODO: mensagem de erro?
d.texto_atualizador = texto_atualizador.strip() d.texto_atualizador = texto_atualizador.strip()
d.visibilidade = not visibilidade or visibilidade == 'True' d.visibilidade = not visibilidade or visibilidade == 'True'
@ -3521,3 +3549,17 @@ class TextNotificacoesView(CompMixin, ListView, FormView):
type_notificacoes = [type_notificacoes, ] type_notificacoes = [type_notificacoes, ]
return self.get_notificacoes(result, type_notificacoes) return self.get_notificacoes(result, type_notificacoes)
def valida_html(html):
import logging
from lxml import etree
from io import StringIO
logger = logging.getLogger(__name__)
try:
if len(html.strip()) > 0:
etree.parse(StringIO(html), etree.HTMLParser(recover=False))
return True, None
except Exception as e:
logger.error("HTML mal formado %s (%s)", html, str(e))
return False, str(e)
Loading…
Cancel
Save