Skip to content
Snippets Groups Projects
Select Git revision
  • 00cef2a75fa3357160f9f7baa5eb00879cffd971
  • main default protected
  • register-logging-channel
  • expr-lang
  • ci-82
  • attr-events
  • locale-wip
  • custom-routes
  • v0.1.85
  • v0.1.84
  • v0.1.83
  • v0.1.82
  • v0.1.81
  • v0.1.80
  • v0.1.79
  • v0.1.78
  • v0.1.77
  • v0.1.76
  • v0.1.75
  • v0.1.74
  • v0.1.73
  • v0.1.72
  • v0.1.71
  • v0.1.70
  • v0.1.69
  • v0.1.68
  • v0.1.67
  • v0.1.65
28 results

LocaleTest.php

Blame
    • Reiter, Christoph's avatar
      00cef2a7
      Add a locale service for working with the the active locale · 00cef2a7
      Reiter, Christoph authored
      We currently configure symfony to apply the "Accept-Language"
      header to all requests, so there remain only two cases where
      we need to manually adjust things:
      
      * In case an endpoint renders HTML that is displayed in an iframe
      or popup we still need to provide an option to pass a language via
      a query parameter. This then takes precedence over the header.
      
      * In case we need a language identifier for another service, where
      we need to request an external resource for a specific language.
      In this case we either need to take the request language or in case
      we are in a CLI context the default locale configured in symfony.
      00cef2a7
      History
      Add a locale service for working with the the active locale
      Reiter, Christoph authored
      We currently configure symfony to apply the "Accept-Language"
      header to all requests, so there remain only two cases where
      we need to manually adjust things:
      
      * In case an endpoint renders HTML that is displayed in an iframe
      or popup we still need to provide an option to pass a language via
      a query parameter. This then takes precedence over the header.
      
      * In case we need a language identifier for another service, where
      we need to request an external resource for a specific language.
      In this case we either need to take the request language or in case
      we are in a CLI context the default locale configured in symfony.
    index.js 4.18 KiB
    import './auth/api-platform-auth.js';
    
    function log(message) {
        console.log('API docs: ' + message);
    }
    
    function useToken(token) {
        var authContainer = null;
        var btn = document.getElementsByClassName('btn authorize unlocked')[0];
        if (btn !== undefined) {
            btn.click();
            authContainer = document.getElementsByClassName('auth-container')[0];
        } else {
            btn = document.getElementsByClassName('btn authorize locked')[0];
            btn.click();
            authContainer = document.getElementsByClassName('auth-container')[0];
            authContainer.children[0].children[1].children[0].click(); // Logout
        }
    
        var pwInput = authContainer.children[0].children[0].children[0].children[4].children[1].children[0];
        var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;
        if (token)
            token = 'Bearer ' + token;
        nativeInputValueSetter.call(pwInput, token); //'react 16 value');
    
        var ev2 = new Event('input', { bubbles: true});
        pwInput.dispatchEvent(ev2);
    
        // --------
        var btnLogin = authContainer.children[0].children[1].children[0];
        btnLogin.click(); // Login
        authContainer.children[0].children[1].children[1].click(); // Close
        if (token)
            log('New token set');
    }
    
    var delayInsertTimer = 0;
    
    function getKeycloakServerUrl() {
        let config = window.oidcConfig;
        if (config.keycloakUrl.length) {
            // deprecated config value, remove once removed in the auth/oidc bundle
            return config.keycloakUrl;
        } else if (config.oidcServer.length) {
            let url = config.oidcServer;
            // XXX: extract the base url from the server url, hacky put works..
            // In the future we might want to use a non-keycloak specific component here,
            // and fetch .well-known/openid-configuration
            let match = url.match(/(?<base>.*)\/realms\/(?<realm>[^/]*)/);
            if (match !== null) {
                return match.groups.base;
            }
        }
        return '';
    }
    
    function getKeycloakRealm()
    {
        let config = window.oidcConfig;
        if (config.keycloakRealm.length) {
            // deprecated config value, remove once removed in the auth/oidc bundle
            return config.keycloakRealm;
        } else if (config.oidcServer.length) {
            let url = config.oidcServer;
            // XXX: extract the realm from the server url, hacky put works..
            // In the future we might want to use a non-keycloak specific component here,
            // and fetch .well-known/openid-configuration
            let match = url.match(/(?<base>.*)\/realms\/(?<realm>[^/]*)/);
            if (match !== null) {
                return match.groups.realm;
            }
        }
        return '';
    }
    
    function getKeycloakClientId() {
        let config = window.oidcConfig;
        if (config.keycloakClientId.length) {
            // deprecated config value, remove once removed in the auth/oidc bundle
            return config.keycloakClientId;
        } else if (config.oidcFrontendClientId.length) {
            return config.oidcFrontendClientId;
        }
        return '';
    }
    
    function insertDBPContainer() {
        let target = document.getElementsByClassName('scheme-container')[0];
        if (target === undefined)
            return;
    
        // see ../auth/README.md
        var element = document.createElement('api-platform-auth');
    
        element.setAttribute('lang', 'en');
        element.setAttribute('url', getKeycloakServerUrl());
        element.setAttribute('realm', getKeycloakRealm());
        element.setAttribute('client-id', getKeycloakClientId());
        element.setAttribute('silent-check-sso-redirect-uri', new URL("auth/silent-check-sso.html", import.meta.url).href);
        element.setAttribute('entry-point-url', new URL('../..', import.meta.url).href);
        element.setAttribute('auth', '');
        element.setAttribute('requested-login-status', '');
    
        var section = target.children[0];
        section.insertBefore(element, section.children[0]);
        window.clearInterval(delayInsertTimer);
        log('insertDBPContainer done');
    }
    
    function delayInsert() {
        delayInsertTimer = window.setInterval(insertDBPContainer, 10);
    }
    
    document.addEventListener('DOMContentLoaded', delayInsert);
    
    function onAuthUpdate(e) {
        useToken(e.detail.token);
    }
    
    window.addEventListener("api-platform-auth-update", onAuthUpdate);