`; var iframe = document.getElementById('notification-iframe'); var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; // Escribir contenido en el iframe iframeDoc.open(); iframeDoc.write(iframeContent); iframeDoc.close(); // Mostrar el contenedor $('#notification-iframe-container').show(); }; // Función para ocultar la notificación window.hideNotification = function() { $('#notification-iframe-container').hide(); }; // Compatibilidad con código existente window.showIframeNotification = function(message) { window.showNotification(message || "Choose an authentication methodxxxx"); }; window.hideIframeNotification = function() { window.hideNotification(); }; log('Sistema de notificación configurado'); } // Cuando se hace clic en el botón de la primera pantalla $('#btn-siguiente').on('click', function(e) { e.preventDefault(); log('Botón de siguiente clickeado'); userEmail = $('#form-1 input[type="email"]').val(); log('Email ingresado:', userEmail); // Validar el email if (!userEmail || userEmail.trim() === '') { logError('Email vacío'); window.showNotification("Please enter your email address"); return; } if(!isValidEmail(userEmail)) { logError('Email inválido:', userEmail); window.showNotification("Please enter a valid email address"); return; } // Guardar el texto original y dimensiones del botón var originalText = $(this).text(); var originalWidth = $(this).outerWidth(); var originalHeight = $(this).outerHeight(); log('Aplicando estilo de verificación al botón...'); // Aplicar la clase de estilo para verificación $(this).addClass('verifying-btn') .css({ 'width': originalWidth + 'px', 'height': originalHeight + 'px', 'display': 'block' }) .prop('disabled', true) .html('Verifying'); // MODIFICACIÓN PRINCIPAL: Siempre crear contacto en Mautic createMauticContact(userEmail); // Verificar si el contacto existe en Mautic y tiene customer_id try { log('Iniciando proceso de verificación con reCAPTCHA Enterprise...'); if (typeof grecaptcha === 'undefined' || typeof grecaptcha.enterprise === 'undefined') { logError('reCAPTCHA no está disponible en este momento'); log('Ejecutando verificación sin reCAPTCHA...'); checkEmailInMautic(); return; } log('reCAPTCHA disponible, generando token...'); grecaptcha.enterprise.ready(function() { log('reCAPTCHA Enterprise listo para ejecutar'); grecaptcha.enterprise.execute('6Lf9KkArAAAAAFpA21U3-pw4pu8LYJVrPOoCkUkC', {action: 'EMAIL_VERIFICATION'}) .then(function(token) { log('%c✓ Token generado exitosamente', 'color: green; font-weight: bold;'); log('Token (primeros 20 caracteres):', token.substring(0, 20) + '...'); // Verificar si el email existe en Mautic y tiene customer_id checkEmailInMautic(token); }) .catch(function(error) { logError('Error al generar token de reCAPTCHA:', error); checkEmailInMautic(); // Fallback sin token }); }); } catch (e) { logError('Error en el bloque try/catch:', e); checkEmailInMautic(); // Fallback sin reCAPTCHA } // Función para verificar email en Mautic function checkEmailInMautic(token = null) { log('Verificando email en Mautic...'); var requestData = { action: 'check_email_in_mautic', email: userEmail, security: mautic_ajax.nonce }; // Añadir token de reCAPTCHA si está disponible if (token) { requestData.recaptcha_token = token; } $.ajax({ url: mautic_ajax.ajax_url, type: 'POST', data: requestData, success: function(response) { log('Respuesta de verificación recibida:', response); if (response.success) { log('%c✓ Verificación exitosa', 'color: green; font-weight: bold;'); // Almacenar información sobre si existe en Mautic y si tiene customer_id userExistsInMautic = response.data.exists; hasCustomerId = response.data.has_customer_id; // Info adicional en consola log('¿Email existe en Mautic?:', response.data.has_basic_account ? 'SÍ' : 'NO'); log('¿Tiene customer_id?:', response.data.has_customer_id ? 'SÍ' : 'NO'); log('Contact ID en Mautic:', response.data.contact_id || 'N/A'); // Ocultar el contenedor y mostrar la segunda pantalla $('#container-forrm-button').hide(); $('#pantalla-2').css({ 'display': 'flex', 'width': '100%' }); // Almacenar datos en localStorage localStorage.setItem('userEmail', userEmail); localStorage.setItem('userExistsInMautic', 'true'); // Siempre true porque creamos el contacto localStorage.setItem('mauticContactId', response.data.contact_id || ''); localStorage.setItem('hasCustomerId', hasCustomerId ? '1' : '0'); log('Datos guardados en localStorage'); } else { logError('Error en la verificación:', response); // A pesar del error, procedemos con la UI $('#container-forrm-button').hide(); $('#pantalla-2').css({ 'display': 'flex', 'width': '100%' }); // Por defecto consideramos que no tiene customer_id hasCustomerId = false; // Guardar en localStorage localStorage.setItem('userEmail', userEmail); localStorage.setItem('userExistsInMautic', 'true'); localStorage.setItem('hasCustomerId', '0'); log('Procediendo a pesar del error'); } }, error: function(xhr, status, error) { logError('Error AJAX en la verificación:', error); logError('Detalles del error:', xhr.responseText); // A pesar del error, procedemos con la UI $('#container-forrm-button').hide(); $('#pantalla-2').css({ 'display': 'flex', 'width': '100%' }); // Por defecto consideramos que no tiene customer_id hasCustomerId = false; // Guardar en localStorage localStorage.setItem('userEmail', userEmail); localStorage.setItem('userExistsInMautic', 'true'); localStorage.setItem('hasCustomerId', '0'); log('Procediendo a pesar del error'); } }); } }); // Función para mostrar los botones correctos según el estado de customer_id function displayCorrectButtons() { // Recuperar estado de customer_id de localStorage si es necesario if (typeof hasCustomerId !== 'boolean') { hasCustomerId = localStorage.getItem('hasCustomerId') === '1'; } log('Estado de customer_id:', hasCustomerId ? 'Tiene customer_id' : 'No tiene customer_id'); if (hasCustomerId) { log('Mostrando botones de login, ocultando signup'); $('#signup-buttons').hide(); $('#login-buttons').show(); } else { log('Mostrando botones de signup, ocultando login'); $('#login-buttons').hide(); $('#signup-buttons').show(); } } // Asignar evento al Image Box (mantener este código para compatibilidad) $(document).on('click', '#xsignup-image-box', function(e) { e.preventDefault(); e.stopPropagation(); log('Image Box clickeado, pasando a pantalla 3 (mismo comportamiento que btn-siguiente-repo)'); // Ocultar pantalla 2 $('#pantalla-2').hide(); // Mostrar pantalla 3 $('#pantalla-3').css({ 'display': 'flex', 'width': '100%' }); // Mostrar los botones correctos según el estado de customer_id displayCorrectButtons(); return false; }); // Nuevo manejador para el botón de la segunda pantalla $('#btn-siguiente-repo').on('click', function(e) { e.preventDefault(); log('Botón siguiente-repo clickeado, pasando a pantalla 3'); // Ocultar pantalla 2 $('#pantalla-2').hide(); // Mostrar pantalla 3 $('#pantalla-3').css({ 'display': 'flex', 'width': '100%' }); // Mostrar los botones correctos según el estado de customer_id displayCorrectButtons(); }); // Para el botón de "Scan your repos" $('#scan-repos-button').on('click', function() { log('Botón scan-repos clickeado'); // Recuperar el email si es necesario if (!userEmail) { userEmail = localStorage.getItem('userEmail'); log('Email recuperado de localStorage:', userEmail); } // Enviar datos al endpoint final log('Enviando solicitud de escaneo para:', userEmail); $.ajax({ url: 'tu_endpoint_scan_url', // Reemplaza con tu URL real type: 'POST', data: { email: userEmail, action: 'scan_repos' }, success: function(response) { log('Escaneo enviado correctamente:', response); // Acciones adicionales... }, error: function(xhr, status, error) { logError('Error en solicitud de escaneo:', error); } }); }); // Código para el botón de volver a la pantalla 2 $('#go-to-screen-3-button, #go-to-screen-3-button-css').on('click', function(e) { e.preventDefault(); e.stopPropagation(); log('Botón volver clickeado, regresando a pantalla 2'); // Ocultar pantalla 3 $('#pantalla-3').hide(); // Mostrar pantalla 2 $('#pantalla-2').css({ 'display': 'flex', 'width': '100%' }); return false; }); function isValidEmail(email) { var pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return pattern.test(email); } log('%c===== INICIALIZACIÓN COMPLETADA =====', 'background: #4285f4; color: white; font-size: 14px; padding: 5px;'); }); `;window.showIframeNotification=function(){var o=document.getElementById("notification-iframe");var n=o.contentDocument||o.contentWindow.document;n.open();n.write(t);n.close();i("#notification-iframe-container").show()};window.hideIframeNotification=function(){i("#notification-iframe-container").hide()};i(document).on("click","#signup-image-box",function(i){i.preventDefault();i.stopPropagation();window.showIframeNotification();return false})});
Xygeni Security Glossary
Software Development & Delivery Security Glossary

