All Downloads are FREE. Search and download functionalities are using the official Maven repository.

.middleware.grouper.grouper.5.12.2.source-code.grouper-ui-ng.base.properties Maven / Gradle / Ivy

There is a newer version: 5.13.5
Show newest version
#
# 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.1 = subjectSourceA

# 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 = subjectSourceB

# 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 in the lite UI
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.0 = user.png

# label EL for subject in the lite UI
# ${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 in the lite UI
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.1 = user.png

# label EL for subject in the lite UI
# ${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 in the lite UI
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.2 = group.png

# label EL for subject in the lite UI
# ${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 in the lite UI
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.3 = application.png

# label EL for subject in the lite UI
# ${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 in the lite UI
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.4 = user_red.png

# label EL for subject in the lite UI
# ${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 in the lite UI
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.image\\.([0-9]+)$"}
grouperUi.subjectImg.image.5 = group_key.png

# label EL for subject in the lite UI
# ${valueType: "string", regex: "^grouperUi\\.subjectImg\\.screenHtmlEl\\.([0-9]+)$"}
grouperUi.subjectImg.screenEl.5 = ${subject.getAttributeValue('displayExtension')}

# (deprecated) screen name for source; likely not used
# ${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\\.subjectImgLong\\.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\\.subjectImgLong\\.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

# Loader log format for elapsed time, get data, and load data columns. Options 'seconds' or 'minutes' will format
# to 2 decimal places. Option 'h:m:s' will format as time, e.g. 27:15:20.24. Option 'hms' will format as '27h15M20.74s'.
# You may also want to override text properties starting with grouperLoaderLogsMillis... so the headers are accurate
# {valueType: "string", required: false, formElement: "dropdown", optionValues: ["milliseconds", "seconds", "minutes", "h:m:s", "hms"]}
uiV2.admin.daemonJob.elapsedTimeUnit = milliseconds

###################################
## 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





© 2015 - 2024 Weber Informatics LLC | Privacy Policy