# Dev log configuration
#TODO: set mail, calendar and facebook app id as env variables ???
rapsys_blog:
    contact:
        address: 'blog@rapsys.eu'
        name: 'Raphaël Gertz'
    copy:
        by: 'Rapsys'
        link: 'https://rapsys.eu'
        long: 'All rights reserved'
        short: 'Copyright 2019-2023'
        title: 'By Raphaël'
    donate: 'https://paypal.me/milongaraphael'
    facebook:
        #TODO: set this as env variables ???
        apps: [ 3728770287223690 ]
        height: 630
        width: 1200
    icon:
        ico: '@RapsysBlog/ico/icon.ico'
        png:
            # Default
            256: '@RapsysBlog/png/icon.256.png'

            # For google
            # Chrome for Android home screen icon
            196: '@RapsysBlog/png/icon.196.png'
            # Google Developer Web App Manifest Recommendation
            192: '@RapsysBlog/png/icon.192.png'
            # Chrome Web Store icon
            128: '@RapsysBlog/png/icon.128.png'

            # Fallback
            32: '@RapsysBlog/png/icon.32.png'

            # For apple
            # XXX: old obsolete format: [57, 72, 76, 114, 120, 144]
            # XXX: see https://webhint.io/docs/user-guide/hints/hint-apple-touch-icons/
            # XXX: see https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html
            # iPhone Retina
            180: '@RapsysBlog/png/icon.180.png'
            # iPad Retina touch icon
            167: '@RapsysBlog/png/icon.167.png'
            # iPad touch icon
            152: '@RapsysBlog/png/icon.152.png'
            # iOS7
            120: '@RapsysBlog/png/icon.120.png'

            # For windows
            # XXX: see https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/dn255024(v=vs.85)
            310: '@RapsysBlog/png/icon.310.png'
            150: '@RapsysBlog/png/icon.150.png'
            70: '@RapsysBlog/png/icon.70.png'
        svg: '@RapsysBlog/svg/icon.svg'
    languages:
        en_gb: 'English'
        fr_fr: 'French'
    locale: 'fr_fr'
    locales: [ 'fr_fr', 'en_gb' ]
    logo:
        alt: 'Rapsys'' dev log logo'
        png: '@RapsysBlog/png/logo.png'
        svg: '@RapsysBlog/svg/logo.svg'
    root: 'rapsys_blog'
    title: 'Rapsys'' dev log'

#RapsysUser configuration
rapsys_user:
    #Class replacement
    class:
        group: 'Rapsys\BlogBundle\Entity\Group'
        civility: 'Rapsys\BlogBundle\Entity\Civility'
        user: 'Rapsys\BlogBundle\Entity\User'
    #Default replacement
    default:
        admin: 'ROLE_ADMIN'
        civility: 'Mister'
        group: [ 'User' ]
    #Route replacement
    route:
        index:
            name: 'rapsys_blog'
        register:
            name: 'rapsys_user_register'
    #Translate replacement
    translate: [ 'title', 'password', 'copy.by', 'copy.long', 'copy.short', 'copy.title', 'head.logo.alt', 'head.site' ]
    #Languages replacement
    languages: '%rapsys_blog.languages%'
    #Contact replacement
    contact: '%rapsys_blog.contact%'
    #Context replacement
    context:
        copy: '%rapsys_blog.copy%'
        head:
            icon: '%rapsys_blog.icon%'
            logo: '%rapsys_blog.logo%'
            root: '%rapsys_blog.root%'
            site: '%rapsys_blog.title%'
    #Edit replacement
    edit:
        admin:
            mail: true
            slug: true
        route:
            index: 'root'
        view:
            edit: 'Rapsys\BlogBundle\Form\EditType'
            name: '@RapsysBlog/form/edit.html.twig'
            context:
                title: 'Modify account'
                password: 'Modify password'
    #Index replacement
    index:
        route:
            index: 'root'
        view:
            name: '@RapsysBlog/user/index.html.twig'
            context:
                title: 'User list'
    #Login replacement
    login:
        route:
            index: 'root'
        view:
            name: '@RapsysBlog/form/login.html.twig'
            context:
                title: 'Login'
    #Recover replacement
    recover:
        route:
            index: 'root'
            recover: 'recover_url'
        view:
            name: '@RapsysBlog/form/recover.html.twig'
            context:
                title: 'Recover'
        mail:
            subject: 'Welcome back %%recipient_name%% to %%head.site%%'
            html: '@RapsysBlog/mail/recover.html.twig'
            text: '@RapsysBlog/mail/recover.text.twig'
            context:
    #Register replacement
    register:
        field:
            pseudonym: false
            slug: false
        route:
            index: 'root'
            confirm: 'confirm_url'
        view:
            form: 'Rapsys\BlogBundle\Form\RegisterType'
            name: '@RapsysBlog/form/register.html.twig'
            context:
                title: 'Register'
        mail:
            subject: 'Welcome %%recipient_name%% to %%head.site%%'
            html: '@RapsysBlog/mail/register.html.twig'
            text: '@RapsysBlog/mail/register.text.twig'
            context:

