name: Login
slug: login
type: plugin
version: 3.3.5
testing: false
description: Enables user authentication and login screen.
icon: sign-in
author:
  name: Team Grav
  email: devs@getgrav.org
  url: http://getgrav.org
homepage: https://github.com/getgrav/grav-plugin-login
keywords: login, authentication, admin, security
bugs: https://github.com/getgrav/grav-plugin-login/issues
license: MIT

dependencies:
  - { name: grav, version: '>=1.6.7' }
  - { name: form, version: '>=3.0.0' }
  - { name: email, version: '>=3.0.0' }

form:
  validation: loose
  fields:

    tabs:
      type: tabs
      active: 1
      class: subtle

      fields:
        options:
          type: tab
          title: PLUGIN_LOGIN.OPTIONS

          fields:

            enabled:
              type: hidden
              label: PLUGIN_LOGIN.PLUGIN_STATUS
              highlight: 1
              default: 1
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            built_in_css:
              type: toggle
              label: PLUGIN_LOGIN.BUILTIN_CSS
              highlight: 1
              default: 1
              help: PLUGIN_LOGIN.BUILTIN_CSS_HELP
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            redirect_to_login:
              type: toggle
              label: PLUGIN_LOGIN.REDIRECT_TO_LOGIN
              help: PLUGIN_LOGIN.REDIRECT_TO_LOGIN_HELP
              default: 0
              highlight: 0
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            redirect_after_login:
              type: toggle
              label: PLUGIN_LOGIN.REDIRECT_AFTER_LOGIN
              help: PLUGIN_LOGIN.REDIRECT_AFTER_LOGIN_HELP
              force_bool: true
              default: 0
              highlight: 0
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            redirect_after_logout:
              type: toggle
              label: PLUGIN_LOGIN.REDIRECT_AFTER_LOGOUT
              help: PLUGIN_LOGIN.REDIRECT_AFTER_LOGOUT_HELP
              force_bool: true
              default: 1
              highlight: 1
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            parent_acl:
              type: toggle
              label: PLUGIN_LOGIN.USE_PARENT_ACL_LABEL
              highlight: 0
              default: 0
              help: PLUGIN_LOGIN.USE_PARENT_ACL_HELP
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            dynamic_page_visibility:
              type: toggle
              label: PLUGIN_LOGIN.DYNAMIC_VISIBILITY
              highlight: 0
              default: 0
              help: PLUGIN_LOGIN.DYNAMIC_VISIBILITY_HELP
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            twofa_enabled:
              type: toggle
              label: PLUGIN_LOGIN.2FA_ENABLED
              highlight: 0
              default: 0
              help: PLUGIN_LOGIN.2FA_ENABLED_HELP
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            protect_protected_page_media:
              type: toggle
              label: PLUGIN_LOGIN.PROTECT_PROTECTED_PAGE_MEDIA_LABEL
              highlight: 0
              default: 0
              help: PLUGIN_LOGIN.PROTECT_PROTECTED_PAGE_MEDIA_HELP
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            session_user_sync:
              type: toggle
              label: PLUGIN_LOGIN.SESSION_USER_SYNC
              highlight: 0
              default: 0
              help: PLUGIN_LOGIN.SESSION_USER_SYNC_HELP
              options:
                1: PLUGIN_ADMIN.ENABLED
                0: PLUGIN_ADMIN.DISABLED
              validate:
                type: bool

            rememberme:
              type: section
              title: PLUGIN_LOGIN.REMEMBER_ME

              fields:
                rememberme.enabled:
                  type: toggle
                  label: PLUGIN_ADMIN.ENABLED
                  help: PLUGIN_ADMIN.SESSION_ENABLED_HELP
                  highlight: 1
                  options:
                      1: PLUGIN_ADMIN.YES
                      0: PLUGIN_ADMIN.NO
                  validate:
                      type: bool

                rememberme.timeout:
                  type: text
                  size: small
                  default: 604800
                  label: PLUGIN_ADMIN.TIMEOUT
                  help: PLUGIN_LOGIN.TIMEOUT_HELP
                  validate:
                      type: number
                      min: 1

                rememberme.name:
                  type: text
                  size: small
                  label: PLUGIN_ADMIN.NAME
                  help: PLUGIN_ADMIN.SESSION_NAME_HELP

        routes:
          type: tab
          title: PLUGIN_LOGIN.ROUTES

          fields:

            route:
              type: text
              size: medium
              label: PLUGIN_LOGIN.ROUTE
              help: PLUGIN_LOGIN.ROUTE_HELP
              placeholder: "/login"

            route_after_login:
              type: text
              size: medium
              label: PLUGIN_LOGIN.ROUTE_AFTER_LOGIN
              help: PLUGIN_LOGIN.ROUTE_AFTER_LOGIN_HELP
              data-default@: '\Grav\Plugin\LoginPlugin::defaultRedirectAfterLogin'
              placeholder: "/user_profile"

            route_after_logout:
              type: text
              size: medium
              label: PLUGIN_LOGIN.ROUTE_AFTER_LOGOUT
              help: PLUGIN_LOGIN.ROUTE_AFTER_LOGOUT_HELP
              data-default@: '\Grav\Plugin\LoginPlugin::defaultRedirectAfterLogout'
              placeholder: "/"

            route_forgot:
              type: text
              size: medium
              label: PLUGIN_LOGIN.ROUTE_FORGOT
              placeholder: "/forgot_password"

            route_reset:
              type: text
              size: medium
              label: PLUGIN_LOGIN.ROUTE_RESET
              placeholder: "/reset_password"

            route_profile:
              type: text
              size: medium
              label: PLUGIN_LOGIN.ROUTE_PROFILE
              placeholder: "/user_profile"

            route_activate:
              type: text
              size: medium
              label: PLUGIN_LOGIN.ROUTE_ACTIVATE
              placeholder: '/activate_user'

            user_registration.redirect_after_activation:
              type: text
              size: medium
              label: PLUGIN_LOGIN.REDIRECT_AFTER_ACTIVATION
              help: PLUGIN_LOGIN.REDIRECT_AFTER_ACTIVATION_HELP
              placeholder: "/page-to-show-after-activation"

            route_register:
              type: text
              size: medium
              label: PLUGIN_LOGIN.ROUTE_REGISTER
              help: PLUGIN_LOGIN.ROUTE_REGISTER_HELP
              placeholder: "/register"

            user_registration.redirect_after_registration:
              type: text
              size: medium
              label: PLUGIN_LOGIN.REDIRECT_AFTER_REGISTRATION
              help: PLUGIN_LOGIN.REDIRECT_AFTER_REGISTRATION_HELP
              placeholder: "/page-to-show-after-registration"



        registration:
          type: tab
          title: PLUGIN_LOGIN.USER_REGISTRATION

          fields:
            user_registration.enabled:
              type: toggle
              label: PLUGIN_ADMIN.ENABLED
              help: PLUGIN_LOGIN.USER_REGISTRATION_ENABLED_HELP
              highlight: 0
              options:
                  1: PLUGIN_ADMIN.YES
                  0: PLUGIN_ADMIN.NO
              validate:
                  type: bool

            registration_fields:
              type: section
              title: PLUGIN_LOGIN.REGISTRATION_FIELDS

              fields:
                user_registration.fields:
                  type: array
                  value_only: true
                  label: PLUGIN_LOGIN.REGISTRATION_FIELDS
                  help: PLUGIN_LOGIN.REGISTRATION_FIELDS_HELP
                  placeholder_key: PLUGIN_LOGIN.REGISTRATION_FIELD_KEY
                  placeholder_value: PLUGIN_LOGIN.ADDITIONAL_PARAM_VALUE

                user_registration.default_values:
                  type: array
                  label: PLUGIN_LOGIN.DEFAULT_VALUES
                  help: PLUGIN_LOGIN.DEFAULT_VALUES_HELP
                  placeholder_key: PLUGIN_LOGIN.ADDITIONAL_PARAM_KEY
                  placeholder_value: PLUGIN_LOGIN.ADDITIONAL_PARAM_VALUE

            access_levels:
                title: PLUGIN_ADMIN.ACCESS_LEVELS
                type: section
                security: admin.super

                fields:
                    user_registration.groups:
                        type: select
                        multiple: true
                        size: large
                        label: PLUGIN_ADMIN.GROUPS
                        data-options@: '\Grav\Common\User\Group::groupNames'
                        classes: fancy
                        help: PLUGIN_LOGIN.GROUPS_HELP
                        validate:
                            type: commalist

                    user_registration.access.site:
                        type: array
                        label: PLUGIN_ADMIN.SITE_ACCESS
                        help: PLUGIN_LOGIN.SITE_ACCESS_HELP
                        multiple: false
                        validate:
                            type: array

            options:
              type: section
              title: PLUGIN_LOGIN.OPTIONS

              fields:

                user_registration.options.validate_password1_and_password2:
                  type: toggle
                  label: PLUGIN_LOGIN.VALIDATE_PASSWORD1_AND_PASSWORD2
                  help: PLUGIN_LOGIN.VALIDATE_PASSWORD1_AND_PASSWORD2_HELP
                  highlight: 1
                  options:
                      1: PLUGIN_ADMIN.YES
                      0: PLUGIN_ADMIN.NO
                  validate:
                      type: bool

                user_registration.options.set_user_disabled:
                  type: toggle
                  label: PLUGIN_LOGIN.SET_USER_DISABLED
                  help: PLUGIN_LOGIN.SET_USER_DISABLED_HELP
                  highlight: 0
                  options:
                      1: PLUGIN_ADMIN.YES
                      0: PLUGIN_ADMIN.NO
                  validate:
                      type: bool

                user_registration.options.login_after_registration:
                  type: toggle
                  label: PLUGIN_LOGIN.LOGIN_AFTER_REGISTRATION
                  help: PLUGIN_LOGIN.LOGIN_AFTER_REGISTRATION_HELP
                  highlight: 0
                  options:
                      1: PLUGIN_ADMIN.YES
                      0: PLUGIN_ADMIN.NO
                  validate:
                      type: bool

                user_registration.options.send_activation_email:
                  type: toggle
                  label: PLUGIN_LOGIN.SEND_ACTIVATION_EMAIL
                  help: PLUGIN_LOGIN.SEND_ACTIVATION_EMAIL_HELP
                  highlight: 0
                  options:
                      1: PLUGIN_ADMIN.YES
                      0: PLUGIN_ADMIN.NO
                  validate:
                      type: bool

                user_registration.options.manually_enable:
                  type: toggle
                  label: PLUGIN_LOGIN.MANUALLY_ENABLE
                  help: PLUGIN_LOGIN.MANUALLY_ENABLE_HELP
                  highlight: 0
                  options:
                    1: PLUGIN_ADMIN.YES
                    0: PLUGIN_ADMIN.NO
                  validate:
                    type: bool

                user_registration.options.send_notification_email:
                  type: toggle
                  label: PLUGIN_LOGIN.SEND_NOTIFICATION_EMAIL
                  help: PLUGIN_LOGIN.SEND_NOTIFICATION_EMAIL_HELP
                  highlight: 0
                  options:
                      1: PLUGIN_ADMIN.YES
                      0: PLUGIN_ADMIN.NO
                  validate:
                      type: bool

                user_registration.options.send_welcome_email:
                  type: toggle
                  label: PLUGIN_LOGIN.SEND_WELCOME_EMAIL
                  help: PLUGIN_LOGIN.SEND_WELCOME_EMAIL_HELP
                  highlight: 0
                  options:
                      1: PLUGIN_ADMIN.YES
                      0: PLUGIN_ADMIN.NO
                  validate:
                    type: bool

        Security:
          type: tab
          title: PLUGIN_LOGIN.SECURITY_TAB

          fields:
            max_pw_resets_count:
              type: number
              size: x-small
              label: PLUGIN_LOGIN.MAX_RESETS_COUNT
              help: PLUGIN_LOGIN.MAX_RESETS_COUNT_HELP
              append: PLUGIN_LOGIN.RESETS
              validate:
                type: number
                min: 0

            max_pw_resets_interval:
              type: number
              size: x-small
              label: PLUGIN_LOGIN.MAX_RESETS_INTERVAL
              help: PLUGIN_LOGIN.MAX_RESETS_INTERVAL_HELP
              append: PLUGIN_LOGIN.MINUTES
              validate:
                type: number
                min: 1

            max_login_count:
              type: number
              size: x-small
              label: PLUGIN_LOGIN.MAX_LOGINS_COUNT
              help: PLUGIN_LOGIN.MAX_LOGINS_COUNT_HELP
              append: PLUGIN_LOGIN.ATTEMPTS
              validate:
                type: number
                min: 0

            max_login_interval:
              type: number
              size: x-small
              label: PLUGIN_LOGIN.MAX_LOGINS_INTERVAL
              help: PLUGIN_LOGIN.MAX_LOGINS_INTERVAL_HELP
              append: PLUGIN_LOGIN.MINUTES
              validate:
                type: number
                min: 1

            ipv6_subnet_size:
              type: number
              size: x-small
              label: PLUGIN_LOGIN.IPV6_SUBNET_SIZE
              help: PLUGIN_LOGIN.IPV6_SUBNET_SIZE_HELP
              append: PLUGIN_LOGIN.MINUTES
              validate:
                type: number
                min: 1