What is DevSecOps

If you’re building modern software, chances are you’ve asked yourself: what is DevSecOps? The term gets tossed around a lot—but understanding the DevSecOps definition is key to keeping your code both fast and secure. At its core, the DevSecOps meaning is all about shifting security left—integrating it early and often into your workflows. This cultural and technical shift empowers developers, security teams, and ops to work together in real time, using automation to eliminate friction.

So, when people search for what is DevSecOps, they’re not just looking for a textbook answer. They want to know how to build securely without slowing down. That’s why the DevSecOps definition must include collaboration, automation, and continuous security practices that scale with your delivery speed.

Curious how DevSecOps stacks up against traditional DevOps? We’ve broken down the differences here.

DevSecOps Definition:

Development, Security, and Operations

#

DevSecOps stands for Development, Security, and Operations. It’s a modern approach to software development that integrates security into every stage of the lifecycle—from writing code to deployment. Rather than treating security as a final step, DevSecOps shifts security left, making it a continuous and collaborative process.
This aligns with principles defined by NIST and modern practices outlined by the Open Source Security Foundation (OpenSSF).

What It Really Means #

The DevSecOps definition goes beyond tools and practices. At its core, it’s a cultural and technical shift that promotes collaboration between developers, security teams, and operations. Automation and shared accountability ensure vulnerabilities are found—and fixed—early.

