El separador de miles arruina silenciosamente el valor ingresado en la configuración

Historia de terror a continuación.

Un gestor de comunidad se puso en contacto con nosotros porque notó que el número de usuarios en su foro no estaba aumentando como solían hacerlo.

Tras una investigación, descubrimos que muchos usuarios que acababan de registrarse estaban siendo eliminados por considerarse inactivos.

Resultó que esto se debía a que la configuración clean_up_inactive_users_after_days estaba establecida en 1 :scream:

Así que hice clic en el icono de historial y vi que la configuración había sido cambiada de 730 (dos años) a 1.095 (tres años) hace más de un año.

Sí, amigos, cuando introducen una coma (o un punto, como es común en países de habla no inglesa) como separador de grupos de dígitos en una configuración numérica del sitio, se cortará silenciosamente(!) todo lo que esté detrás del primer separador. Para empeorar las cosas, esto solo será visible después de una actualización forzada de la página.

12 Me gusta

¿Me pregunto si otras configuraciones que usan valores numéricos altos se ven afectadas de esta manera también? :thinking:

6 Me gusta

Bueno, sí.
Cada configuración numérica se ve afectada, y hay muchos días, minutos y configuraciones genéricas de valores altos

imap_polling_old_emails:1000
decompressed_theme_max_file_size_mb:1000
topic_views_heat_low:1000
secure_uploads_max_email_embed_image_size_kb:1024
maximum_session_age:1440
post_edit_time_limit:1440
composer_media_optimization_image_resize_dimensions_threshold:1920
composer_media_optimization_image_resize_width_target:1920
max_bookmarks_per_user:2000
topic_views_heat_medium:2000
default_other_new_topic_duration_minutes:2880
polling_interval:3000
topic_views_heat_high:3500
max_image_size_kb:4096
max_attachment_size_kb:4096
min_topic_views_for_delete_confirm:5000
max_form_template_content_length:5000
invite_link_max_redemptions_limit:5000
sitemap_page_size:10000
max_notifications_per_user:10000
short_progress_text_threshold:10000
auto_close_topics_post_count:10000
max_drafts_per_user:10000
anonymous_account_duration_minutes:10080
default_email_digest_frequency:10080
tl3_requires_posts_read_cap:20000
anon_polling_interval:25000
max_post_length:32000
tl2_post_edit_time_limit:43200
max_export_file_size_kb:50000
max_bulk_invites:50000
background_polling_interval:60000
decompressed_backup_max_file_size_mb:100000
search_enable_recent_regular_posts_offset_size:200000
default_other_auto_track_topics_after_msecs:300000
max_draft_length:400000
composer_media_optimization_image_bytes_optimization_threshold:524288

suggested_topics_unread_max_days_old:
suggested_topics_max_days_old:
pending_users_reminder_delay_minutes:
invite_expiry_days:
purge_unactivated_users_grace_period_days:
anonymous_account_duration_minutes:
ignored_users_message_gap_days:
clean_up_inactive_users_after_days:
clean_up_unused_staged_users_after_days:
show_time_gap_days:
old_post_notice_days:
returning_users_days:
suppress_digest_email_after_days:
disallow_reply_by_email_after_days:
delete_email_logs_after_days:
reset_bounce_score_after_days:
delete_rejected_email_after_days:
purge_deleted_uploads_grace_period_days:
tl2_requires_days_visited:
tl3_requires_days_visited:
invalidate_inactive_admin_email_after_days:
send_old_credential_reminder_days:
search_query_log_max_retention_days:
cold_age_days_low:
cold_age_days_medium:
cold_age_days_high:
delete_drafts_older_than_n_days:
delete_merged_stub_topics_after_days:
default_other_new_topic_duration_minutes:
retain_web_hook_events_period_days:
revoke_api_keys_unused_days:
revoke_api_keys_maxlife_days:
revoke_user_api_keys_unused_days:
revoke_user_api_keys_maxlife_days:

7 Me gusta

¡Gracias por el informe, @RGJ! :pray:

Este es uno aterrador, en efecto. Lo hemos solucionado aquí 1) permitiendo solo entradas numéricas en la interfaz de usuario y 2) eliminando cualquier carácter no numérico en el backend para mayor seguridad.

11 Me gusta

Reabriendo esto, parece que las cosas han retrocedido e incluso han empeorado.

  • Ir a Admin → Configuración → Configuración básica → temas sugeridos

Firefox en escritorio

  • Introduce 5.0 y luego guarda (sin error) y actualiza → Encuentra que se ha establecido en 50
  • Introduce 5,0 y luego guarda (sin error) y actualiza → Encuentra que se ha establecido en 0

Safari en iOS

  • Introduce 5.0 y luego guarda (sin error) y actualiza → Encuentra que se ha establecido en 50
  • Introduce 5,0 y luego guarda (sin error) y actualiza → Encuentra que se ha establecido en 50
4 Me gusta

Gracias Richard por informar, definitivamente puedo reproducir esto.

2 Me gusta

¡Gracias por el informe, Richard! Yo también puedo replicar lo que describes. Todo está “diseñado” a día de hoy, excepto el 5,0 que resulta en 0 en Firefox, lo cual es un error. Es uno raro.

Parece que tenemos que revisar esto de nuevo, al menos para actualizar lo que ve el administrador para que sea preciso y no incluya los separadores. Actualmente, tienes que actualizar tu navegador web después de guardar los cambios para verlo.

Pero creo que también podemos hacer más aquí para ayudar al administrador a evitar cometer estos errores y a no confundirse con ellos. Me parece mal que puedas poner “364.5 días” en días máximos de antigüedad de temas sugeridos y que eso se convierta en 3645 días. Quizás simplemente no permitamos introducir caracteres no numéricos en este tipo de campos.

6 Me gusta

Corregido en FIX: Do not allow , or . in site setting integer input by martin-brennan · Pull Request #27618 · discourse/discourse · GitHub. Ya no es posible introducir nada que no sean números en estos campos. No más separadores , o ..

Anteriormente, solo saneábamos la entrada para la configuración del sitio de enteros en el lado del servidor, lo que era un poco confuso cuando los usuarios introducían, por ejemplo, 100.5 y terminaban con 1005, y no veían esto reflejado en la interfaz de usuario.

Ahora que utilizamos entradas numéricas nativas para estas configuraciones, podemos mejorar un poco la experiencia al no permitir . o , en la entrada, porque solo deben ser números enteros, y añadir un tamaño de paso de 1. Todos los demás caracteres ya están impedidos en esta entrada numérica nativa.

6 Me gusta

Este tema se cerró automáticamente después de 3 días. Ya no se permiten nuevas respuestas.