# Doctrine configuration
doctrine:
    # Orm configuration
    orm:
        # Replace repository factory
        repository_factory: 'Rapsys\BlogBundle\Factory\RepositoryFactory'

        #Force resolution of UserBundle entities to BlogBundle one
        #XXX: without these lines, relations are lookup in parent namespace ignoring BlogBundle extension
        resolve_target_entities:
            Rapsys\UserBundle\Entity\Group: 'Rapsys\BlogBundle\Entity\Group'
            Rapsys\UserBundle\Entity\Civility: 'Rapsys\BlogBundle\Entity\Civility'
            Rapsys\UserBundle\Entity\User: 'Rapsys\BlogBundle\Entity\User'

# Framework configuration
framework:
    default_locale: '%rapsys_blog.locale%'
    disallow_search_engine_index: false
    #error_controller: 'Rapsys\BlogBundle\Controller\ErrorController::show'
    mailer:
        headers:
            X-Originating-IP: '%env(REMOTE_ADDR)%'
    secret: '%env(APP_SECRET)%'
    csrf_protection: true
    session:
        enabled: true
        handler_id: ~
        storage_factory_id: 'session.storage.factory.native'
        cookie_secure: 'auto'
        cookie_samesite: 'lax'
    translator:
        fallbacks: '%rapsys_blog.locales%'

# Security configuration
security:
    # Set password hashers
    password_hashers:
        #XXX: comment this key in config/security.yaml to prevent users_in_memory induced failures
        #TODO: see https://symfony.com/doc/current/security/passwords.html (sodium ? + upgrade)
        Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
        #Rapsys\BlogBundle\Entity\User:
            algorithm: 'sodium'
            migrate_from:
                - 'bcrypt'
                - 'plaintext'

    # Set providers
    providers:
        database:
            entity:
                class: Rapsys\BlogBundle\Entity\User
                property: mail

    # Set firewall
    firewalls:
        # Disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            # Allow anonymous access
            #anonymous: ~
            #lazy: true

            # Activate database provider
            #XXX: comment this key in config/security.yaml to prevent users_in_memory induced failures
            provider: database

            # Activate user checker
            user_checker: 'security.user_checker'

            #XXX: https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
            #http_basic: ~

            # Set form login
            #XXX: https://symfony.com/doc/current/security/form_login_setup.html
            #TODO: https://symfony.com/doc/current/security/guard_authentication.html
            form_login:
                # Redirect to referer if different from login route
                use_referer: true
                # Login path
                login_path: rapsys_user_login
                # Check path
                check_path: rapsys_user_login
                # Username parameter
                username_parameter: 'login[mail]'
                # Password parameter
                password_parameter: 'login[password]'
                # Enable login csrf protection
                enable_csrf: false
                # Csrf parameter
                csrf_parameter: 'login[_token]'
                # Csrf id
                csrf_token_id: 'login'

            # Set logout route
            logout:
                # Logout route
                path: rapsys_user_logout
                # Logout default target
                target: rapsys_blog

            # Set custom access denied handler
            #access_denied_handler: Rapsys\BlogBundle\Handler\AccessDeniedHandler

            # Remember me
            #XXX: see https://symfony.com/doc/current/security/remember_me.html
            remember_me:
                # Use APP_SECRET
                secret: '%kernel.secret%'
                # Always remember me
                always_remember_me: true

    # Set role hierarchy
    role_hierarchy:
        ROLE_USER: [ 'ROLE_GUEST' ]
        ROLE_ADMIN: [ 'ROLE_GUEST', 'ROLE_USER' ]