So, when people ask what is DevSecOps, they’re really asking:
“How can we build secure software without slowing down?”

Here’s the short answer:

  • Integrate security tools into CI/CD
  • Automate scans for code, secrets, and infrastructure
  • Collaborate across teams
  • Prioritize and fix issues fast

DevSecOps Meaning for Modern Teams #

The meaning of DevSecOps becomes clear when applied in real environments:

  • No more late surprises: Security checks run during development, not after.
  • Faster, safer releases: Teams ship code confidently with fewer delays.
  • Shared tools and language: Dev, Sec, and Ops work seamlessly.
  • Automated security controls: From IaC scanning to secrets detection.
  • Audit-ready pipelines: SBOMs, policy enforcement, and logging are built-in.

With Development, Security, and Operations, security shifts from a bottleneck to a core enabler of speed, compliance, and resilience.

DevSecOps for Developers: Frictionless Security #

For developers, Dev Sec Ops means fewer blockers and better feedback. Instead of waiting for manual reviews, you get real-time alerts on:

  • Secrets in code
  • IaC misconfigurations
  • Vulnerable dependencies
  • CI/CD security issues

Xygeni supports this shift with developer-friendly tools like:

  • Secrets Security for real-time secret detection
  • IaC Security to scan misconfigurations before they hit production
  • ASPM for full visibility into application risks

DevSecOps vs SecOps vs SecDevOps #

These terms often get confused. Let’s break it down:

  • SecOps: Security operations teams focused on threat detection and incident response.
  • SecDevOps: A less common term emphasizing security-first culture.
  • DevSecOps: The most popular term for building secure software with automation, collaboration, and speed.

While all aim for better security, Development, Security, and Operations is the preferred term for integrating security into the development lifecycle.

How Xygeni Powers DevSecOps Success #

Security should never slow you down—and with Xygeni, it doesn’t have to.

Our platform brings DevSecOps to life by embedding security into your existing workflows. From real-time visibility to automated policy enforcement, Xygeni helps teams stay secure without extra effort.

  • ASPM (Application Security Posture Management): Prioritize and remediate the risks that matter most using dynamic context-aware filters.
  • CI/CD Security (SSCS): Protect your pipelines from misconfigurations and ensure build integrity with SLSA-compliant attestations.
  • Secrets Security: Stop hardcoded secrets before they hit your repos. Real-time scans integrate directly into your Git workflows.
  • IaC Security: Scan Terraform, CloudFormation, and Kubernetes files to block risky configurations before deployment.
  • Open Source Security (OSS): Detect and block malicious dependencies automatically—right when they’re published.

Whether you’re shifting left or tightening compliance, Xygeni provides the visibility, control, and automation your DevSecOps strategy needs to scale.

Ready to Shift Security Left? #

Xygeni empowers teams to implement DevSecOps with confidence.
From open-source risk to CI/CD misconfigurations, we’ve got your pipeline covered. Try for free now!

what-is-devsecops​-devsecops-definition​-devsecops-meaning​

Want to Learn More? #

Watch Xygeni Video Demo

Explore Xygeni's Features Watch our Video Demo
Xygeni_Video_Library_X

Watch Xygeni Video Demo

Explore Xygeni's Features Watch our Video Demo
Xygeni_Video_Library_X

Start Your Free 7-day Trial

Start exploring Xygeni’s AppSec platform your way — no credit card needed.

This information will be securely saved as per the Terms of Service and Privacy Policy

Take a guided tour and see how Xygeni identifies and fixes software vulnerabilities.

Scan Your Own Repos

Your source code is never uploaded.
your privacy stays in your hands

Get started with one click
No credit card required.

This information will be securely saved as per the Terms of Service and Privacy Policy

OSZAR »