.middleware.grouper.grouper.5.11.3.source-code.grouper-ui-ng.base.properties Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of grouper Show documentation
Show all versions of grouper Show documentation
Internet2 Groups Management Toolkit
#
# Grouper UI configuration
# $Id: grouper.client.example.properties,v 1.24 2009-12-30 04:23:02 mchyzer Exp $
#
########################################
## Config chaining hierarchy
## The grouper UI properties uses Grouper Configuration Overlays (documented on wiki)
## By default the configuration is read from grouper-ui.base.properties
## (which should not be edited), and the grouper-ui.properties overlays
## the base settings. See the grouper-ui.base.properties for the possible
## settings that can be applied to the grouper-ui.properties
########################################
# comma separated config files that override each other (files on the right override the left)
# each should start with file: or classpath:
# e.g. classpath:grouper-ui.example.properties, file:c:/something/myconfig.properties
# {valueType: "string", required: true, multiple: true}
grouperUi.config.hierarchy = classpath:grouper-ui-ng.base.properties, classpath:grouper-ui.properties, database:grouper
# seconds between checking to see if the config files are updated
# {valueType: "integer"}
grouperUi.config.secondsBetweenUpdateChecks = 600
###########################################
## Text bundles for UI
###########################################
# the default index
# {valueType: "integer"}
grouper.text.defaultBundleIndex = 0
# language for this bundle
# {valueType: "string", regex: "^grouper.text.bundle.([0-9]+).language$"}
grouper.text.bundle.0.language = en
# country for this bundle
# {valueType: "string", regex: "^grouper.text.bundle.([0-9]+).country$"}
grouper.text.bundle.0.country = us
# filename in the package grouperText that is before the .base.properties, and .properties
# {valueType: "string", regex: "^grouper.text.bundle.([0-9]+).fileNamePrefix$"}
grouper.text.bundle.0.fileNamePrefix = grouperText/grouper.text.en.us
########################################
## Simple Look and feel.
## How to change logos and CSS
########################################
# You may specify a logo for your organisation and for Grouper. Off-the-shelf
# your organisation logo appears on the left of the header and the Grouper logo
# appears on the right. Typically you would make the logos the same height.
# {valueType: "string"}
image.organisation-logo=grouperExternal/public/assets/images/organisation-logo.gif
# grouper logo
# ${valueType: "string"}
image.grouper-logo=grouperExternal/public/assets/images/grouper.gif
# A space separated list of one or more .css files which are inserted into the
# HEAD of all Grouper pages. The .css files are referenced in order and after
# any Grouper CSS files. This means that your CSS files can override any
# Grouper style definition. This cannot be multiple true because it's not comma separated.
# {valueType: "string"}
css.additional=
# The container width. Was 1100px before 2.6.20, then changed to 95%.
# {valueType: "string", defaultValue: "95%"}
uiV2.containerFluidMaxWidth =
########################################
#### Miscellaneous UI configuration
########################################
# Decide if the browser folder/group pane should auto-select
# the currently selected object in the view. This will expand the
# folder menu for every item navigated, so may have performance issues.
# If turned off, refresh can still be forced by the Browse Folders refresh icon
# Note for Grouper 2.3.0 this should remain false until it is more stable.
# {valueType: "boolean", required: false}
uiV2.refresh.menu.on.view=false
# Decide if the hide/show side panel function should be disabled or not.
# When this property is set to true, the hide/show link in Grouper UI does not appear.
# {valueType: "boolean", required: false}
uiV2.disable.hide-show.side.panel=false
# Specifies whether Grouper should display a logout link. Not all authentication
# schemes allow logout, including Basic authentication.
# This value can be set in the Grouper UI build.properties file
# Note that Grouper cannot guarantee that
#ending the session will log the user out of your authentication system!!!
#Only set to true if you can genuinely logout.
# {valueType: "boolean", required: false}
logout.link.show=true
# Specifies the maximum length for the subject String that appears in the subheader
# welcome message
# {valueType: "integer", required: true}
welcome.subject.max-length=80
#Set this to 'all' to remove all cookies, or set to a comma or space separated list of
#cookie names to delete. Java code will do a Cookie.getName().equals or .matches
#so valid regular expressions may be used
# ${valueType: "string", multiple: true}
logout.cookies-to-delete=none
# If logout should redirect to an external URL, put that URL here
# ${valueType: "string"}
grouperUi.logout.redirectToUrl.elConfig = ${elUtils.processEnvVarOrFile('GROUPERUI_LOGOUT_REDIRECTTOURL')}
# When creating a group, which access privs will be granted to GrouperAll?
# groups.create.grant.all allows the UI to override the defaults in grouper.properties
# =none if none should be checked in the UI
# If not set, the defaults from the grouper.properties file will be used
# NB in the QuickStart, no privs are automatically assigned - grouper.properties was
# modified so that all 'groups.create.grant.all.' are false,
# ${valueType: "string"}
groups.create.grant.all=
# Unless otherwise configured, the UI starts browsing at the ROOTstem. set default.browse.stem
# to start browsing from a different stem. You can override the default browse stem,
# however, you must ensure that the stem exists by creating it using the Grouper API
# ${valueType: "stem"}
default.browse.stem=
# If the default folder menu is set to a non-root folder via property default.browse.stem,
# set default.browse.stem.uiv2.menu to false to disable it specifically in the V2 UI but
# leave it enabled in the Admin and Lite UI
# {valueType: "boolean", required: false}
default.browse.stem.uiv2.menu=true
# Turn off the debug functionality (true/false)
# For production turn off (false) or restrict to a group
# {valueType: "boolean", required: true}
browser.debug.enable=false
# If debug is on then restrict to named group. Disable if group does not exist
# ${valueType: "group"}
browser.debug.group=
# Enables user to specify arbitrary exsecutable as HTML editor on the server
# Do not enable unless you absolutely trust users
# {valueType: "boolean", required: true}
browser.debug.group.enable-html-editor=false
#If you want to save your debug preferences, set debug.prefs.dir to an existing directory
#on you system, where the user Tomcat runs as, has write privilege
# ${valueType: "string"}
debug.prefs.dir=someDir/someWhereMustExist
# Format string for created/edited dates for Grouper objects (groups, stems, subjects, etc).
# Default example is e.g. "Fri Oct 23 1:43:35 PM EDT 2020" (see Java SimpleDateFormat for valid formats)
# {valueType: "string", required: false}
uiV2.grouperObjects.dateFormat = EE MMM d h:mm:ss aa zz yyyy
# If you have logic running from the Grouper webapp, put some comma-separated URL patterns, starting with slash
# and after the context, e.g. /grouperExternal/public/UiV2Public.index
# ${valueType: "string"}
csrfguard.extraFilterPatterns =
#####################################################
## Membership Import and export
## As of V1.2 the UI provides a framework for allowing users to export membership lists
## to flat files i.e. comma separated files, including in Excel compatible format. It is also
## possible to import simple delimited files.
## Both import and export require configuration and appropriate configuration will vary from
## site to site. For this reason, the UI does not come pre-configued for import/export, however,
## sample files are provided (see [Enabling import / export of group memberships|Customising the Grouper UI#import-export])
#####################################################
# membership export legacy config
# ${valueType: "string"}
#membership-export.config=resources/grouper/membership-export.xml
# membership import legacy config
# ${valueType: "string"}
#membership-import.config=resources/grouper/membership-import.xml
#for large files, give a temp dir so they arent stored in memory or the system temp dir
# ${valueType: "string"}
file.upload.temp.dir=
# legacy max bytes
# ${valueType: "integer"}
file.upload.max.bytes=
#note: if they are in the this group, then they can use the lite ui too
# ${valueType: "group"}
require.group.for.logins=
#users must be in this group to be able to login to the lite membership update UI (if not in require.group.for.logins)
# ${valueType: "group"}
require.group.for.membershipUpdateLite.logins=
#users must be in this group to be able to login to the subjectPicker UI (if not in require.group.for.logins or require.group.for.membershipUpdateLite.logins)
# ${valueType: "group"}
require.group.for.subjectPicker.logins=
#users must be in this group to invite external users to grouper
# ${valueType: "group"}
require.group.for.inviteExternalSubjects.logins=
#users must be in this group to assign/create/etc attributes in the UI (new attribute framework) (if not in require.group.for.logins)
# ${valueType: "group"}
require.group.for.attributeUpdateLite.logins=
# if true, when a user logs in, a folder will be created and granted to the user if not already there
# {valueType: "boolean", required: true}
grouperUi.autoCreateUserFolderOnLogin=false
# you can set a folder for the user. If the folder is not created then privileges will not be adjusted
# you can use EL here based on the subject, e.g. users:folders:${subject.id} or users:folders:${subject.getAttributeValue('netId')}
# ${valueType: "string"}
grouperUi.autoCreateUserFolderName=
# if the folders are leaves in the tree, this can be false, if you need to create parents, set to true (be careful)
# {valueType: "boolean", required: true}
grouperUi.autoCreateUserFolderCreateParentFoldersIfNotExist = false
###########################################
## Displaying lists
###########################################
# When browsing or searching the UI will present lists of various objects. The following settings
# allow sites to control default page sizes and a list of user-selectable page sizes
# {valueType: "integer", required: true}
pager.pagesize.default=50
# {valueType: "string", required: true}
pager.pagesize.selection=10 25 50 100
# If we should remove paging from subject search since we cant *really* page through all subjects,
# you would just be paging through the first part of the first page. IF you set this to true
# then you might want to bump up the default pagesize...
# {valueType: "boolean", required: true}
pager.removeFromSubjectSearch=false
# Typically, when browsing it is sufficient to show the extension/displayExtension for a group/stem
# as the parent stems are aleady shown and are common. When searching, however, this context is lost
# so sites can configure which field to display in the context of a search where results may come from
# different locations
# ${valueType: "string"}
search.group.result-field=displayName
# legacy stem field
# ${valueType: "string"}
search.stem.result-field=displayName
# By setting the 'result-field-choice' properties, sites can alow users to select which
# field to use for displaying serach resuts
# ${valueType: "string"}
search.group.result-field-choice=displayName displayExtension name
# result field choice
# ${valueType: "string"}
search.stem.result-field-choice=displayName displayExtension name
# Provides backwards compatability - it was assumed that all Subjects woud have a 'description' attribute
# {valueType: "string", regex: "^subject\\.display\\.([^=]+)$"}
subject.display.default=description
# Used for groups when displayed as a subject i.e. when displayed as member of another group
# {valueType: "string", regex: "^subject\\.display\\.([^=]+)$"}
subject.display.g\:gsa=displayExtension
# Used for groups when displayed as a subject i.e. when displayed as member of another group
# {valueType: "string", regex: "^subject\\.display\\.([^=]+)$"}
subject.display.grouperEntities=displayExtension
# Used for internal Grouper subjects i.e. GrouperAll and GrouperSystem
# ${valueType: "string"}
# {valueType: "string", regex: "^subject\\.display\\.([^=]+)$"}
subject.display.g\:isa=name
# Default attribute to display for groups
# ${valueType: "string"}
group.display=displayExtension
# Attribute to use when browsing and the user has selected to hide the hierarchy -
# thus losing context
# ${valueType: "string"}
group.display.flat=displayName
# Default attribute for stems
# ${valueType: "string"}
stem.display=displayExtension
######################################
## Searching
## Configuration affecting how simple default group/stem searches are carried out
######################################
# Determines if the name or extension field (or neither) are searched
# ${valueType: "string"}
search.default.search-in-name-or-extension=
# Determines if the display name or display extension (or neither) is searched
# ${valueType: "string"}
search.default.search-in-display-name-or-extension=name
# On the advanced groups search screen determines how many search fields are displayed
# {valueType: "integer", required: true}
search.max-fields=5
# On the advanced groups search screen determines how many group type select lists are displayed
# {valueType: "integer", required: true}
search.max-group-types=3
# On the advanced stems search screen determines how many search fields are displayed
# {valueType: "integer", required: true}
search.stems.max-fields=4
# Control whether default search can search any attribute. Valid values=only or true or false
# {valueType: "boolean", required: true}
search.default.any=false
# Control default search option
# ${valueType: "string"}
search.default=name
# dojo autocompletion for add member/add groups does a wildcard search
# for every character typed. If defined, only allow this for certain
# forms. If undefined, allow for all of them
# ${valueType: "string", multiple: true}
#uiV2.search.autocompleteById.allowedPaths = /UiV2Subject.addToGroupFilter, /UiV2Stem.createGroupParentFolderFilter, /UiV2Group.addMemberFilter
# autocomplete search restrict
# ${valueType: "string", multiple: true}
#uiV2.search.autocompleteSearch.allowedPaths = /UiV2Subject.addToGroupFilter, /UiV2Stem.createGroupParentFolderFilter, /UiV2Group.addMemberFilter
# Allow filtering of membership lists by subject source
# {valueType: "boolean", required: true}
members.filter.by-source=true
# filter limit
# {valueType: "integer", required: true}
members.filter.limit=500
# Displays source specific form elements using keys:
# subject.search.form-fragment.
# ${valueType: "string", multiple: true}
subject.search.form-fragment.g\:gsa=subjectSearchGroupFragmentDef
#################################################
## Sorting
#################################################
# As of V1.2 the Grouper UI allows sorting of various lists of objects
# See [Sort order of lists|Customising the Grouper UI#sort] for explanation
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.impl=edu.internet2.middleware.grouper.ui.DefaultComparatorImpl
# sort groups
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.Group=edu.internet2.middleware.grouper.ui.GroupComparatorHelper
# sort group as map
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.ui.util.GroupAsMap=edu.internet2.middleware.grouper.ui.GroupComparatorHelper
# sort stems
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.Stem=edu.internet2.middleware.grouper.ui.StemComparatorHelper
# sort stem as map
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.ui.util.StemAsMap=edu.internet2.middleware.grouper.ui.StemComparatorHelper
# sort subject
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.subject.Subject=edu.internet2.middleware.grouper.ui.SubjectComparatorHelper
# sort subject as map
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.ui.util.SubjectAsMap=edu.internet2.middleware.grouper.ui.SubjectComparatorHelper
# sort member
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.Member=edu.internet2.middleware.grouper.ui.SubjectComparatorHelper
# sort membership
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.Membership=edu.internet2.middleware.grouper.ui.SubjectComparatorHelper
# sort membership as map
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.ui.util.MembershipAsMap=edu.internet2.middleware.grouper.ui.SubjectComparatorHelper
# sort subject privilege as map
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.ui.util.SubjectPrivilegeAsMap=edu.internet2.middleware.grouper.ui.GroupOrStemComparatorHelper
# sort composite
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.Composite=edu.internet2.middleware.grouper.ui.ComositeComparatorHelper
# sort composite as map
# ${valueType: "class", mustImplementInterface: "edu.internet2.middleware.grouper.ui.GrouperComparatorHelper"}
comparator.helper.edu.internet2.middleware.grouper.ui.util.CompositeAsMap=edu.internet2.middleware.grouper.ui.CompositeComparatorHelper
# Sorting large lists can be computationally expensive - and slow. Use this property to turn off sorting for
# large lists
# {valueType: "integer", required: true}
comparator.sort.limit=200
# SubjectSummary page lists full names - so sort on those by default
# {valueType: "string"}
group.sort.subjectSummary=displayName
# stem sort subject summary
# {valueType: "string"}
stem.sort.subjectSumamry=displayName
# To control the order in which subject attributes are listed on the Subject Summary page:
# subject.attributes.order.=comma separated list of case sensitive attribute names
# {valueType: "string", multiple: true, regex: "^subject\\.attributes\\.order\\.([^=]+)$"}
subject.attributes.order.g\:gsa=displayExtension,displayName,name,alternateName,extension,createTime,createSubjectId,createSubjectType,modifySubjectId,modifySubjectType,modifyTime,subjectType,id
# To control the order in which subject attributes are listed in the New UI without expanding the attribute list.
# {valueType: "string", multiple: true}
subject2.attributes.order.nonexpanded.default=subjectId,email,name,description
# Override for each source
# {valueType: "string", multiple: true, regex: "^subject\\.attributes\\.order\\.nonexpanded\\.([^=]+)$"}
subject2.attributes.order.nonexpanded.g\:isa=subjectId,name,description
# To control the order in which subject attributes are listed in the New UI in the expanded results
# Leave empty to display all subject attributes (excluding name, description, email and subject id)
# {valueType: "string", multiple: true, regex: "^subject\\.attributes\\.order\\.expanded\\.([^=]+)$"}
#subject2.attributes.order.expanded.default=lfname,loginid,memberId,sourceId,sourceName
# Override for each source
# {valueType: "string", multiple: true, regex: "^subject\\.attributes\\.order\\.expanded\\.([^=]+)$"}
# subject2.attributes.order.expanded.jdbc=lfname,loginid
###############################################
## Member sorting and searching
###############################################
# Whether to enable member sorting using sort attributes stored in Grouper.
# {valueType: "boolean", required: true}
member.sort.enabled=true
# Whether to use default sorting only and not allow users to specify which sort attribute to use.
# {valueType: "boolean", required: true}
member.sort.defaultOnly=false
# Whether to enable member searching using search attributes stored in Grouper.
# {valueType: "boolean", required: true}
member.search.enabled=true
###################################################
## Audit query
###################################################
# Date format likely to be locale dependent + may need to turn on/off
# {valueType: "boolean", required: true}
audit.query.enabled=true
#SimpleDateFormat format strings (v1.x legacy UI)
# {valueType: "string"}
audit.query.date-format=MM/dd/yyyy
# display date format (v1.x legacy UI)
# {valueType: "string"}
audit.query.display-date-format=dd MMM yyyy HH:mm:ss
# If no date specified show results for audit.query.default-since days (v1.x legacy UI)
# {valueType: "integer", required: true}
audit.query.default-since=7
# Format string for audit dates
# Default example is e.g. "2020/10/24 12:43 AM" (see Java SimpleDateFormat for valid formats)
# {valueType: "string", required: false}
uiV2.audit.dateFormat = yyyy/MM/dd h:mm aa
# Format string for audit dates with seconds used in membership timeline
# {valueType: "string", required: false}
uiV2.audit.dateFormatWithSeconds = yyyy/MM/dd h:mm:ss aa
#####################################################
## Misc
#####################################################
# give more info about what is not serializable in the session
# {valueType: "boolean", required: true}
debugSessionSerialization = false
# Infodots
#if the little yellow "i" images that show help should be enabled
# {valueType: "boolean", required: true}
infodot.enable=true
#############################
## Subject settings
#############################
# {valueType: "integer", required: true}
subject.maxChars = 100
# v2 max chars on subject before abbreviated
# {valueType: "integer", required: true}
subject2.maxChars = 40
#############################
## Security settings
#############################
# if you want to have the username in http header, put the header name here, e.g. REMOTE_USER
# {valueType: "string"}
grouper.ui.authentication.http.header =
# comma separated source ids that the authenticating user must be in to authenticate (if blank accept all)
# {valueType: "string", multiple: true}
grouper.ui.authentication.sourceIds =
# if the user id on each UI request must match (e.g. with shib)
# {valueType: "boolean", required: true}
grouper.ui.authentication.allowUserIdSwitching = false
#############################
## Membership settings
#############################
# Lite UI settings
#can be subjectId, sourceId, name, description, screenLabel, memberId, or attribute name which is single valued
#comma separated. will be sorted by sourceId, then the sort field (recommended to be screenName)
# {valueType: "string", multiple: true}
simpleMembershipUpdate.exportAllSubjectFields=sourceId, screenLabel, entityId, name, description
# export sort field
# {valueType: "string"}
simpleMembershipUpdate.exportAllSortField=screenLabel
# combo result size
# {valueType: "integer", required: true}
simpleMembershipUpdate.groupComboboxResultSize=200
# filter combo min chars
# {valueType: "integer", required: true}
simpleMembershipUpdate.filterComboMinChars=3
# filter max search subjects
# {valueType: "integer", required: true}
simpleMembershipUpdate.filterMaxSearchSubjects=1000
# max subjects in drop down
# {valueType: "integer", required: true}
simpleMembershipUpdate.subjectComboboxResultSize=250
#add an extra css to the simple membership update. use relative or absolute urls, comma separated
# {valueType: "string", multiple: true}
simpleMembershipUpdate.extraCss =
#properties file via url to look for text first (before nav.properties)
# {valueType: "string"}
simpleMembershipUpdate.textFromUrl =
#directory for skin files, if putting config files on file system and not classpath, then put the files here
# {valueType: "string"}
simpleMembershipUpdate.confDir =
#if by default the screen will delete multiple
#(screen is easier to use but takes longer potentially and defaults to false)
# {valueType: "boolean", required: true}
simpleMembershipUpdate.defaultDeleteMultiple=false
#if by default the screen will show the import by file instead of direct textarea input
#this defaults to true which helps with large imports, there might be memory problem with textarea import
# {valueType: "boolean", required: true}
simpleMembershipUpdate.defaultImportFile=true
#if we should allow external URL properties in group attribute: grouperGroupMshipSettingsUrl
# {valueType: "boolean", required: true}
simpleMembershipUpdate.allowExternalUrlProperties=true
#if allowing external text by url, this is the filter to strip invalid html tags. blank for none
# {valueType: "class", mustExtendClass: "edu.internet2.middleware.grouper.util.GrouperHtmlFilter"}
simpleMembershipUpdate.externalUrlTextProperties.grouperHtmlFilter = edu.internet2.middleware.grouper.util.GrouperHtmlFilter
#if the breadcrumb row should show on the screen by default
# {valueType: "boolean", required: true}
simpleMembershipUpdate.showBreadcrumbRowByDefault=true
#if the name row should show on the screen by default
# {valueType: "boolean", required: true}
simpleMembershipUpdate.showNameRowByDefault=true
#if the path row should show on the screen by default
# {valueType: "boolean", required: true}
simpleMembershipUpdate.showPathRowByDefault=true
#if the description row should show on the screen by default
# {valueType: "boolean", required: true}
simpleMembershipUpdate.showDescriptionRowByDefault=true
#if the id row should show on the screen by default
# {valueType: "boolean", required: true}
simpleMembershipUpdate.showIdRowByDefault=false
#if the id path row should show on the screen by default
# {valueType: "boolean", required: true}
simpleMembershipUpdate.showIdPathRowByDefault=false
#if the alternate id path row should show on the screen by default
# {valueType: "boolean", required: true}
simpleMembershipUpdate.showAlternateIdPathRowByDefault=false
#if the uuid row should show on the screen by default
# {valueType: "boolean", required: true}
simpleMembershipUpdate.showUuidRowByDefault=false
#if results must be in a certain group, or blank for no check. e.g. must be in employee group
# ${valueType: "group"}
simpleMembershipUpdate.subjectSearchRequireGroup =
#if results must be in certain sources, or blank for no check. e.g. must be in the person sources, comma separated
# ${valueType: "string", multiple: true}
simpleMembershipUpdate.subjectSearchRequireSources =
# customizer class to customize common things (extend GrouperUiCustomizer)
# ${valueType: "class", mustExtendClass: "org.apache.commons.lang.StringUtils.GrouperUiCustomizer"}
grouperUiCustomizerClassname =
# kill all cookies with these prefixes on logout (comma separated)
# ${valueType: "string", multiple: true}
grouperUi.logout.cookie.prefix =
# this configures how subjects look in the UI v2.2. This is the short version of the subject
# ${valueType: "string", regex: "^grouperUi\\.screenLabel2\\.sourceId\\.([0-9]+)$"}
grouperUi.screenLabel2.sourceId.0 = jdbc
# el for display of subjects
# ${valueType: "string", regex: "^grouperUi\\.screenLabel2\\.screenEl\\.([0-9]+)$"}
grouperUi.screenLabel2.screenEl.0 = ${subject.name}
# this configures how subjects look in the UI v2.2. This is the short version of the subject
# ${valueType: "string", regex: "^grouperUi\\.screenLabel2\\.sourceId\\.([0-9]+)$"}
grouperUi.screenLabel2.sourceId.1 = g:gsa
# el for display of subjects
# ${valueType: "string", regex: "^grouperUi\\.screenLabel2\\.screenEl\\.([0-9]+)$"}
grouperUi.screenLabel2.screenEl.1 = ${subject.getAttributeValue('displayExtension')}
# this configures how subjects look in the UI v2.2. This is the short version of the subject
# ${valueType: "string", regex: "^grouperUi\\.screenLabel2\\.sourceId\\.([0-9]+)$"}
grouperUi.screenLabel2.sourceId.2 = g:rsa
# el for display of subjects
# ${valueType: "string", regex: "^grouperUi\\.screenLabel2\\.screenEl\\.([0-9]+)$"}
grouperUi.screenLabel2.screenEl.2 = ${subject.getAttributeValue('displayExtension')}
# this configures how subjects look in the UI v2.2. This is the short version of the subject
# ${valueType: "string", regex: "^grouperUi\\.screenLabel2\\.sourceId\\.([0-9]+)$"}
grouperUi.screenLabel2.sourceId.3 = grouperEntities
# el for display of subjects
# ${valueType: "string", regex: "^grouperUi\\.screenLabel2\\.screenEl\\.([0-9]+)$"}
grouperUi.screenLabel2.screenEl.3 = ${subject.getAttributeValue('displayExtension')}
# Custom subject icons for V2 new UI - optionally set a different icon based on the subject id
#
# Override the default user icon for a specific source ID. Subjects can continue
# to be defined until a break in the numeric sequence of the sourceId value
#
# Note: Changes to g:gsa, g:isa, and grouperEntities are currently ineffective
# ${valueType: "string"
grouperUi.screenSubjectIcon2.screenHtmlEl.default = ${' '}
# localEntities
# ${valueType: "string", regex: "^grouperUi\\.screenSubjectIcon2\\.sourceId\\.([0-9]+)$"}
grouperUi.screenSubjectIcon2.sourceId.0 = grouperEntities
# el for icon
# ${valueType: "string", regex: "^grouperUi\\.screenSubjectIcon2\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.screenSubjectIcon2.screenHtmlEl.0 = ${' '}
# source for icon
# ${valueType: "string", regex: "^grouperUi\\.screenSubjectIcon2\\.sourceId\\.([0-9]+)$"}
#grouperUi.screenSubjectIcon2.sourceId.0 = subjectSourceA
# el for icon
# ${valueType: "string", regex: "^grouperUi\\.screenSubjectIcon2\\.screenHtmlEl\\.([0-9]+)$"}
#grouperUi.screenSubjectIcon2.screenHtmlEl.0 = ${' '}
# source for icon
# ${valueType: "string", regex: "^grouperUi\\.screenSubjectIcon2\\.sourceId\\.([0-9]+)$"}
#grouperUi.screenSubjectIcon2.sourceId.1 = subjectSourceB
# el for icon
# ${valueType: "string", regex: "^grouperUi\\.screenSubjectIcon2\\.screenHtmlEl\\.([0-9]+)$"}
#grouperUi.screenSubjectIcon2.screenHtmlEl.1 = ${' '}
# source for icon
# ${valueType: "string", regex: "^grouperUi\\.screenSubjectIcon2\\.sourceId\\.([0-9]+)$"}
#grouperUi.screenSubjectIcon2.sourceId.2 = subjectSourceC
# el for icon
# ${valueType: "string", regex: "^grouperUi\\.screenSubjectIcon2\\.screenHtmlEl\\.([0-9]+)$"}
#grouperUi.screenSubjectIcon2.screenHtmlEl.3 = ${' ' }
# this configures how subjects look in the lite UI. This is the short version of the display
# images (must be in assets/images dir) for subject source id
# source for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImg.sourceId.0 = pennperson
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.0 = user.png
# screen EL has "subject" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.subjectImg.screenEl.0 = ${subject.description}
# this configures how subjects look in the lite UI. This is the short version of the display
# images (must be in assets/images dir) for subject source id
# source for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImg.sourceId.1 = jdbc
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.1 = user.png
# screen EL has "subject" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.subjectImg.screenEl.1 = ${subject.description}
# this configures how subjects look in the lite UI. This is the short version of the display
# images (must be in assets/images dir) for subject source id
# source for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImg.sourceId.2 = g:gsa
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.2 = group.png
# screen EL has "subject" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.subjectImg.screenEl.2 = ${subject.getAttributeValue('displayExtension')}
# screen EL has "subjectImg" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.textId\\.([0-9]+)$"}
grouperUi.subjectImg.textId.2 = gsa
# this configures how subjects look in the lite UI. This is the short version of the display
# images (must be in assets/images dir) for subject source id
# source for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImg.sourceId.3 = g:isa
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.3 = application.png
# screen EL has "subject" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.subjectImg.screenEl.3 =
# screen EL has "subjectImg" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.textId\\.([0-9]+)$"}
grouperUi.subjectImg.textId.3 = isa
# this configures how subjects look in the lite UI. This is the short version of the display
# images (must be in assets/images dir) for subject source id
# source for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImg.sourceId.4 = grouperExternal
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.4 = user_red.png
# screen EL has "subject" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.subjectImg.screenEl.4 = ${subject.description}
#this source doesnt really exist, but it is the image for roles as opposed to groups
# this configures how subjects look in the lite UI. This is the short version of the display
# images (must be in assets/images dir) for subject source id
# source for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImg.sourceId.5 = g:rsa
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.5 = group_key.png
# screen EL has "subject" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.subjectImg.screenEl.5 = ${subject.getAttributeValue('displayExtension')}
# screen EL has "subjectImg" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.textId\\.([0-9]+)$"}
grouperUi.subjectImg.textId.5 = rsa
#this source doesnt really exist, but it is the image for roles as opposed to groups
# this configures how subjects look in the lite UI. This is the short version of the display
# images (must be in assets/images dir) for subject source id
# source for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImg.sourceId.6 = grouperEntities
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.6 = application.png
# screen EL has "subject" as an object
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.subjectImg.screenEl.6 = ${subject.getAttributeValue('displayExtension')}
# in parts of the UI where there is a long display, this is the long display
# ${valueType: "string", regex: "^grouperUi\\.subjectImgLong\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImgLong.sourceId.0 = g:gsa
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImgLong\\.image\\.([0-9]+)$"}
grouperUi.subjectImgLong.image.0 = group.png
# screen EL long subject
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenEl\\.([0-9]+)$"}
grouperUi.subjectImgLong.screenEl.0 = ${subject.getAttributeValue('displayName')}
# in parts of the UI where there is a long display, this is the long display
# ${valueType: "string", regex: "^grouperUi\\.subjectImgLong\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImgLong.sourceId.1 = g:rsa
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImgLong\\.image\\.([0-9]+)$"}
grouperUi.subjectImgLong.image.1 = group_key.png
# screen EL long subject
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenEl\\.([0-9]+)$"}
grouperUi.subjectImgLong.screenEl.1 = ${subject.getAttributeValue('displayName')}
# in parts of the UI where there is a long display, this is the long display
# ${valueType: "string", regex: "^grouperUi\\.subjectImgLong\\.sourceId\\.([0-9]+)$"}
grouperUi.subjectImgLong.sourceId.2 = grouperEntities
# image for subject image
# ${valueType: "string", regex: "^grouperUi\\.subjectImgLong\\.image\\.([0-9]+)$"}
grouperUi.subjectImgLong.image.2 = application.png
# screen EL long subject
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenEl\\.([0-9]+)$"}
grouperUi.subjectImgLong.screenEl.2 = ${subject.getAttributeValue('displayName')}
# directory to log html
# ${valueType: "string"}
grouperUi.logHtmlDir =
# log html
# {valueType: "boolean", required: true}
grouperUi.logHtml = false
#if comma separated email addresses are here, then errors will trigger emails (ui-lite)
# ${valueType: "string", multiple: true}
errorMailAddresses =
##################################
## Subject picker
##################################
# if putting config files on file system and not classpath, then put the files here
# ${valueType: "string"}
subjectPicker.confDir = c:/temp/subjectPicker
# subject picker config defaults
# if the subject should be sent back to the calling page in javascript object
# {valueType: "boolean", required: true}
subjectPicker.defaultSettings.sendSubjectJsonToCallback = true
#comma separated css urls (relative or absolute) for skinning this subject picker
# ${valueType: "string", multiple: true}
subjectPicker.defaultSettings.extraCss =
# when the subject object is sent in Javascript to the caller, which fields or attributes should be sent
# {valueType: "boolean", required: true}
subjectPicker.defaultSettings.subjectObject.include.subjectId = true
# include source id
# {valueType: "boolean", required: true}
subjectPicker.defaultSettings.subjectObject.include.sourceId = true
# include name
# {valueType: "boolean", required: true}
subjectPicker.defaultSettings.subjectObject.include.name = true
# include typeName
# {valueType: "boolean", required: true}
subjectPicker.defaultSettings.subjectObject.include.typeName = true
# include description
# {valueType: "boolean", required: true}
subjectPicker.defaultSettings.subjectObject.include.description = true
#comma separated list of subject attributes or INCLUDE_ALL_ATTRIBUTES for all
# ${valueType: "string", multiple: true}
#subjectObject.include.attributes = loginid,lfname
#comma separated list of subject attributes or INCLUDE_ALL_ATTRIBUTES for all
# ${valueType: "string", multiple: true}
subjectPicker.defaultSettings.subjectObject.include.attributes =
# put sourceIds to search in, or leave blank for all
# ${valueType: "string", multiple: true}
subjectPicker.defaultSettings.searchInSourceIds =
# You can configure per source how the subjects appear on screen, and customize per subject picker instance as well
# Increment the index (0, 1, 2, etc) to configure multiple sources
#source id we are configuring
# ${valueType: "string", regex: "^subjectPicker\\.defaultSettings\\.sourceProperties\\.sourceId\\.([0-9]+)$"}
subjectPicker.defaultSettings.sourceProperties.sourceId.0 =
#this is the expression language of how the subject result should appear on screen
# ${valueType: "string", regex: "^subjectPicker\\.defaultSettings\\.sourceProperties\\.subjectElForSource\\.([0-9]+)$"}
subjectPicker.defaultSettings.sourceProperties.subjectElForSource.0 =
# max results that can be retrieved before the group filter resultsMustBeInGroup is applied
# {valueType: "integer", required: true}
subjectPicker.defaultSettings.maxSubjectsResultsBeforeGroupSearch = 800
# max results that can be retrieved
# {valueType: "integer", required: true}
subjectPicker.defaultSettings.maxSubjectsResults = 200
#if results must be in group, or blank for no check. e.g. put your active employee group here
# ${valueType: "group"}
subjectPicker.defaultSettings.resultsMustBeInGroup =
#if the resource is far down the folder structure, you can remove part of it
# ${valueType: "string"}
subjectPicker.defaultSettings.removePrefixOnUi =
# is an actas should be applied for group operations. Generally this is GrouperSystem, though could be anyone, or blank
# to act as the logged in user
# ${valueType: "string"}
subjectPicker.defaultSettings.actAsSourceId = g:isa
# is an actas should be applied for group operations. Generally this is GrouperSystem, though could be anyone, or blank
# to act as the logged in user
# ${valueType: "string"}
subjectPicker.defaultSettings.actAsSubjectId = GrouperSystem
# put a URL here where the result (subjectId, sourceId, name, description) will be submitted back
# blank if same domain and just call opener directly
# ${valueType: "string"}
subjectPicker.defaultSettings.submitResultToUrl =
##################################
## Attribute def name picker
##################################
# if putting config files on file system and not classpath, then put the files here
attributeDefNamePicker.confDir =
# attributeDefName picker config defaults
#comma separated css urls (relative or absolute) for skinning this attributeDefName picker
attributeDefNamePicker.defaultSettings.extraCss =
# names of attribute defs where the attribute def names should be searched from
attributeDefNamePicker.defaultSettings.searchInAttributeDefNames =
# You can configure per source how the attributeDefNames appear on screen, and customize per attributeDefName picker instance as well
#this is the expression language of how the attributeDefName result should appear on screen
attributeDefNamePicker.defaultSettings.attributeDefNameNameEl =
# max results that can be retrieved
# {valueType: "integer", required: true}
attributeDefNamePicker.defaultSettings.maxAttributeDefNamesResults = 200
# is an actas should be applied for group operations. Generally this is GrouperSystem, though could be anyone, or blank
# to act as the logged in user
attributeDefNamePicker.defaultSettings.actAsSourceId = g:isa
attributeDefNamePicker.defaultSettings.actAsSubjectId = GrouperSystem
# put a URL here where the result (attributeDefNameId, displayName, name, description) will be submitted back
# blank if same domain and just call opener directly
attributeDefNamePicker.defaultSettings.submitResultToUrl =
##################################
## v2.2 UI index
##################################
# generally the number of objects in each section
# {valueType: "integer", required: true}
uiV2.index.numberOfObjectsInSectionDefault = 10
# number of groups, stems, etc on index page to show for favorites. Note, e.g. if this is 5, show 5 max of each
# {valueType: "integer", required: true}
uiV2.index.maxFavoritesEachType = 5
# number of groups, stems, etc on index page to show for recently used. Note, e.g. if this is 5, show 5 max of each
# {valueType: "integer", required: true}
uiV2.index.maxRecentlyUsedEachType = 5
# number of millis that widget queries must complete in before they are abandoned and the user must click a link to display it
# -1 means dont run in threads, and just draw the screen no matter how long it takes. 0 means, dont even try to load the widgets,
# let the user do it themselves
# {valueType: "integer", required: true}
uiV2.index.widgetMaxQueryMillis = 5000
# if you are testing the widgets, put a sleep there
# max widget millis must elapse before the JSP displays
uiV2.index.test.sleepIn.recentlyUsed.widgetMillis = 0
# {valueType: "integer", required: true}
uiV2.index.test.sleepIn.myFavorites.widgetMillis = 0
# {valueType: "integer", required: true}
uiV2.index.test.sleepIn.groupsImanage.widgetMillis = 0
# {valueType: "integer", required: true}
uiV2.index.test.sleepIn.stemsImanage.widgetMillis = 0
# {valueType: "integer", required: true}
uiV2.index.test.sleepIn.myMemberships.widgetMillis = 0
# {valueType: "integer", required: true}
uiV2.index.test.sleepIn.myServices.widgetMillis = 0
##################################
## External subjects invitation
##################################
# if the registration screen is enabled
# {valueType: "boolean", required: true}
externalMembers.enabledRegistration = false
#if admins should be emailed after each action, put comma separated addresses here
externalMembers.emailAdminsAddressesAfterActions =
#if you want to allow users to delete their record
# {valueType: "boolean", required: true}
externalMembers.allowSelfDelete = false
##################################
## Invite external members
##################################
# group combobox result size
# {valueType: "integer", required: true}
inviteExternalMembers.groupComboboxResultSize = 200
# if the wheel group is allowed to be invited
# {valueType: "boolean", required: true}
inviteExternalMembers.allowWheelInInvite = false
# if the invitation screen is enabled
# {valueType: "boolean", required: true}
inviteExternalMembers.enableInvitation = false
#if link from new UI
# {valueType: "boolean", required: true}
inviteExternalPeople.link-from-new-ui = false
#if admins should be emailed after each action, put comma separated addresses here
inviteExternalMembers.emailAdminsAddressesAfterActions =
#if we should allow invite by identifier
# {valueType: "boolean", required: true}
inviteExternalMembers.allowInviteByIdentifier = false
#if we should allow invite by identifier
# {valueType: "string", multiple: true}
inviteExternalMembers.searchSourcesForMatchesBeforeAdding =
###################################
## Simple permission update
###################################
#max size for combobox when filtering attribute defs for permissions
# {valueType: "integer", required: true}
simplePermissionUpdate.attributeDefComboboxResultSize = 200
#max size for combobox when filtering permission resources
# {valueType: "integer", required: true}
simplePermissionUpdate.permissionResourceComboboxResultSize = 200
#max users in combobox when filtering
# {valueType: "integer", required: true}
simplePermissionUpdate.subjectComboboxResultSize = 50
#number of rows to repeat headers on permissions screen
# {valueType: "integer", required: true}
simplePermissionUpdate.repeatPermissionHeaderAfterRows = 20
#max chars in subject listing in permissions screen
# {valueType: "integer", required: true}
simplePermissionUpdate.maxOwnerSubjectChars = 50
#if we shouldnt have groups in the subject results
# {valueType: "boolean", required: true}
simplePermissionUpdate.allowGroupsInSubjectResults = false
###################################
## Simple attribute update
###################################
#max size for combobox when filtering attribute defs to edit
# {valueType: "integer", required: true}
simpleAttributeUpdate.attributeDefComboboxResultSize = 200
#repeat the header of which privilege is which every X rows
# {valueType: "integer", required: true}
simpleAttributeUpdate.repeatPrivilegeHeaderAfterRows = 20
#max size for combobox when filtering privilege users to add
# {valueType: "integer", required: true}
simpleAttributeUpdate.attributeDefPrivilegeUserComboboxResultSize = 200
#max size for combobox for search for members in assignment
# {valueType: "integer", required: true}
simpleAttributeUpdate.memberComboboxResultSize = 200
#when showing assignments, this is the max number of chars before ellipses, -1 for no ellipses
# {valueType: "integer", required: true}
simpleAttributeUpdate.maxOwnerSubjectChars = 50
###################################
## Simple attribute name
###################################
#max size for combobox when filtering attribute def names to edit
# {valueType: "integer", required: true}
simpleAttributeNameUpdate.attributeDefNameComboboxResultSize = 200
###################################
## Groups
###################################
#max size for combobox when filtering groups to edit
# {valueType: "integer", required: true}
simpleGroupUpdate.groupComboboxResultSize = 200
#max size for entity drop down in group privilege screen
# {valueType: "integer", required: true}
simpleGroupUpdate.groupPrivilegeUserComboboxResultSize = 200
###################################
## Directed graphs
###################################
# {valueType: "integer", required: true}
directedGraph.width = 1000
# {valueType: "integer", required: true}
directedGraph.height = 600
###################################
## Internationalization
###################################
# this should be false, and make sure URIEncoding is set to UTF-8 in the tomcat connector
# Enabled/disabled status
# Default example is e.g. "2021/02/01 12:43 AM EST" (see Java SimpleDateFormat for valid formats)
# {valueType: "string", required: false}
uiV2.group.Membership.dateFormat = yyyy/MM/dd h:mm a z
# Format string for member start/end dates in group view with Advanced->Point in time audit
# Default example is e.g. "2020/10/24 12:43 AM EDT" (see Java SimpleDateFormat for valid formats)
# {valueType: "string", required: false}
uiV2.group.PITMembership.dateFormat = yyyy/MM/dd h:mm a z
# if results must be in certain sources, or blank for no check. e.g. must be in the person sources, comma separated
uiV2.subjectSearchRequireSources =
# if someone types in a subject ID or identifier, should that search all subjects? if so then blank
uiV2.subjectLookupRequireSources =
###################################
## V2 UI provisioning settings
###################################
# put in a group here if you want to restrict the provisioning tab to certin users.
# note, admins can always see the tab
# ${valueType: "group"}
uiV2.provisioning.must.be.in.group=
# number of records to show by default when showing provisioning logs
# {valueType: "integer", required: false}
uiV2.provisioning.logs.default.page.size = 100
# seconds to wait until refresh
# {valueType: "integer"}
uiV2.provisioning.diagnostics.progressRefreshSeconds = 5
# pause in between records to test the progress, set to a few thousand perhaps
# {valueType: "integer"}
uiV2.provisioning.diagnostics.pauseInBetweenRecordsMillis = 0
# if should use threads
# {valueType: "boolean"}
uiV2.provisioning.diagnostics.useThread = true
# seconds to wait until progress starts
# {valueType: "integer"}
uiV2.provisioning.diagnostics.progressStartsInSeconds = 10
###################################
## V2 UI loader settings
###################################
# put in a group here if you people to be able to see the loader overall button in misc and the loader tab in groups they can view
# note, sysadmins can always see the tab
# ${valueType: "group"}
uiV2.loader.must.be.in.group.elConfig = ${edu.internet2.middleware.grouper.cfg.GrouperConfig.retrieveConfig().propertyValueString("grouper.rootStemForBuiltinObjects")}:loaderViewers
# put a group here if you want these users to be able to edit loader jobs
# ${valueType: "group"}
uiV2.loader.edit.if.in.group.elConfig = ${edu.internet2.middleware.grouper.cfg.GrouperConfig.retrieveConfig().propertyValueString("grouper.rootStemForBuiltinObjects")}:loaderEditors
# if group admins can see the loader tab
# {valueType: "boolean", required: true}
uiV2.loader.view.by.group.admins = true
# how many logs to display on screen
# {valueType: "integer", required: true}
uiV2.loader.logs.maxSize = 400
# max that a user could specify
# {valueType: "integer", required: true}
uiV2.loader.logs.maxMaxSize = 5000
###################################
## V2 UI instrumentation settings
###################################
# should show instrumentation?
# {valueType: "boolean", required: true}
uiV2.admin.instrumentation.show = true
# restrict access based on this group, by default only admins can see
# note, admins can always see the screen
# ${valueType: "group"}
uiV2.admin.instrumentation.must.be.in.group =
###################################
## V2 UI daemon jobs settings
###################################
# should show daemon jobs?
# {valueType: "boolean", required: true}
uiV2.admin.daemonJobs.show = true
# restrict access based on this group, by default only admins can see
# note, admins can always see the screen
# ${valueType: "group"}
uiV2.admin.daemonJobs.must.be.in.group =
# how often to refresh the page (in seconds). -1 to disable
# {valueType: "integer", required: true}
uiV2.admin.daemonJobs.refreshInterval = -1
# how many times to refresh the page
# {valueType: "integer", required: true}
uiV2.admin.daemonJobs.refreshCount = 30
# comma separated list of additions to the common filter drop down on All Daemon Jobs screen drop down
# {valueType: "string", required: false, multiple: true}
uiV2.admin.daemonJob.commonFilterAdditions =
# format string for job schedule times visible in Daemon job "show extended results".
# Default format is e.g. 2020-10-23 13:59:50 EDT (see Java SimpleDateFormat for valid formats)
# {valueType: "string", required: false}
uiV2.admin.daemonJob.extendedSchedule.dateFormat = yyyy-MM-dd HH:mm:ss z
###################################
## V2 UI admin settings
###################################
# should show subject api diagnostics?
# {valueType: "boolean", required: true}
uiV2.admin.subjectApiDiagnostics.show = true
# put in a group here if you want to allow the subject API diagnostics to certin users.
# note, admins can always see the screen
# {valueType: "group"}
uiV2.admin.subjectApiDiagnostics.must.be.in.group =
#######################################
## Grouper templates
#######################################
# class that implements this service template
# {valueType: "class", regex: "^grouper\\.template\\.([^.]+)\\.logicClass$", mustExtendClass: "edu.internet2.middleware.grouper.grouperUi.beans.ui.GrouperTemplateLogicBase"}
grouper.template.service.logicClass=edu.internet2.middleware.grouper.grouperUi.beans.ui.GrouperNewServiceTemplateLogic
# class that implements this service template
# {valueType: "class", regex: "^grouper\\.template\\.([^.]+)\\.logicClass$", mustExtendClass: "edu.internet2.middleware.grouper.grouperUi.beans.ui.GrouperTemplateLogicBase"}
grouper.template.policyGroup.logicClass=edu.internet2.middleware.grouper.grouperUi.beans.ui.GrouperTemplatePolicyGroupLogic
# class that implements this tier structure template
# {valueType: "class", regex: "^grouper\\.template\\.([^.]+)\\.logicClass$", mustExtendClass: "edu.internet2.middleware.grouper.grouperUi.beans.ui.GrouperTemplateLogicBase"}
grouper.template.tierStructure.logicClass=edu.internet2.middleware.grouper.grouperUi.beans.ui.GrouperTierStructureLogic
#######################################
## Configuration in ui
#######################################
# allow configuration from ui
# {valueType: "boolean", required: true}
grouperUi.configuration.enabled=true
# allow configuration only from these IP ranges, e.g. 1.2.3.4/32 or 2.3.4.5/24 or 2001:0db8:85a3:0000:0000:8a2e:0370:7334, comma separated, set to 0.0.0.0/0 if available from everywhere
# {valueType: "string", multiple: true}
grouperUi.configurationEditor.sourceIpAddresses.elConfig = ${elUtils.processEnvVarOrFile('GROUPER_UI_CONFIGURATION_EDITOR_SOURCEIPADDRESSES')}
# if the source IP is set by apache or proxy or whatever
# {valueType: "string", sampleValue: "X-FORWARDED-FOR"}
grouperUi.reverseProxyForwardedForHeader =
#######################################
## Import
#######################################
# if should use threads
# {valueType: "boolean"}
grouperUi.import.useThread = true
# seconds to wait until progress starts
# {valueType: "integer"}
grouperUi.import.progressStartsInSeconds = 10
# seconds to wait until refresh
# {valueType: "integer"}
grouperUi.import.progressRefreshSeconds = 5
# pause in between records to test the progress, set to a few thousand perhaps
# {valueType: "integer"}
grouperUi.import.pauseInBetweenRecordsMillis = 0
# if should use threads
# {valueType: "boolean"}
grouperUi.composite.useThread = true
# seconds to wait until progress starts
# {valueType: "integer"}
grouperUi.composite.progressStartsInSeconds = 10
# seconds to wait until refresh
# {valueType: "integer"}
grouperUi.composite.progressRefreshSeconds = 5
# pause in composite to test the progress, set to 60 perhaps
# {valueType: "integer"}
grouperUi.composite.pauseInCompositeSeconds = 0
# if should use threads
# {valueType: "boolean"}
grouperUi.editStem.useThread = true
# seconds to wait until progress starts
# {valueType: "integer"}
grouperUi.editStem.progressStartsInSeconds = 10
# seconds to wait until refresh
# {valueType: "integer"}
grouperUi.editStem.progressRefreshSeconds = 5
# pause in action to test the progress, set to 60 perhaps
# {valueType: "integer"}
grouperUi.editStem.pauseInActionSeconds = 0
# if should use threads
# {valueType: "boolean"}
grouperUi.visualization.useThread = true
# seconds to wait until progress starts
# {valueType: "integer"}
grouperUi.visualization.progressStartsInSeconds = 10
# seconds to wait until refresh
# {valueType: "integer"}
grouperUi.visualization.progressRefreshSeconds = 5
# pause in action to test the progress, set to 60 perhaps
# {valueType: "integer"}
grouperUi.visualization.pauseInActionSeconds = 0
#############################################
## Developer settings
#############################################
# if you're developing, it will refresh configs and text etc on every UI request (no nneed to compile, build, restart, etc)
# note this affects caches if you are working on something that relies on caching
# you should only set this to true while working on externalized text etc, then set back to false for final testing
# {valueType: "boolean", required: true}
grouperUi.refreshCaches.onEveryRequest = false