#Service configuration
services:
    #Register abstract controller
    Rapsys\BlogBundle\Controller\AbstractController:
        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
        tags: [ 'controller.service_arguments' ]
    #Register article controller
    Rapsys\BlogBundle\Controller\ArticleController:
        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
        tags: [ 'controller.service_arguments' ]
    #Register default controller
    Rapsys\BlogBundle\Controller\DefaultController:
        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
        tags: [ 'controller.service_arguments' ]
    #Register keyword controller
    Rapsys\BlogBundle\Controller\KeywordController:
        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
        tags: [ 'controller.service_arguments' ]
    Rapsys\BlogBundle\Factory\RepositoryFactory:
        arguments: [ '@request_stack', '@router', '@rapsys_pack.slugger_util', '@translator', '%rapsys_blog.languages%', '%rapsys_blog.locale%' ]
    #Register blog fixture
    Rapsys\BlogBundle\Fixture\BlogFixture:
        arguments: [ '@rapsys_pack.slugger_util' ]
        tags: [ 'doctrine.fixture.orm' ]
    #Register form factory as public
    form.factory:
        class: 'Symfony\Component\Form\FormFactory'
        arguments: [ '@form.registry' ]
        public: true
    #Register facebook event subscriber
    Rapsys\PackBundle\Subscriber\FacebookSubscriber:
        arguments: [ '@router', '%rapsys_blog.locales%' ]
        tags: [ 'kernel.event_subscriber' ]
    #Register facebook util service
    rapsys_blog.facebook_util:
        class: 'Rapsys\PackBundle\Util\FacebookUtil'
        #TODO: create the facebook.png file and add the fonts
        #TODO: add a default font
        arguments: [ '@router',  '%kernel.project_dir%/var/cache', '%rapsys_pack.path%', 'facebook', '%rapsys_blog.path%/png/facebook.png', { irishgrover: '%rapsys_blog.path%/ttf/irishgrover.v10.ttf', labelleaurore: '%rapsys_blog.path%/ttf/labelleaurore.v10.ttf', dejavusans: '%rapsys_blog.path%/ttf/dejavusans.2.37.ttf', droidsans: '%rapsys_blog.path%/ttf/droidsans.regular.ttf' } ]
        public: true
    #Register contact form type
    Rapsys\BlogBundle\Form\ContactType:
        arguments: [ '@rapsys_pack.image_util', '@rapsys_pack.slugger_util', '@translator' ]
        tags: [ 'form.type' ]

# Twig configuration
twig:
    #Enforce debug
    debug: true
    #auto_reload: ~
    #Disable cache
    #XXX: enable forced regeneration of css and js at each page load
    cache: false
    #Fix form layout for css
    #XXX: @RapsysBlog is a shortcut to vendor/rapsys/blogbundle/Resources/views directory here
    form_theme: [ '@RapsysBlog/form/form_div_layout.html.twig' ]
    #Set twig paths
    paths:
        #Required by email.image(site_logo) directive
        #XXX: Allow twig to resolve @RapsysBlog/png/logo.png in vendor/rapsys/blogbundle/Resources/public/png/logo.png
        '%kernel.project_dir%/vendor/rapsys/blogbundle/Resources/public': 'RapsysBlog'