# elif active == 1
## Page 2
# elif active == 2
## Page 3
${dgettext('acct_mgr', 'Objective for Password Policy rules')}
${
dgettext("acct_mgr",
"While AccountManagerPlugin does not enforce password rules in "
"general, there are some other ways to alter password handling.")
}
${
dgettext("acct_mgr",
"These passwords are used as alternative passwords on request.")
}
# elif active == 3
${
dgettext('acct_mgr', 'Objective for Account Registration and Verification rules')
}
${
dgettext("acct_mgr",
"You may require administrative approval of new accounts for the "
"user registration process. The ability to immediately ban existing "
"accounts is another, related but independent feature.")
}
${
dgettext('acct_mgr', 'Checks to use for validating Registration requests')
}
${
i18n_tag(
dgettext(
"acct_mgr",
"All checks provided by AccountManagerPlugin are enabled per default, "
"but some are configurable on their own.[1:]Currently configured: "
"[2:%(check_list)s]"),
'br',
tag.em(title='[account-manager] register_check'),
check_list=', '.join(register_check),
)
}
${
i18n_tag(
dgettext(
"acct_mgr",
"Checks like [1:BotTrapCheck] won't work at all without additional "
"configuration."),
'strong')
}
# if disabled_check
${
i18n_tag(
dgettext("acct_mgr",
"Required disabled component(s): [1:%(components)s]"),
'em',
components=', '.join(disabled_check))
}
# endif
${
dgettext("acct_mgr",
"Select one or more checks and configure related options. "
"Concurrent use of multiple registration checks is encouraged.")
}
${
dgettext("acct_mgr",
"Checks are applied in turn, so order matters. Note that "
"some checks are used to validate admin user actions too.")
}
# for section in check_list
# if section.doc
${safe_wiki_to_html(context, section.doc)}
# endif
# for option in section.options
# if option.doc
${option.doc}
# endif
# endfor
# endfor
${dgettext('acct_mgr', 'Other Account Policy options')}
# elif active == 4
## Page 5
${dgettext('acct_mgr', 'Objective for Account Protection rules')}
${
dgettext(
"acct_mgr",
"Passwords are often not constructed as carefully as they should be. "
"And even a strong passphrase could be sift out, if an attacker is "
"able to test millions of variants in hours, if not seconds. "
"Firewalls and full-featured web-servers already offer sophisticated "
"protection, if one can afford them, handle their installation, "
"configuration and maintenance.")
}
${
i18n_tag(
dgettext(
"acct_mgr",
"The [1:AccountGuard] component is another option. It is an add-on to "
"AccountManagerPlugin's own [2:LoginModule] and provides account "
"protection by discouraging brute-force login attempts."),
'strong', 'strong')
}
# if not acctmgr_login
${dgettext('acct_mgr', "AccountManagerPlugin's LoginModule is disabled.")}
# endif
${
i18n_tag(
dgettext("acct_mgr", "Zero means [1:unlimited] lock time here."),
'strong')
}
${
dgettext("acct_mgr",
"Extend user account lock duration incrementally. "
"It uses logarithmic calculation with the factor "
"as exponent, accepting decimal numbers >= 1.")
}
${
i18n_tag(
dgettext(
"acct_mgr",
"[1:Lock time will grow for any value > 1, if the failure "
"happens before lock expiration. I.e. value '2' means][2:"
"[3:[4:double lock time after 2nd failure,]]"
"[5:[6:four times the initial lock time after 3rd,]]"
"[7:[8:eight times as long after 4th failure, etc.]]"
"]",
),
tag.p(class_='hint'),
'ul',
'li', tag.span(class_='hint'),
'li', tag.span(class_='hint'),
'li', tag.span(class_='hint'),
)
}
${
dgettext("acct_mgr",
"At any time after lock expiration a login failure "
"will just trigger a lock and set a new lock timeout, "
"but not extend the total lock duration.")
}
## Last value cache for JS code
${
dgettext('acct_mgr', 'This is relevant only with a progression factor > 1.')
}
# else
## Page 6
# if not admin_available
${dgettext('acct_mgr', 'Objective for additional preparation')}
${
dgettext('acct_mgr', 'Enable yourself to proceed beyond this initial setup.')
}
${dgettext('acct_mgr', 'Initial Admin Account')}
${
i18n_tag(
dgettext(
"acct_mgr",
"The user will get [1:TRAC_ADMIN] assigned, that inherits all "
"available permissions. One such account is required to configure Trac"
" via the admin web-UI. Create and manage more limited admin accounts "
"as well as actual user accounts on your own later via the Accounts "
"admin panel."),
'strong')
}
${
i18n_tag(
dgettext(
"acct_mgr",
"In detail: AccountManagerPlugin requires [1:ACCTMGR_USER_ADMIN] for "
"regular user administration, [2:ACCTMGR_CONFIG_ADMIN] for viewing "
"these pages and changing the configuration later. Both are inherited "
"by [3:ACCTMGR_ADMIN] permission. To assign permissions you'll need "
"[4:PERMISSION_GRANT] inherited by [5:PERMISSION_ADMIN] too."),
'strong', 'strong', 'strong', 'strong', 'strong')
}
# if ignore_auth_case
${
dgettext('acct_mgr', 'Only lowercase usernames allowed')
}
# endif
# if not password_store
${
dgettext("acct_mgr",
"Please take care, that the username is known by the "
"HTTP authentication provider.")
}
# elif not set_password
${
dgettext("acct_mgr",
"Please take care for a valid username, because no configured "
"password store supports creating a new account.")
}
# endif
# endif
${dgettext('acct_mgr', 'Check-up')}
# for goal in completion.details
-
# if goal.step
${goal.desc}
# else
${goal.desc}
# endif
# endfor
# if admin_available and not completion.ready
${
dgettext('acct_mgr', 'Please resolve all issues marked as critical.')
}
# endif
# if completion.ready
${
i18n_tag(
dgettext(
"acct_mgr",
"By now you did almost finish AccountManagerPlugin configuration, but "
"any changes are temporary yet. Please test and adjust the "
"configuration as required, or cancel to revert all changes. Apply "
"settings to [1:trac.ini] only if you really want to preserve them "
"permanently."),
'em')
}
## Final configuration preview listing
# for section, options in roundup|dictsort
[${section}]
# for option, value in options|sort(attribute=0)
${option} = ${value}
# endfor
# endfor
# endif
# endif
## Bottom navigation