diff --git a/.github/ci/files/bin/console b/.github/ci/files/bin/console index 0c9805c7..de28d8f6 100644 --- a/.github/ci/files/bin/console +++ b/.github/ci/files/bin/console @@ -16,8 +16,6 @@ use OpenDxp\Bootstrap; use OpenDxp\Console\Application; -ob_get_clean(); - include __DIR__ . '/../vendor/autoload_runtime.php'; define('OPENDXP_PROJECT_ROOT', __DIR__ . '/..'); diff --git a/.github/ci/files/config/bundles.php b/.github/ci/files/config/bundles.php index aa14853b..bb3c8118 100644 --- a/.github/ci/files/config/bundles.php +++ b/.github/ci/files/config/bundles.php @@ -1,5 +1,5 @@ ['all' => true], + OpenDxp\Bundle\AdminBundle\OpenDxpAdminBundle::class => ['all' => true], ]; diff --git a/.github/ci/files/config/config.yaml b/.github/ci/files/config/config.yaml index 459522ee..e0e2aae4 100644 --- a/.github/ci/files/config/config.yaml +++ b/.github/ci/files/config/config.yaml @@ -1,3 +1,82 @@ -imports: - - { resource: services.yaml } - - { resource: system.yaml } \ No newline at end of file +parameters: + secret: ThisTokenIsNotSoSecretChangeItImmediately + opendxp_test.db.dsn: '%env(OPENDXP_TEST_DB_DSN)%' + env(OPENDXP_TEST_DB_DSN): ~ + opendxp.encryption.secret: 'def00000fc1e34a17a03e2ef85329325b0736a5941633f8062f6b0a1a20f416751af119256bea0abf83ac33ef656b3fff087e1ce71fa6b8810d7f854fe2781f3fe4507f6' + +doctrine: + dbal: + connections: + default: + url: '%opendxp_test.db.dsn%' + mapping_types: + enum: string + bit: boolean + +opendxp: + general: + timezone: Europe/Berlin + path_variable: '' + domain: opendxp-test.dev + redirect_to_maindomain: false + valid_languages: + - en + - de + fallback_languages: + en: '' + de: '' + default_language: '' + disable_usage_statistics: true + documents: + versions: + days: null + steps: 10 + error_pages: + default: /error + allow_trailing_slash: 'no' + generate_preview: true + objects: + versions: + days: null + steps: 10 + assets: + versions: + days: null + steps: 10 + icc_rgb_profile: '' + icc_cmyk_profile: '' + full_page_cache: + enabled: false + lifetime: null + exclude_patterns: '' + exclude_cookie: '' + httpclient: + adapter: Socket + proxy_host: '' + proxy_port: '' + proxy_user: '' + proxy_pass: '' + email: + sender: + name: opendxp + email: contact@example.com + return: + name: opendxp + email: contact@example.com + debug: + email_addresses: '' + applicationlog: + mail_notification: + send_log_summary: false + filter_priority: null + mail_receiver: '' + archive_treshold: '30' + archive_alternative_database: '' + +opendxp_admin: + branding: + color_login_screen: '' + color_admin_interface: '' + login_screen_custom_image: '' + translations: + path: '@OpenDxpCoreBundle/translations' diff --git a/.github/ci/files/config/event_listeners.yaml b/.github/ci/files/config/event_listeners.yaml deleted file mode 100644 index ca56041e..00000000 --- a/.github/ci/files/config/event_listeners.yaml +++ /dev/null @@ -1,62 +0,0 @@ -services: - _defaults: - autowire: true - autoconfigure: true - - # - # SECURITY - # - - OpenDxp\Bundle\AdminBundle\EventListener\AdminSecurityListener: ~ - - OpenDxp\Bundle\AdminBundle\EventListener\CsrfProtectionListener: ~ - - # - # EXCEPTION HANDLING - # - - OpenDxp\Bundle\AdminBundle\EventListener\AdminExceptionListener: ~ - - # - # GRID CONFIG CLEANUP - # - - OpenDxp\Bundle\AdminBundle\EventListener\GridConfigListener: ~ - - # - # IMPORT CONFIG CLEANUP - # - - OpenDxp\Bundle\AdminBundle\EventListener\ImportConfigListener: ~ - - # - # MISC - # - - OpenDxp\Bundle\AdminBundle\EventListener\AdminSessionBagListener: ~ - - OpenDxp\Bundle\AdminBundle\EventListener\HttpCacheListener: ~ - - OpenDxp\Bundle\AdminBundle\EventListener\CustomAdminEntryPointCheckListener: - arguments: ['%opendxp_admin.custom_admin_path_identifier%'] - - OpenDxp\Bundle\AdminBundle\EventListener\UserPerspectiveListener: - calls: - - [setLogger, ['@logger']] - tags: - - { name: monolog.logger, channel: admin } - - OpenDxp\Bundle\AdminBundle\EventListener\UsageStatisticsListener: - calls: - - [setLogger, [ '@logger' ]] - tags: - - { name: monolog.logger, channel: admin_statistics } - - OpenDxp\Bundle\AdminBundle\EventListener\EnablePreviewTimeSliderListener: ~ - - # - # Workflows - # - - OpenDxp\Bundle\AdminBundle\EventListener\WorkflowManagementListener: - public: true # can be disabled diff --git a/.github/ci/files/config/export.yaml b/.github/ci/files/config/export.yaml deleted file mode 100644 index a2ac1db9..00000000 --- a/.github/ci/files/config/export.yaml +++ /dev/null @@ -1,268 +0,0 @@ -services: - _defaults: - autowire: true - autoconfigure: true - - # resolvers and operator/value factories will be injected from compiler pass - # TODO refactor how the service is used and change to private. Currently it is - # used in a static method fetching the service from the container. - OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Service: - public: true - - #TODO: BC Layer, remove with OpenDxp 12 - OpenDxp\DataObject\GridColumnConfig\Service: '@OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Service' - - # - # OPERATOR FACTORIES - # - - opendxp.data_object.grid_column_config.operator.factory.anonymizer: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Anonymizer - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Anonymizer } - - opendxp.data_object.grid_column_config.operator.factory.any_getter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\AnyGetter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: AnyGetter } - - opendxp.data_object.grid_column_config.operator.factory.arithmetic: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Arithmetic - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Arithmetic } - - opendxp.data_object.grid_column_config.operator.factory.asset_metadata_getter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\AssetMetadataGetter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: AssetMetadataGetter } - - opendxp.data_object.grid_column_config.operator.factory.base64: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Base64 - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Base64 } - - opendxp.data_object.grid_column_config.operator.factory.boolean: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Boolean - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Boolean } - - opendxp.data_object.grid_column_config.operator.factory.boolean_formatter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\BooleanFormatter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: BooleanFormatter } - - opendxp.data_object.grid_column_config.operator.factory.case_converter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\CaseConverter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: CaseConverter } - - opendxp.data_object.grid_column_config.operator.factory.char_counter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\CharCounter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: CharCounter } - - opendxp.data_object.grid_column_config.operator.factory.concatenator: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Concatenator - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Concatenator } - - opendxp.data_object.grid_column_config.operator.factory.date_formatter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\DateFormatter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: DateFormatter } - - opendxp.data_object.grid_column_config.operator.factory.element_counter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\ElementCounter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: ElementCounter } - - opendxp.data_object.grid_column_config.operator.factory.field_collection_getter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\FieldCollectionGetter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: FieldCollectionGetter } - - opendxp.data_object.grid_column_config.operator.factory.is_equal: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\IsEqual - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: IsEqual } - - opendxp.data_object.grid_column_config.operator.factory.iterator: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Iterator - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Iterator } - - opendxp.data_object.grid_column_config.operator.factory.geopoint_renderer: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\GeopointRenderer - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: GeopointRenderer } - - opendxp.data_object.grid_column_config.operator.factory.image_renderer: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\ImageRenderer - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: ImageRenderer } - - opendxp.data_object.grid_column_config.operator.factory.hotspotimage_renderer: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\HotspotimageRenderer - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: HotspotimageRenderer } - - opendxp.data_object.grid_column_config.operator.factory.json: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\JSON - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: JSON } - - opendxp.data_object.grid_column_config.operator.factory.lf_expander: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\LFExpanderFactory - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: LFExpander } - - opendxp.data_object.grid_column_config.operator.factory.locale_switcher: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\LocaleSwitcherFactory - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: LocaleSwitcher } - - opendxp.data_object.grid_column_config.operator.factory.merge: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Merge - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Merge } - - opendxp.data_object.grid_column_config.operator.factory.object_field_getter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\ObjectFieldGetter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: ObjectFieldGetter } - - opendxp.data_object.grid_column_config.operator.factory.php: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\PHP - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: PHP } - - opendxp.data_object.grid_column_config.operator.factory.php_code: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\PHPCode - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: PHPCode } - - opendxp.data_object.grid_column_config.operator.factory.property_getter: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\PropertyGetter - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: PropertyGetter } - - opendxp.data_object.grid_column_config.operator.factory.required_by: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\RequiredBy - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: RequiredBy } - - opendxp.data_object.grid_column_config.operator.factory.string_contains: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\StringContains - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: StringContains } - - opendxp.data_object.grid_column_config.operator.factory.string_replace: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\StringReplace - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: StringReplace } - - opendxp.data_object.grid_column_config.operator.factory.substring: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Substring - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Substring } - - opendxp.data_object.grid_column_config.operator.factory.text: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Text - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Text } - - opendxp.data_object.grid_column_config.operator.factory.translate_value: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\TranslateValueFactory - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: TranslateValue } - - opendxp.data_object.grid_column_config.operator.factory.trimmer: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Trimmer - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Trimmer } - - opendxp.data_object.grid_column_config.operator.factory.alias: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Alias - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: Alias } - - opendxp.data_object.grid_column_config.operator.factory.workflowstate: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\WorkflowStateFactory - tags: - - { name: opendxp.data_object.grid_column_config.operator_factory, id: WorkflowState } - - - - # - # VALUE FACTORIES - # - - opendxp.data_object.grid_column_config.value.factory.default: - class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Value\Factory\DefaultValueFactory - arguments: - $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Value\DefaultValue - tags: - - { name: opendxp.data_object.grid_column_config.value_factory, id: DefaultValue } - diff --git a/.github/ci/files/config/packages/security.yaml b/.github/ci/files/config/packages/security.yaml index a8c23f90..c2f2cf56 100644 --- a/.github/ci/files/config/packages/security.yaml +++ b/.github/ci/files/config/packages/security.yaml @@ -1,58 +1,20 @@ security: providers: opendxp_admin: - id: OpenDxp\Bundle\AdminBundle\Security\User\UserProvider - + id: OpenDxp\Security\User\UserProvider firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false - - # OpenDXP WebDAV HTTP basic // DO NOT CHANGE! opendxp_admin_webdav: pattern: ^/admin/asset/webdav provider: opendxp_admin http_basic: ~ - - # OpenDXP admin form login // DO NOT CHANGE! - opendxp_admin: - pattern: ^/admin(/.*)?$ - user_checker: OpenDxp\Bundle\AdminBundle\Security\User\UserChecker - provider: opendxp_admin - login_throttling: - max_attempts: 3 - interval: '5 minutes' - logout: - path: opendxp_admin_logout - target: opendxp_admin_login - form_login: - default_target_path: opendxp_admin_index - always_use_default_target_path: true - login_path: opendxp_admin_login - check_path: opendxp_admin_login_check - username_parameter: username - password_parameter: password - custom_authenticators: - - OpenDxp\Bundle\AdminBundle\Security\Authenticator\AdminTokenAuthenticator - two_factor: - auth_form_path: /admin/login/2fa # Path or route name of the two-factor form - check_path: /admin/login/2fa-verify # Path or route name of the two-factor code check - default_target_path: /admin # Where to redirect by default after successful authentication - always_use_default_target_path: false # If it should always redirect to default_target_path - auth_code_parameter_name: _auth_code # Name of the parameter for the two-factor authentication code - trusted_parameter_name: _trusted # Name of the parameter for the trusted device option - multi_factor: false # If ALL active two-factor methods need to be fulfilled (multi-factor authentication) - + opendxp_admin: '%opendxp_admin_bundle.firewall_settings%' access_control: - # OpenDXP admin ACl // DO NOT CHANGE! - { path: ^/admin/settings/display-custom-logo, roles: PUBLIC_ACCESS } - - { path: ^/admin/login/2fa-verify, roles: IS_AUTHENTICATED_2FA_IN_PROGRESS } - - { path: ^/admin/login/2fa-setup, roles: ROLE_OPENDXP_USER } - - { path: ^/admin/login/2fa, roles: IS_AUTHENTICATED_2FA_IN_PROGRESS } - { path: ^/admin/login$, roles: PUBLIC_ACCESS } - { path: ^/admin/login/(login|lostpassword|deeplink|csrf-token)$, roles: PUBLIC_ACCESS } - { path: ^/admin, roles: ROLE_OPENDXP_USER } - role_hierarchy: - # OpenDXP admin // DO NOT CHANGE! ROLE_OPENDXP_ADMIN: [ROLE_OPENDXP_USER] diff --git a/.github/ci/files/config/packages/test/config.yaml b/.github/ci/files/config/packages/test/config.yaml index 490d840c..d77183c8 100644 --- a/.github/ci/files/config/packages/test/config.yaml +++ b/.github/ci/files/config/packages/test/config.yaml @@ -1,32 +1,2 @@ imports: - { resource: ../../config.yaml } - -# this cache is used during tests when setting up opendxp -framework: - cache: - pools: - opendxp.cache.pool: - public: true - tags: true - default_lifetime: 31536000 # 1 year - adapter: cache.adapter.array - -doctrine: - dbal: - connections: - default: - server_version: '10.11' - url: '%opendxp_test.db.dsn%' - host: ~ - port: ~ - dbname: ~ - user: ~ - password: ~ - mapping_types: - enum: string - bit: boolean - -parameters: - opendxp_test.db.dsn: '%env(OPENDXP_TEST_DB_DSN)%' - env(OPENDXP_TEST_DB_DSN): ~ - opendxp.encryption.secret: 'def00000fc1e34a17a03e2ef85329325b0736a5941633f8062f6b0a1a20f416751af119256bea0abf83ac33ef656b3fff087e1ce71fa6b8810d7f854fe2781f3fe4507f6' diff --git a/.github/ci/files/config/routes/test/routes.yaml b/.github/ci/files/config/routes/test/routes.yaml new file mode 100755 index 00000000..4c18a901 --- /dev/null +++ b/.github/ci/files/config/routes/test/routes.yaml @@ -0,0 +1,2 @@ +_opendxp: + resource: '@OpenDxpCoreBundle/config/routing.yaml' diff --git a/.github/ci/files/config/security_services.yaml b/.github/ci/files/config/security_services.yaml deleted file mode 100644 index bce1e27f..00000000 --- a/.github/ci/files/config/security_services.yaml +++ /dev/null @@ -1,60 +0,0 @@ -services: - _defaults: - autowire: true - autoconfigure: true - - # - # SECURITY - # - - # standard user provider returning admin users wrapped in a OpenDxp\Bundle\AdminBundle\Security\User\User proxy object. - # using this user provider allows implementations to authenticate against opendxp users on every desired firewall - OpenDxp\Bundle\AdminBundle\Security\User\UserProvider: - public: true - - # the password hasher factory builds a dedicated hasher per user - # as we need the user instance to hash passwords. - # we don't specifiy this as fully qualified class name as there can be multiple factories (one for each user type) - opendxp_admin.security.password_hasher_factory: - class: OpenDxp\Security\Hasher\Factory\UserAwarePasswordHasherFactory - arguments: - - OpenDxp\Bundle\AdminBundle\Security\Hasher\AdminPasswordHasher - - # Authenticators for handling admin login and session authentications - OpenDxp\Bundle\AdminBundle\Security\Authenticator\AdminTokenAuthenticator: - calls: - - [ setLogger, [ '@logger' ] ] - tags: - - { name: monolog.logger, channel: security } - - OpenDxp\Bundle\AdminBundle\Security\Event\LogoutListener: - tags: - - { name: 'kernel.event_subscriber', dispatcher: 'security.event_dispatcher.opendxp_admin'} - - OpenDxp\Bundle\AdminBundle\Security\User\TokenStorageUserResolver: - public: true - arguments: - - '@security.token_storage' - - OpenDxp\Bundle\AdminBundle\Security\User\UserLoader: ~ - - OpenDxp\Bundle\AdminBundle\Security\CsrfProtectionHandler: - public: true - arguments: - - '%opendxp_admin.csrf_protection.excluded_routes%' - - '@twig' - calls: - - [setLogger, ['@logger']] - tags: - - { name: monolog.logger, channel: security } - - OpenDxp\Bundle\AdminBundle\Security\ContentSecurityPolicyHandler: - public: true - calls: - - [ setLogger, [ '@logger' ] ] - tags: - - { name: monolog.logger, channel: security } - - # user checker checking admin users for validity - OpenDxp\Bundle\AdminBundle\Security\User\UserChecker: ~ - diff --git a/.github/ci/files/config/serializer.yaml b/.github/ci/files/config/serializer.yaml deleted file mode 100644 index c6c5b6a0..00000000 --- a/.github/ci/files/config/serializer.yaml +++ /dev/null @@ -1,31 +0,0 @@ -services: - _defaults: - autowire: true - - # - # SERIALIZER - # - # We use an isolated serializer instance in the admin area to make sure the admin doesn't break when the global - # serializer is used and configured in client applications. For example, we don't want to use most of the normalizers - # which are preconfigured as we basically only need json_encode with error handling and reference loop detection. - # - # This allows to use the power and flexibility of the serializer component in both admin and website contexts - # without influencing each other. - # - - OpenDxp\Admin\Serializer: - class: Symfony\Component\Serializer\Serializer - public: true - arguments: ['@?', '@?'] - - opendxp_admin.serializer: - alias: OpenDxp\Admin\Serializer - public: true - - Symfony\Component\Serializer\Encoder\JsonEncoder: - tags: - - { name: opendxp_admin.serializer.encoder } - - OpenDxp\Bundle\AdminBundle\Serializer\Normalizer\ReferenceLoopNormalizer: - tags: - - { name: opendxp_admin.serializer.normalizer } \ No newline at end of file diff --git a/.github/ci/files/config/services.yaml b/.github/ci/files/config/services.yaml deleted file mode 100644 index 83c4cc95..00000000 --- a/.github/ci/files/config/services.yaml +++ /dev/null @@ -1,84 +0,0 @@ -parameters: - secret: ThisTokenIsNotSoSecretChangeIt - -services: - _defaults: - autowire: true - autoconfigure: true - - # - # CONTROLLERS - # - - # auto-register all controllers as services - OpenDxp\Bundle\AdminBundle\Controller\: - resource: '../src/Controller' - public: true - tags: ['controller.service_arguments'] - - # - # TRANSLATIONS - # - - OpenDxp\Bundle\AdminBundle\Translation\AdminUserTranslator: ~ - - # - # GDPR Services - # - - # Tagged data providers will be injected from compiler pass - OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\Manager: ~ - - # Providers implementing DataProviderInterface will be auto-tagged via autoconfiguration - OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\DataObjects: - arguments: - $config: '%opendxp.gdpr-data-extrator.dataobjects%' - - OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\Assets: - arguments: - $config: '%opendxp.gdpr-data-extrator.assets%' - - OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\SentMail: ~ - OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\OpenDxpUsers: - arguments: - $logsDir: '%kernel.logs_dir%' - - - # - # Grid Helper Service - # - - OpenDxp\Bundle\AdminBundle\Helper\GridHelperService: ~ - - - # - # Default Preview Generator - # - - OpenDxp\Model\DataObject\ClassDefinition\PreviewGeneratorInterface: - class: OpenDxp\Bundle\AdminBundle\Service\PreviewGenerator - - # - # Twig Extensions - # - - OpenDxp\Twig\Extension\AdminExtension: ~ - - OpenDxp\Bundle\AdminBundle\Twig\Extension\AdminExtension: ~ - - # - # Workflows - # - - OpenDxp\Bundle\AdminBundle\Service\Workflow\ActionsButtonService: ~ - - # - # Admin Config Services - # - OpenDxp\Bundle\AdminBundle\System\AdminConfig: ~ - - # - # Element Services - # - OpenDxp\Bundle\AdminBundle\Service\ElementServiceInterface: - class: OpenDxp\Bundle\AdminBundle\Service\ElementService diff --git a/.github/ci/files/config/system.yaml b/.github/ci/files/config/system.yaml deleted file mode 100644 index b0cfc67e..00000000 --- a/.github/ci/files/config/system.yaml +++ /dev/null @@ -1,66 +0,0 @@ -opendxp: - general: - timezone: Europe/Berlin - path_variable: '' - domain: opendxp-test.dev - redirect_to_maindomain: false - valid_languages: - - en - - de - fallback_languages: - en: '' - de: '' - default_language: '' - disable_usage_statistics: false - documents: - versions: - days: null - steps: 10 - error_pages: - default: /error - allow_trailing_slash: 'no' - generate_preview: true - objects: - versions: - days: null - steps: 10 - assets: - versions: - days: null - steps: 10 - icc_rgb_profile: '' - icc_cmyk_profile: '' - full_page_cache: - enabled: false - lifetime: null - exclude_patterns: '' - exclude_cookie: '' - httpclient: - adapter: Socket - proxy_host: '' - proxy_port: '' - proxy_user: '' - proxy_pass: '' - email: - sender: - name: opendxp - email: contact@example.com - return: - name: opendxp - email: contact@example.com - debug: - email_addresses: '' - applicationlog: - mail_notification: - send_log_summary: false - filter_priority: null - mail_receiver: '' - archive_treshold: '30' - archive_alternative_database: '' -opendxp_admin: - branding: - color_login_screen: '' - color_admin_interface: '' - login_screen_custom_image: '' - translations: - path: "@OpenDxpCoreBundle/translations" diff --git a/.github/ci/files/public/.htaccess b/.github/ci/files/public/.htaccess deleted file mode 100644 index 54755877..00000000 --- a/.github/ci/files/public/.htaccess +++ /dev/null @@ -1,155 +0,0 @@ -# Use the front controller as index file. It serves as a fallback solution when -# every other rewrite/redirect fails (e.g. in an aliased environment without -# mod_rewrite). Additionally, this reduces the matching process for the -# start page (path "/") because otherwise Apache will apply the rewriting rules -# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl). -DirectoryIndex index_test.php - -# By default, Apache does not evaluate symbolic links if you did not enable this -# feature in your server configuration. Uncomment the following line if you -# install assets as symlinks or if you experience problems related to symlinks -# when compiling LESS/Sass/CoffeScript assets. -# Options FollowSymlinks - -# Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve -# to the front controller "/app.php" but be rewritten to "/app.php/app". - - Options -MultiViews - - -# mime types -AddType video/mp4 .mp4 -AddType video/webm .webm -AddType image/jpeg .pjpeg - -Options +SymLinksIfOwnerMatch - -# Use UTF-8 encoding for anything served text/plain or text/html -AddDefaultCharset utf-8 - -RewriteEngine On - - - - Header always unset X-Content-Type-Options - - - -# Determine the RewriteBase automatically and set it as environment variable. -# If you are using Apache aliases to do mass virtual hosting or installed the -# project in a subdirectory, the base path will be prepended to allow proper -# resolution of the app.php file and to redirect to the correct URI. It will -# work in environments without path prefix as well, providing a safe, one-size -# fits all solution. But as you do not need it in this case, you can comment -# the following 2 lines to eliminate the overhead. -RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ -RewriteRule ^(.*) - [E=BASE:%1] - -# Sets the HTTP_AUTHORIZATION header removed by Apache -RewriteCond %{HTTP:Authorization} . -RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - -# Redirect to URI without front controller to prevent duplicate content -# (with and without `/app.php`). Only do this redirect on the initial -# rewrite by Apache and not on subsequent cycles. Otherwise we would get an -# endless redirect loop (request -> rewrite to front controller -> -# redirect -> request -> ...). -# So in case you get a "too many redirects" error or you always get redirected -# to the start page because your Apache does not expose the REDIRECT_STATUS -# environment variable, you have 2 choices: -# - disable this feature by commenting the following 2 lines or -# - use Apache >= 2.3.9 and replace all L flags by END flags and remove the -# following RewriteCond (best solution) -RewriteCond %{ENV:REDIRECT_STATUS} ^$ -RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] - - - RewriteCond %{REQUEST_URI} ^/(fpm|server)-(info|status|ping) - RewriteRule . - [L] - - -# restrict access to dotfiles -RewriteCond %{REQUEST_FILENAME} -d [OR] -RewriteCond %{REQUEST_FILENAME} -l [OR] -RewriteCond %{REQUEST_FILENAME} -f -RewriteRule /\.|^\.(?!well-known/) - [F,L] - -# ASSETS: check if request method is GET (because of WebDAV) and if the requested file (asset) exists on the filesystem, if both match, deliver the asset directly -RewriteCond %{REQUEST_METHOD} ^(GET|HEAD) -RewriteCond %{DOCUMENT_ROOT}/var/assets%{REQUEST_URI} -f -RewriteRule ^(.*)$ /var/assets%{REQUEST_URI} [PT,L] - -# Thumbnails -RewriteCond %{REQUEST_URI} .*/(image|video)-thumb__[\d]+__.* -RewriteCond %{DOCUMENT_ROOT}/var/tmp/%1-thumbnails%{REQUEST_URI} -f -RewriteRule ^(.*)$ /var/tmp/%1-thumbnails%{REQUEST_URI} [PT,L] - -# cache-buster rule for scripts & stylesheets embedded using view helpers -RewriteRule ^cache-buster\-[\d]+/(.*) $1 [PT,L] - -# If the requested filename exists, simply serve it. -# We only want to let Apache serve files and not directories. -RewriteCond %{REQUEST_FILENAME} -f -RewriteRule ^ - [L] - -# Rewrite all other queries to the front controller. -RewriteRule ^ %{ENV:BASE}/index_test.php [L] - - - - -########################################## -### OPTIONAL PERFORMANCE OPTIMIZATIONS ### -########################################## - - - # Force compression for mangled headers. - # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping - - - SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding - RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding - - - - # Compress all output labeled with one of the following MIME-types - # (for Apache versions below 2.3.7, you don't need to enable `mod_filter` - # and can remove the `` and `` lines - # as `AddOutputFilterByType` is still in the core directives). - - AddOutputFilterByType DEFLATE application/atom+xml application/javascript application/json \ - application/vnd.ms-fontobject application/x-font-ttf application/rss+xml \ - application/x-web-app-manifest+json application/xhtml+xml \ - application/xml font/opentype image/svg+xml image/x-icon \ - text/css text/html text/plain text/x-component text/xml text/javascript - - - - - ExpiresActive on - ExpiresDefault "access plus 31536000 seconds" - - # specific overrides - #ExpiresByType text/css "access plus 1 year" - - - - # opendxp mod_pagespeed integration - # opendxp automatically disables mod_pagespeed in the following situations: debug-mode on, /admin, preview, editmode, ... - # if you want to disable pagespeed for specific actions in opendxp you can use $this->disableBrowserCache() in your action - RewriteCond %{REQUEST_URI} ^/(mod_)?pagespeed_(statistics|message|console|beacon|admin|global_admin) - RewriteRule . - [L] - - ModPagespeed Off - AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html - ModPagespeedModifyCachingHeaders off - ModPagespeedRewriteLevel PassThrough - # low risk filters - ModPagespeedEnableFilters remove_comments,recompress_images - # low and moderate filters, recommended filters, but can cause problems - ModPagespeedEnableFilters lazyload_images,extend_cache_images,inline_preview_images,sprite_images - ModPagespeedEnableFilters combine_css,rewrite_css,move_css_to_head,flatten_css_imports,extend_cache_css,prioritize_critical_css - ModPagespeedEnableFilters extend_cache_scripts,combine_javascript,canonicalize_javascript_libraries,rewrite_javascript - # high risk - #ModPagespeedEnableFilters defer_javascript,local_storage_cache - diff --git a/.github/ci/files/public/index_test.php b/.github/ci/files/public/index.php similarity index 100% rename from .github/ci/files/public/index_test.php rename to .github/ci/files/public/index.php diff --git a/.github/ci/scripts/setup-opendxp-environment.sh b/.github/ci/scripts/setup-opendxp-environment.sh index 90944a0b..eca6a740 100755 --- a/.github/ci/scripts/setup-opendxp-environment.sh +++ b/.github/ci/scripts/setup-opendxp-environment.sh @@ -8,7 +8,8 @@ mkdir -p bin cp -r .github/ci/files/config/. config cp -r .github/ci/files/templates/. templates cp -r .github/ci/files/bin/console bin/console -chmod 755 bin/console cp -r .github/ci/files/kernel/. kernel cp -r .github/ci/files/public/. public cp .github/ci/files/.env ./ + +chmod 755 bin/console diff --git a/.github/workflows/codeception.yaml b/.github/workflows/codeception.yaml index 349001d2..12dad786 100644 --- a/.github/workflows/codeception.yaml +++ b/.github/workflows/codeception.yaml @@ -6,9 +6,12 @@ on: branches: - "[0-9]+.[0-9]+" - "[0-9]+.x" - - "feature-*" + paths-ignore: + - 'doc/**' pull_request: types: [ opened, synchronize, reopened ] + paths-ignore: + - 'doc/**' env: OPENDXP_PROJECT_ROOT: ${{ github.workspace }} @@ -36,13 +39,10 @@ jobs: if [ -f composer.json ]; then php_versions=$(jq -r '.require.php' composer.json | grep -oP '\d+\.\d+' | tr '\n' ',' | sed 's/,$//') if [ -z "$php_versions" ]; then - echo "No PHP versions found in composer.json" - echo "Setting default PHP value" - echo "php_versions=default" >> $GITHUB_OUTPUT - else - echo "php_versions=$php_versions" >> $GITHUB_OUTPUT - echo "#### php versions #### : $php_versions" + echo "No PHP versions found in composer.json, using default" + php_versions="default" fi + echo "php_versions=$php_versions" >> $GITHUB_OUTPUT else echo "composer.json not found" exit 1 @@ -51,24 +51,14 @@ jobs: - name: Set up matrix id: set-matrix run: | - php_versions="${{ steps.parse-php-versions.outputs.php_versions }}" - - MATRIX_JSON=$(cat reusable-workflows/codeception-tests-configuration/matrix-config.json) - - IFS=',' read -ra VERSIONS_ARRAY <<< "$php_versions" - - FILTERED_MATRIX_JSON=$(echo $MATRIX_JSON | jq --arg php_versions "$php_versions" ' - { - matrix: [ - .configs[] | - select(.php_version == $php_versions) | - .matrix[] - ] - }') - - ENCODED_MATRIX_JSON=$(echo $FILTERED_MATRIX_JSON | jq -c .) - - echo "matrix=${ENCODED_MATRIX_JSON}" >> $GITHUB_OUTPUT + + php_versions="${{ steps.parse-php-versions.outputs.php_versions }}" + + matrix_json=$(jq -c --arg php_versions "$php_versions" \ + '{matrix: [.configs[] | select(.php_version == $php_versions) | .matrix[]]}' \ + reusable-workflows/codeception-tests-configuration/matrix-config.json) + + echo "matrix=${matrix_json}" >> $GITHUB_OUTPUT codeception-tests: needs: setup-matrix @@ -76,14 +66,18 @@ jobs: matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} uses: open-dxp/workflows-collection-public/.github/workflows/reusable-codeception-tests-centralized.yaml@main with: - APP_ENV: test - OPENDXP_TEST: 1 - PHP_VERSION: ${{ matrix.matrix.php-version }} - DATABASE: ${{ matrix.matrix.database }} - SERVER_VERSION: ${{ matrix.matrix.server_version }} - DEPENDENCIES: ${{ matrix.matrix.dependencies }} - EXPERIMENTAL: ${{ matrix.matrix.experimental }} - OPENDXP_VERSION: ${{ matrix.matrix.opendxp_version }} + app_env: test + opendxp_test: 1 + php_version: ${{ matrix.matrix.php-version }} + database: ${{ matrix.matrix.database }} + server_version: ${{ matrix.matrix.server_version }} + dependencies: ${{ matrix.matrix.dependencies }} + experimental: ${{ matrix.matrix.experimental }} + opendxp_version: ${{ matrix.matrix.opendxp_version }} + opendxp_admin_version: ${{ matrix.matrix.opendxp_admin_version }} + composer_options: ${{ matrix.matrix.composer_options }} + composer_root_version: ${{ matrix.matrix.composer_root_version }} secrets: + CLA_ACTION_ACCESS_TOKEN: ${{ secrets.CLA_ACTION_ACCESS_TOKEN }} SSH_PRIVATE_KEY_OPENDXP_DEPLOYMENTS_USER: ${{ secrets.SSH_PRIVATE_KEY_OPENDXP_DEPLOYMENTS_USER }} COMPOSER_OPENDXP_REPO_PACKAGIST_TOKEN: ${{ secrets.COMPOSER_OPENDXP_REPO_PACKAGIST_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 790b899c..9787fb56 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -1,20 +1,22 @@ name: Static analysis [centralised] on: + workflow_dispatch: schedule: - cron: '0 3 * * 1,3,5' - workflow_dispatch: push: branches: - - "[0-9]+.[0-9]+" - - "[0-9]+.x" - - "feature-*" + - '[0-9]+.[0-9]+' + - '[0-9]+.x' + paths-ignore: + - 'doc/**' pull_request: types: [ opened, synchronize, reopened ] + paths-ignore: + - 'doc/**' env: OPENDXP_PROJECT_ROOT: ${{ github.workspace }} - PRIVATE_REPO: ${{ github.event.repository.private }} jobs: setup-matrix: @@ -22,7 +24,6 @@ jobs: outputs: php_versions: ${{ steps.parse-php-versions.outputs.php_versions }} matrix: ${{ steps.set-matrix.outputs.matrix }} - private_repo: ${{ env.PRIVATE_REPO }} steps: - name: Checkout code uses: actions/checkout@v4 @@ -40,13 +41,10 @@ jobs: if [ -f composer.json ]; then php_versions=$(jq -r '.require.php' composer.json | grep -oP '\d+\.\d+' | tr '\n' ',' | sed 's/,$//') if [ -z "$php_versions" ]; then - echo "No PHP versions found in composer.json" - echo "Setting default PHP value" - echo "php_versions=default" >> $GITHUB_OUTPUT - else - echo "php_versions=$php_versions" >> $GITHUB_OUTPUT - echo "#### php versions #### : $php_versions" + echo "No PHP versions found in composer.json, using default" + php_versions="default" fi + echo "php_versions=$php_versions" >> $GITHUB_OUTPUT else echo "composer.json not found" exit 1 @@ -55,24 +53,14 @@ jobs: - name: Set up matrix id: set-matrix run: | - php_versions="${{ steps.parse-php-versions.outputs.php_versions }}" - - MATRIX_JSON=$(cat reusable-workflows/phpstan-configuration/matrix-config.json) - - IFS=',' read -ra VERSIONS_ARRAY <<< "$php_versions" - - FILTERED_MATRIX_JSON=$(echo $MATRIX_JSON | jq --arg php_versions "$php_versions" ' - { - matrix: [ - .configs[] | - select(.php_version == $php_versions) | - .matrix[] - ] - }') - - ENCODED_MATRIX_JSON=$(echo $FILTERED_MATRIX_JSON | jq -c .) - - echo "matrix=${ENCODED_MATRIX_JSON}" >> $GITHUB_OUTPUT + + php_versions="${{ steps.parse-php-versions.outputs.php_versions }}" + + matrix_json=$(jq -c --arg php_versions "$php_versions" \ + '{matrix: [.configs[] | select(.php_version == $php_versions) | .matrix[]]}' \ + reusable-workflows/phpstan-configuration/matrix-config.json) + + echo "matrix=${matrix_json}" >> $GITHUB_OUTPUT static-analysis: needs: setup-matrix @@ -80,13 +68,14 @@ jobs: matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} uses: open-dxp/workflows-collection-public/.github/workflows/reusable-static-analysis-centralized.yaml@main with: - APP_ENV: test - OPENDXP_TEST: 1 - PRIVATE_REPO: ${{ needs.setup-matrix.outputs.private_repo}} - PHP_VERSION: ${{ matrix.matrix.php-version }} - SYMFONY: ${{ matrix.matrix.symfony }} - DEPENDENCIES: ${{ matrix.matrix.dependencies }} - EXPERIMENTAL: ${{ matrix.matrix.experimental }} - OPENDXP_VERSION: ${{ matrix.matrix.opendxp_version }} - COMPOSER_OPTIONS: ${{ matrix.matrix.composer_options }} - CACHE_CLEAR: 'true' + app_env: test + opendxp_test: 1 + php_version: ${{ matrix.matrix.php-version }} + symfony: ${{ matrix.matrix.symfony }} + dependencies: ${{ matrix.matrix.dependencies }} + experimental: ${{ matrix.matrix.experimental }} + opendxp_version: ${{ matrix.matrix.opendxp_version }} + opendxp_admin_version: ${{ matrix.matrix.opendxp_admin_version }} + composer_options: ${{ matrix.matrix.composer_options }} + composer_root_version: ${{ matrix.matrix.composer_root_version }} + cache_clear: true diff --git a/composer.json b/composer.json index 1dda2b08..616da880 100644 --- a/composer.json +++ b/composer.json @@ -1,15 +1,27 @@ { "name": "open-dxp/admin-bundle", - "license": "GPL-3.0+", + "license": "GPL-3.0-or-later", "type": "opendxp-bundle", - "prefer-stable": true, - "minimum-stability": "dev", + "homepage": "https://www.opendxp.io", + "authors": [ + { + "name": "OpenDXP Team", + "email": "contact@opendxp.ch", + "homepage": "https://www.opendxp.io", + "role": "Developer" + } + ], + "support": { + "source": "https://github.com/open-dxp/admin-bundle", + "issues": "https://github.com/open-dxp/admin-bundle/issues", + "forum": "https://github.com/open-dxp/admin-bundle/discussions" + }, "require": { "php": "~8.3.0 || ~8.4.0", "cbschuld/browser.php": "^1.9.6", "endroid/qr-code": "^4 || ^5.1", "phpoffice/phpspreadsheet": "^2.2 || ^3.3", - "open-dxp/opendxp": "^1.0", + "open-dxp/opendxp": "^1.1.2", "symfony/webpack-encore-bundle": "^2.1.1" }, "require-dev": { @@ -48,10 +60,6 @@ }, "config": { "sort-packages": true, - "preferred-install": { - "open-dxp/opendxp": "source", - "*": "dist" - }, "allow-plugins": { "php-http/discovery": false, "symfony/runtime": true