Publicaciones Similares
React select async
PorMarcosEscenario Estoy diseñando un formulario web en el que quiero mostrar un combo que se carga dinámicamente con una petición XHR. Problema Los datos a cargar cuentan con miles de registros. Necesito un combo que se cargue de manera dinámica y disponga de un autocomplete para filtrar los resultos. Solución React select es un módulo…
Chart.js: cómo cambiar el idioma (locale) dinámicamente
PorMarcosEscenario Por un lado una aplicación que permite al usuario personalizar el idioma del sitio. Por otro, una gráfica de tipo línea temporal generada con la biblioteca Chart.js, integrada en un módulo de React con react-chartjs-2. Problema Según un comentario de un usuario de Stackoverflow, basta con un require('moment/min/moment-with-locales'); y establecer el valor de la…
OsTicket y nginx
PorMarcosEscenario Después de 5 años campando en un Ubuntu 16.04 ha llegado la hora de migrar la aplicación osTicket a un nuevo servidor. Para quien no la conozca osTicket es un sistema de incidencias que podemos desplegar en un servidor propio. La aplicación web cuenta con una herramienta que automáticamente detecta una diferencia de versiones…
Autenticación múltiple en Spring boot: JWT y formulario
PorMarcosEscenario Por exigencias de un tercero debemos adaptar nuestro servicio web para que sea compatible con autenticación por JWT. Hasta ahora las llamadas al API se hacían desde dentro de la aplicación usando las mismas credenciales del usuario autenticado por cookie. La configuración de la cadena de filtros de Spring Security es la siguiente:
Java12345678910111213141516171819202122232425262728293031323334353637@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception{http.headers().frameOptions().disable().addHeaderWriter(new StaticHeadersWriter("Content-Security-Policy", "frame-ancestors 'self'")).and().csrf().requireCsrfProtectionMatcher(new AndRequestMatcher(CsrfFilter.DEFAULT_CSRF_MATCHER, new RegexRequestMatcher("^(?!/api/)", null))).and().authorizeRequests().antMatchers("/").fullyAuthenticated().antMatchers("/client/**").hasAnyAuthority("CLIENT", "SUPER_ADMIN", "ADMIN").antMatchers("/admin/**").hasAnyAuthority("SUPER_ADMIN", "ADMIN").antMatchers("/actuator/**").hasAnyAuthority("SUPER_ADMIN", "ADMIN").antMatchers("/api/auth/**").permitAll().antMatchers("/api/**").hasAnyAuthority("ADMIN", "SUPER_ADMIN", "CLIENT", "API_USER").and().formLogin().loginPage("/user/login").successHandler(successHandler()).failureUrl("/user/login?error=true").defaultSuccessUrl("/").usernameParameter("username").and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/user/logout")).deleteCookies("remember-me").logoutSuccessUrl("/user/login").and().rememberMe().userDetailsService(userDetailsService);return http.build();}…
Cómo instalar un certificado letsencrypt para un sitio gestionado por Cloudflare
PorMarcosEscenario Estamos usando CloudFlare para uno de nuestros dominios y necesitamos instalar o renovar un certificado de Letsencrypt. CloudFlare es un servicio que, entre otras, proporciona un proxy (intermediario) entre los visitantes del sitio y el servidor donde está hospedado el sitio web. Configuración de Cloudflare Gestionar un sitio web desde CloudFlare es sencillo. Después…
Sonata Admin: el calendario no se cierra
PorMarcosEscenario Incluir un filtro de rango de fechas en SonataAdmin que use un calendario para seleccionar la fecha es más o menos fácil. Primero añadimos el siguiente bloque en el admin de nuestra entidad:
PHP12345678910111213141516171819202122232425<?php// src/Admin/InvoiceAdmin.phpnamespace Acme\Admin;use Sonata\AdminBundle\Admin\AbstractAdmin;use Sonata\DoctrineORMAdminBundle\Filter\DateRangeFilter;use Sonata\Form\Type\DateTimeRangePickerType;/**** @author Marcos*/class InvoiceAdmin extends AbstractAdmin{protected function configureDatagridFilters(DatagridMapper $datagridMapper){$datagridMapper->add('createdAt', DateRangeFilter::class, array('label' => 'created_at','field_type' => DateTimeRangePickerType::class));}}</php>Y la siguiente clave bajo form_themesen el fichero config/packages/twig.yaml:
YAML123456twig:default_path: '%kernel.project_dir%/templates'debug: '%kernel.debug%'strict_variables: '%kernel.debug%'form_themes:- '@SonataForm/Form/datepicker.html.twig'Problema El calendario no se cierra automáticamente cuando se selecciona…