Configuration Properties Reference
This page documents all configuration properties available in config/app-default-config.json. These are the base defaults for every ngdpbase installation. Override any property in config/app-custom-config.json (not tracked in git) or an environment-specific config file.
See Server Management for how configuration files are loaded and how to apply overrides.
Configuration Loading Order
config/app-default-config.json— base defaults (documented here)config/app-{NODE_ENV}-config.json— environment overridesconfig/app-custom-config.json— local machine overrides (gitignored)
Later files override earlier ones. Only set what differs from defaults.
Application Core
| Key | Default | Description |
|---|---|---|
ngdpbase.application-name | "ngdpbase" | Display name for the application |
ngdpbase.favicon-path | "/favicon.svg" | Path to the favicon served to browsers |
ngdpbase.application.category | "Digital Platform" | Application category label |
ngdpbase.version | _(current version)_ | Application version string |
ngdpbase.github.repo | "jwilleke/ngdpbase" | GitHub repository identifier |
ngdpbase.base-url | "http://localhost:3000" | Canonical base URL — used in links, RSS, Schema.org output |
ngdpbase.encoding | "UTF-8" | Default character encoding |
ngdpbase.front-page | "Welcome" | Title of the page shown at the root URL |
ngdpbase.server.port | 3000 | HTTP port the server listens on |
ngdpbase.server.host | "localhost" | Network host/interface to bind |
Session
| Key | Default | Description |
|---|---|---|
ngdpbase.session.secret | _(default string)_ | Secret used to sign session cookies — **change in production** |
ngdpbase.session.max-age | 86400000 | Session lifetime in milliseconds (default: 24 h) |
ngdpbase.session.secure | false | Set true to require HTTPS for session cookies |
ngdpbase.session.http-only | true | Prevent client-side JavaScript from reading the session cookie |
ngdpbase.session.storagedir | ${FAST_STORAGE}/sessions | Directory for server-side session files — use fast storage (SSD) |
ngdpbase.session.store | "users/sessions.json" | Legacy session store path (superseded by storagedir) |
Translator / Link Reader
| Key | Default | Description |
|---|---|---|
ngdpbase.translator-reader.match-english-plurals | true | Allow page links to match plural/singular page name variants |
ngdpbase.translator-reader.camel-case-links | true | Automatically link CamelCase words as page names |
ngdpbase.translator-reader.allow-html | false | Allow raw HTML in markup |
ngdpbase.translator-reader.plain-uris | true | Automatically hyperlink bare URLs in content |
Application Organization (Install Identity)
These settings describe the organization that owns this install. They are written by the install wizard and read by OrganizationManager (issue #617). Install completion itself is tracked via $FAST_STORAGE/.install-complete — not via config.
| Key | Default | Description |
|---|---|---|
ngdpbase.application.organization.storagedir | "${FAST_STORAGE}/organizations" | Directory holding one JSON file per Organization record |
ngdpbase.application.organization.file | "" | Filename (under storagedir) of the install's anchor org, e.g. acme-corporation.json |
ngdpbase.application.organization.url | "" | Canonical URL of the org — becomes JSON-LD @id. Defaults to ngdpbase.base-url if blank |
ngdpbase.application.organization.name | "" | Short organization name used in page headers and metadata |
ngdpbase.application.organization.legal-name | "" | Legal organization name for Schema.org output |
ngdpbase.application.organization.description | "" | Short description of the organization |
ngdpbase.application.organization.founding-date | "" | ISO 8601 date the organization was founded |
ngdpbase.application.organization.contact-email | "" | Public contact email address |
ngdpbase.application.organization.address-locality | "" | City |
ngdpbase.application.organization.address-region | "" | State or region |
ngdpbase.application.organization.address-country | "" | Two-letter ISO country code |
ngdpbase.application.organization.provider | "fileorganizationprovider" | Active OrganizationProvider class (lowercased) |
ngdpbase.application.persons.storagedir | "${FAST_STORAGE}/persons" | Directory holding one JSON file per Person record |
ngdpbase.application.persons.provider | "filepersonprovider" | Active PersonProvider class (lowercased) |
Parser
| Key | Default | Description |
|---|---|---|
jspwiki.parser.useExtractionPipeline | true | Use the extraction pipeline for parsing (Phase 6, Issue #120) |
ngdpbase.markdown.footnotes.enabled | true | Enable Markdown footnote syntax |
Page Storage
| Key | Default | Description |
|---|---|---|
ngdpbase.page.enabled | true | Enable the page subsystem |
ngdpbase.page.provider | "filesystemprovider" | Active page provider class name |
ngdpbase.page.provider.default | "filesystemprovider" | Fallback provider if the active one fails |
ngdpbase.page.provider.filesystem.storagedir | ${SLOW_STORAGE}/pages | Directory where user page files are stored |
ngdpbase.page.provider.filesystem.requiredpagesdir | "./required-pages" | Directory containing bundled system/documentation pages |
ngdpbase.page.provider.versioning.indexfile | ${FAST_STORAGE}/page-index.json | Path to the page index file used for fast lookups — use fast storage |
ngdpbase.page.provider.filesystem.encoding | "utf-8" | File encoding for page files |
ngdpbase.page.provider.filesystem.autosave | true | Automatically save the page index after each write |
ngdpbase.directories.pages | ${SLOW_STORAGE}/pages | Legacy alias for filesystem.storagedir |
ngdpbase.directories.required-pages | "./required-pages" | Legacy alias for filesystem.requiredpagesdir |
Attachment Storage
| Key | Default | Description |
|---|---|---|
ngdpbase.attachment.enabled | true | Enable file attachments |
ngdpbase.attachment.provider | "basicattachmentprovider" | Active attachment provider |
ngdpbase.attachment.provider.default | "basicattachmentprovider" | Fallback provider |
ngdpbase.attachment.maxsize | 10485760 | Maximum upload size in bytes (default: 10 MB) |
ngdpbase.attachment.allowedtypes | "image/*,text/*,application/pdf" | Comma-separated MIME type patterns allowed for upload |
ngdpbase.attachment.forcedownload | false | Force browser download rather than inline display |
ngdpbase.attachment.metadatafile | ${SLOW_STORAGE}/attachments/attachment-metadata.json | Path to the attachment metadata index |
ngdpbase.attachment.provider.basic.storagedir | ${SLOW_STORAGE}/attachments | Directory for stored attachment files |
ngdpbase.attachment.provider.basic.hashcontent | true | Hash file content for deduplication |
ngdpbase.attachment.provider.basic.hashmethod | "sha256" | Hashing algorithm: "sha256" or "md5" |
Enhanced Attachments
| Key | Default | Description |
|---|---|---|
ngdpbase.attachment.enhanced.enabled | true | Enable thumbnail generation and enhanced metadata |
ngdpbase.attachment.enhanced.thumbnails | true | Generate image thumbnails on upload |
ngdpbase.attachment.enhanced.thumbnailsizes | "150x150,300x300" | Comma-separated WxH thumbnail sizes |
ngdpbase.attachment.enhanced.metadata | true | Extract and store file metadata (EXIF, etc.) |
ngdpbase.attachment.enhanced.showmetadata | true | Show metadata in the attachment UI |
ngdpbase.attachment.enhanced.showfilesize | true | Show file size in attachment listings |
ngdpbase.attachment.enhanced.showmodified | true | Show last-modified date in attachment listings |
ngdpbase.attachment.enhanced.iconpath | "/icons/filetypes" | URL path for file-type icons |
ngdpbase.attachment.enhanced.cachemetadata | true | Cache extracted metadata in memory |
ngdpbase.attachment.enhanced.generatethumbnails | true | Generate thumbnails at upload time |
Search
Shared Settings
| Key | Default | Description |
|---|---|---|
ngdpbase.search.enabled | true | Enable search |
ngdpbase.search.provider | "lunrsearchprovider" | Active search provider |
ngdpbase.search.provider.default | "lunrsearchprovider" | Fallback provider |
ngdpbase.search.maxresults | 50 | Maximum results returned per query |
ngdpbase.search.autocomplete.enabled | true | Enable autocomplete suggestions |
ngdpbase.search.autocomplete.minlength | 2 | Minimum characters before autocomplete activates |
ngdpbase.search.suggestions.enabled | true | Enable query suggestions |
ngdpbase.search.suggestions.maxitems | 10 | Maximum suggestion items to show |
LunrSearchProvider
| Key | Default | Description |
|---|---|---|
ngdpbase.search.provider.lunr.indexdir | ${FAST_STORAGE}/search-index | Directory for Lunr index files — use fast storage |
ngdpbase.search.provider.lunr.stemming | true | Enable word stemming (e.g. "running" matches "run") |
ngdpbase.search.provider.lunr.boost.title | 10 | Search score boost for title matches |
ngdpbase.search.provider.lunr.boost.systemcategory | 8 | Boost for system-category matches |
ngdpbase.search.provider.lunr.boost.userkeywords | 6 | Boost for user-keyword matches |
ngdpbase.search.provider.lunr.boost.tags | 5 | Boost for tag matches |
ngdpbase.search.provider.lunr.boost.keywords | 4 | Boost for keyword matches |
ngdpbase.search.provider.lunr.maxresults | 50 | Maximum results from the Lunr index |
ngdpbase.search.provider.lunr.snippetlength | 200 | Character length of result snippets |
ElasticsearchSearchProvider
Activate with "ngdpbase.search.provider": "elasticsearchsearchprovider". Lunr remains the default.
| Key | Default | Description |
|---|---|---|
ngdpbase.search.provider.elasticsearch.url | "http://localhost:9200" | Elasticsearch endpoint URL |
ngdpbase.search.provider.elasticsearch.indexname | "ngdpbase-pages" | Index name in Elasticsearch (distinct from sist2 addon index) |
ngdpbase.search.provider.elasticsearch.connecttimeout | 5000 | Connection timeout in milliseconds |
ngdpbase.search.provider.elasticsearch.requesttimeout | 30000 | Request timeout in milliseconds |
Cache
Shared Settings
| Key | Default | Description |
|---|---|---|
ngdpbase.cache.enabled | true | Enable caching |
ngdpbase.cache.provider | "nodecacheprovider" | Active cache provider |
ngdpbase.cache.provider.default | "nodecacheprovider" | Fallback provider |
ngdpbase.cache.defaultttl | 300 | Default cache entry TTL in seconds |
ngdpbase.cache.maxkeys | 1000 | Maximum number of keys in cache |
ngdpbase.cache.checkperiod | 120 | Interval in seconds for expiry checks |
NodeCacheProvider
| Key | Default | Description |
|---|---|---|
ngdpbase.cache.provider.nodecache.stdttl | 300 | Default TTL in seconds |
ngdpbase.cache.provider.nodecache.checkperiod | 120 | Expiry check interval in seconds |
ngdpbase.cache.provider.nodecache.maxkeys | 1000 | Maximum keys |
ngdpbase.cache.provider.nodecache.useclones | true | Return cloned objects (prevents mutation of cached values) |
RedisCacheProvider (Future)
| Key | Default | Description |
|---|---|---|
ngdpbase.cache.provider.redis.url | "redis://localhost:6379" | Redis connection URL |
ngdpbase.cache.provider.redis.keyprefix | "ngdpbase:" | Prefix for all cache keys |
ngdpbase.cache.provider.redis.enablecluster | false | Enable Redis cluster mode |
ngdpbase.cache.provider.redis.connecttimeout | 5000 | Connection timeout in milliseconds |
Audit Trail
Shared Settings
| Key | Default | Description |
|---|---|---|
ngdpbase.audit.enabled | true | Enable audit logging |
ngdpbase.audit.provider | "fileauditprovider" | Active audit provider |
ngdpbase.audit.provider.default | "fileauditprovider" | Fallback provider |
ngdpbase.audit.loglevel | "info" | Minimum level to record: "debug", "info", "warn", "error" |
ngdpbase.audit.maxqueuesize | 1000 | Maximum events queued before flush |
ngdpbase.audit.flushinterval | 30000 | Flush interval in milliseconds |
ngdpbase.audit.retentiondays | 90 | Days to retain audit records |
FileAuditProvider
| Key | Default | Description |
|---|---|---|
ngdpbase.audit.provider.file.logdirectory | ${FAST_STORAGE}/logs | Directory for audit log files |
ngdpbase.audit.provider.file.auditfilename | "audit.log" | Active audit log filename |
ngdpbase.audit.provider.file.archivefilename | "audit-archive.log" | Archive log filename |
ngdpbase.audit.provider.file.maxfilesize | "10MB" | Maximum size before rotation |
ngdpbase.audit.provider.file.maxfiles | 10 | Number of rotated files to keep |
Markup / Parser
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.enabled | true | Enable the markup subsystem |
ngdpbase.markup.use-advanced-parser | true | Use the advanced extraction-pipeline parser |
ngdpbase.markup.fallback-to-legacy | true | Fall back to legacy parser on advanced parser failure |
ngdpbase.markup.integration.rendering-manager | true | Integrate with RenderingManager |
ngdpbase.markup.log-parsing-method | true | Log which parsing method (advanced vs legacy) is used |
ngdpbase.markup.caching | true | Enable markup result caching |
ngdpbase.markup.cache-ttl | 300 | Default markup cache TTL in seconds |
Markup Cache Sub-Sections
Each sub-section (parse-results, handler-results, patterns, variables) shares the same keys:
| Key | Description |
|---|---|
*.enabled | Enable this cache layer |
*.ttl | TTL in seconds |
*.max-size | Maximum number of cached entries |
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.cache.enable-warmup | true | Pre-warm cache on startup |
ngdpbase.markup.cache.metrics-enabled | true | Expose cache hit/miss metrics |
Handler Registry
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.handler-registry.max-handlers | 100 | Maximum registered markup handlers |
ngdpbase.markup.handler-registry.allow-duplicate-priorities | true | Allow handlers with the same priority value |
ngdpbase.markup.handler-registry.enable-dependency-resolution | true | Resolve handler ordering by declared dependencies |
ngdpbase.markup.handler-registry.enable-conflict-detection | true | Warn on handler conflicts |
ngdpbase.markup.handler-registry.default-timeout | 5000 | Handler execution timeout in milliseconds |
Markup Handlers
Each built-in handler has enabled (boolean) and priority (integer, higher runs first) keys.
| Handler | Default Priority | Purpose |
|---|---|---|
plugin | 90 | Plugin tags [{PluginName ...}] |
wikitag | 95 | Page link tags [[PageName]] |
form | 85 | HTML form generation |
interwiki | 80 | Inter-wiki links |
attachment | 75 | Attachment display |
style | 70 | WikiStyle CSS classes |
search | 65 | Inline search results |
rss | 60 | RSS feed inclusion |
Additional attachment-handler flags:
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.handlers.attachment.enhanced | true | Enable enhanced attachment display |
ngdpbase.markup.handlers.attachment.thumbnails | true | Show thumbnails for image attachments |
ngdpbase.markup.handlers.attachment.metadata | true | Display file metadata alongside attachments |
Filters
Filter Pipeline
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.filters.enabled | true | Enable the filter pipeline |
ngdpbase.markup.filters.pipeline.max-filters | 50 | Maximum filters in the pipeline |
ngdpbase.markup.filters.pipeline.timeout | 10000 | Pipeline execution timeout in milliseconds |
ngdpbase.markup.filters.pipeline.enable-profiling | true | Record per-filter timing |
ngdpbase.markup.filters.pipeline.fail-on-error | false | Abort the pipeline if any filter throws |
Spam Filter
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.filters.spam.enabled | false | Enable spam detection |
ngdpbase.markup.filters.spam.priority | 100 | Filter priority (runs first when enabled) |
ngdpbase.markup.filters.spam.max-links | 10 | Maximum links allowed per page save |
ngdpbase.markup.filters.spam.max-images | 5 | Maximum images allowed per page save |
ngdpbase.markup.filters.spam.blacklist-words | _(list)_ | Comma-separated words that trigger spam rejection |
ngdpbase.markup.filters.spam.whitelist-domains | _(list)_ | Comma-separated domains exempt from link limits |
ngdpbase.markup.filters.spam.cache-blacklist | true | Cache the blacklist in memory |
Security Filter
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.filters.security.enabled | false | Enable HTML security sanitization |
ngdpbase.markup.filters.security.priority | 110 | Filter priority |
ngdpbase.markup.filters.security.prevent-xss | true | Strip XSS vectors |
ngdpbase.markup.filters.security.prevent-csrf | true | Strip CSRF vectors |
ngdpbase.markup.filters.security.sanitize-html | true | Sanitize HTML to allowed tags/attributes |
ngdpbase.markup.filters.security.allowed-tags | _(list)_ | Comma-separated HTML tags permitted in content |
ngdpbase.markup.filters.security.allowed-attributes | _(list)_ | Comma-separated attributes permitted on allowed tags |
ngdpbase.markup.filters.security.strip-dangerous-content | true | Remove scripts, event handlers, and dangerous URLs |
Validation Filter
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.filters.validation.enabled | true | Enable content validation |
ngdpbase.markup.filters.validation.priority | 90 | Filter priority |
ngdpbase.markup.filters.validation.validate-markup | true | Validate markup syntax |
ngdpbase.markup.filters.validation.validate-links | true | Check internal links exist |
ngdpbase.markup.filters.validation.validate-images | true | Validate image references |
ngdpbase.markup.filters.validation.max-content-length | 1048576 | Maximum page content size in bytes (default: 1 MB) |
ngdpbase.markup.filters.validation.report-errors | true | Return validation errors to the editor |
Custom Filters
| Key | Default | Description |
|---|---|---|
ngdpbase.markup.filters.custom.enabled | false | Load custom filter plugins |
ngdpbase.markup.filters.custom.search-paths | "./filters,./src/filters" | Comma-separated directories to scan for custom filters |
ngdpbase.markup.filters.custom.auto-load | true | Auto-discover and register found filters |
ngdpbase.markup.filters.custom.cache-results | true | Cache filter results |
InterWiki
| Key | Default | Description |
|---|---|---|
ngdpbase.interwiki.enabled | true | Enable inter-wiki links |
ngdpbase.interwiki.options.openInNewWindow | true | Open inter-wiki links in a new browser tab |
ngdpbase.interwiki.options.addIconIndicator | true | Show an external-link icon next to inter-wiki links |
ngdpbase.interwiki.options.caseSensitive | false | Treat site names as case-insensitive |
ngdpbase.interwiki.options.showTooltips | true | Show tooltips on hover |
ngdpbase.interwiki.options.cacheTTL | 3600 | Cache TTL in seconds for inter-wiki link resolution |
ngdpbase.interwiki.options.maxCacheEntries | 1000 | Maximum cached inter-wiki entries |
ngdpbase.interwiki.sites | _(object)_ | Map of site keys to { url, description, icon, enabled, openInNewWindow } — %s in the URL is replaced by the link target |
Default built-in sites: Wikipedia, JSPWiki, MeatBall, C2 (disabled), GVP, GVP-COUNTRY.
Managers
| Key | Default | Description |
|---|---|---|
ngdpbase.managers.page-manager.enabled | true | Enable PageManager |
ngdpbase.managers.plugin-manager.enabled | true | Enable PluginManager |
ngdpbase.managers.plugin-manager.search-paths | ["./dist/plugins"] | Array of directories scanned for plugin modules |
ngdpbase.managers.rendering-manager.enabled | true | Enable RenderingManager |
ngdpbase.managers.search-manager.enabled | true | Enable SearchManager |
ngdpbase.managers.template-manager.enabled | true | Enable TemplateManager |
ngdpbase.managers.cache-manager.enabled | true | Enable CacheManager |
ngdpbase.managers.addons-manager.enabled | true | Enable AddonsManager |
ngdpbase.managers.addons-manager.addons-path | "./addons" | Directory scanned for add-on packages |
ngdpbase.addons | {} | Add-on configuration object — individual add-ons keyed under ngdpbase.addons.<name> |
Features
| Key | Default | Description |
|---|---|---|
ngdpbase.features.export.html | true | Enable HTML page export |
ngdpbase.features.export.pdf | false | Enable PDF page export |
ngdpbase.features.export.odt | false | Enable ODT (LibreOffice) page export |
ngdpbase.features.llm.enabled | false | Enable LLM integration |
ngdpbase.features.llm.endpoint | "http://localhost:11434" | LLM API endpoint (Ollama-compatible) |
ngdpbase.features.llm.model | "llama2" | LLM model name to use |
ngdpbase.features.images.enabled | true | Enable image uploads |
ngdpbase.features.images.max-size | "5MB" | Maximum image file size |
ngdpbase.features.images.allowed-types | _(list)_ | Comma-separated MIME types for image uploads |
ngdpbase.features.images.upload-dir | "./public/images" | Directory for uploaded images |
ngdpbase.features.images.default-alt | "Uploaded image" | Default alt text for images without an explicit alt attribute |
ngdpbase.features.images.default-class | "wiki-image" | Default CSS class on rendered <img> tags |
ngdpbase.features.maintenance.enabled | false | Enable maintenance mode (in-memory only, resets on restart) |
ngdpbase.features.maintenance.message | _(default message)_ | Message shown to non-admin users during maintenance |
ngdpbase.features.maintenance.allow-admins | true | Allow admins to access the platform during maintenance mode |
ngdpbase.features.maintenance.estimated-duration | null | Optional ISO 8601 duration shown to users |
Logging
| Key | Default | Description |
|---|---|---|
ngdpbase.logging.level | "info" | Minimum log level: "debug", "info", "warn", "error" |
ngdpbase.logging.dir | ${FAST_STORAGE}/logs | Directory for application log files |
ngdpbase.logging.max-size | "1MB" | Maximum size of a log file before rotation |
ngdpbase.logging.max-files | 5 | Number of rotated log files to keep |
ngdpbase.logging.debug.enabled | false | Enable verbose debug logging |
ngdpbase.logging.debug.session | false | Log session lifecycle events |
ngdpbase.logging.debug.login | false | Log login/logout events at debug level |
Notifications
| Key | Default | Description |
|---|---|---|
ngdpbase.notifications.dir | ${FAST_STORAGE}/notifications | Directory for notification files |
ngdpbase.notifications.file | "notifications.json" | Notification store filename |
ngdpbase.notifications.auto-save-interval | 300000 | Auto-save interval in milliseconds (default: 5 min) |
Access Control
| Key | Default | Description |
|---|---|---|
ngdpbase.access-control.context-aware.enabled | true | Enable context-aware access control (time/schedule-based) |
ngdpbase.access-control.context-aware.time-zone | "UTC" | Timezone used for schedule evaluation |
ngdpbase.access-control.business-hours.enabled | false | Restrict access to business hours only |
ngdpbase.access-control.business-hours.start | "09:00" | Business hours start time (HH:MM) |
ngdpbase.access-control.business-hours.end | "17:00" | Business hours end time (HH:MM) |
ngdpbase.access-control.business-hours.days | "monday,...,friday" | Comma-separated allowed days |
ngdpbase.access-control.custom-schedules.enabled | false | Load access schedules from an external file |
ngdpbase.access-control.custom-schedules.schedules | "./config/schedules.json" | Path to custom schedules file |
ngdpbase.access-control.holidays.enabled | false | Block access on configured holidays |
ngdpbase.access-control.holidays.calendar | "./config/holidays.json" | Path to holidays calendar file |
Roles
Roles are defined under ngdpbase.roles.definitions.<role-name> with the following fields:
| Field | Description |
|---|---|
name | Role identifier (lowercase) |
displayname | Human-readable label |
description | Role description |
issystem | true for built-in roles — should not be deleted |
icon | FontAwesome icon name |
color | Hex color for the UI |
permissions | Array of permission strings granted to this role |
Built-in roles: admin, editor, contributor, reader, anonymous
Permission strings: page:read, page:edit, page:create, page:delete, page:rename, attachment:read, attachment:upload, attachment:delete, search:all, export:pages, admin:system, admin:users, admin:roles, admin:config
Access Policies
| Key | Default | Description |
|---|---|---|
ngdpbase.access.policies.enabled | true | Enable policy-based access control |
ngdpbase.access.policies.default-policy | "deny" | Default effect when no policy matches: "allow" or "deny" |
ngdpbase.access.policies | _(array)_ | Ordered list of policy objects |
Each policy object has:
| Field | Description |
|---|---|
id | Unique policy identifier |
name | Human-readable name |
description | Policy purpose |
priority | Higher number is evaluated first |
effect | "allow" or "deny" |
subjects | Array of { type, value } — type is "role" |
resources | Array of { type, pattern/value } — type is "page" or "category" |
actions | Array of permission strings (use "*" for all) |
System Categories
Defined under ngdpbase.system-category.<name>. Each entry controls storage routing and visibility.
| Field | Description |
|---|---|
label | Category identifier |
description | Human-readable description |
default | true if this is the default category for new pages |
storageLocation | Where pages in this category are stored: "regular" (user pages dir), "required" (required-pages dir), "github" (docs dir) |
enabled | Whether this category is active |
Built-in categories: general (default, regular storage), system (required storage), documentation (required storage), developer (github storage)
User Keywords
Defined under ngdpbase.user-keywords.<name>. Each entry is a keyword users can tag pages with.
| Field | Description |
|---|---|
label | Keyword identifier |
description | Human-readable description |
category | Grouping: "general", "access", "status", "subject" |
enabled | Whether this keyword is available |
restrictEditing | If true, only the creator and admins can edit pages with this keyword |
storageLocation | Optional storage override for pages with this keyword |
allowedRoles | Optional array of roles that can apply this keyword |
Built-in keywords: default, private, draft, review, published, and domain subjects (medicine, geology, meteorology, oceanography, psychology, sociology, anthropology, economics, political-science)
Defaults and Miscellaneous
| Key | Default | Description |
|---|---|---|
ngdpbase.default.system-category | "general" | Default system-category for new pages |
ngdpbase.maximum.user-keywords | 5 | Maximum number of user-keywords a page can have |
ngdpbase.default.template.dateformat | "dd-MMM-yyyy HH:mm" | Date format used in templates |
ngdpbase.default.timezone | "UTC" | Default timezone for display |
ngdpbase.diff-provider | "TraditionalDiffProvider" | Provider class used for page diffs |
ngdpbase.workflow.saveWikiPage | false | Require workflow approval for page saves |
ngdpbase.workflow.approver | "Admin" | Role or user required to approve workflow saves |
ngdpbase.userdatabase | "JSONUserDatabase" | User database backend class |
ngdpbase.groupdatabase | "JSONGroupDatabase" | Group database backend class |
ngdpbase.authorizer | "DefaultAuthorizer" | Authorization strategy class |
ngdpbase.login-module.class | "CookieAuthenticationLoginModule" | Login module class |
ngdpbase.breadcrumbs.maxpages | 10 | Maximum pages shown in the breadcrumb trail |
ngdpbase.referenceStyle | "relative" | Link reference style: "relative" or "absolute" |
RSS
| Key | Default | Description |
|---|---|---|
ngdpbase.rss.generate | true | Enable RSS feed generation |
ngdpbase.rss.file-name | "rss.xml" | Output filename for the RSS feed |
ngdpbase.rss.interval | 3600 | Feed refresh interval in seconds |
ngdpbase.rss.channel-title | "ngdpbase RSS Feed" | RSS channel title |
ngdpbase.rss.channel-description | _(default)_ | RSS channel description |
Theme
| Key | Default | Description |
|---|---|---|
ngdpbase.theme.active | "default" | Active theme folder name under themes/ |
ngdpbase.theme.defaults.mode | "light" | Default UI mode for new users: "light" or "dark" |
WikiStyle
| Key | Default | Description |
|---|---|---|
ngdpbase.style.custom-classes.enabled | true | Allow custom CSS classes in WikiStyle markup |
ngdpbase.style.bootstrap.integration | true | Apply Bootstrap CSS class names via WikiStyle |
ngdpbase.style.security.allow-inline-css | false | Allow style="..." attributes in page content |
ngdpbase.style.security.allowed-properties | _(list)_ | Comma-separated CSS properties allowed when inline CSS is enabled |
ngdpbase.style.predefined.text | _(list)_ | Predefined text color classes |
ngdpbase.style.predefined.background | _(list)_ | Predefined background color classes |
ngdpbase.style.predefined.layout | _(list)_ | Predefined layout utility classes |
Location
| Key | Default | Description |
|---|---|---|
ngdpbase.location.default-provider | "osm" | Default map provider for the LocationPlugin: "osm" (OpenStreetMap) |
Telemetry (OpenTelemetry)
| Key | Default | Description |
|---|---|---|
ngdpbase.telemetry.enabled | false | Enable OpenTelemetry metrics |
ngdpbase.telemetry.service-name | "" | Service name reported to the collector |
ngdpbase.telemetry.metrics.port | 9464 | Port for the Prometheus scrape endpoint |
ngdpbase.telemetry.metrics.host | "0.0.0.0" | Host for the metrics endpoint |
ngdpbase.telemetry.metrics.path | "/metrics" | URL path for the metrics endpoint |
ngdpbase.telemetry.metrics.interval | 15000 | Metrics collection interval in milliseconds |
ngdpbase.telemetry.otlp.enabled | false | Enable OTLP HTTP push export |
ngdpbase.telemetry.otlp.endpoint | "" | OTLP collector endpoint URL |
ngdpbase.telemetry.otlp.headers | {} | HTTP headers sent with OTLP requests (e.g. auth tokens) |
ngdpbase.telemetry.otlp.interval | 30000 | Push interval in milliseconds |
ngdpbase.telemetry.otlp.timeout | 30000 | Request timeout in milliseconds |
Backup
| Key | Default | Description |
|---|---|---|
ngdpbase.backup.directory | ${SLOW_STORAGE}/backups | Directory where backup archives are stored |
ngdpbase.backup.max-backups | 10 | Maximum number of backup archives to retain |
ngdpbase.backup.compress | true | Compress backup archives |
ngdpbase.backup.auto-backup | false | Enable automatic scheduled backups |
ngdpbase.backup.auto-backup-interval | 86400000 | Auto-backup interval in milliseconds (default: 24 h) |
ngdpbase.backup.auto-backup-time | "02:00" | Preferred time of day for auto-backup (HH:MM, local time) |
ngdpbase.backup.auto-backup-days | "daily" | Backup frequency: "daily", "weekly", or "monthly" |
Media Manager
| Key | Default | Description |
|---|---|---|
ngdpbase.media.enabled | false | Enable MediaManager (external photo/video library scanning) |
ngdpbase.media.folders | [] | Array of absolute paths to external media directories to scan |
ngdpbase.media.maxdepth | 5 | Maximum directory recursion depth when scanning |
ngdpbase.media.scaninterval | 3600000 | Re-scan interval in milliseconds (default: 1 h) |
ngdpbase.media.readonly | true | Prevent write operations to media source directories |
ngdpbase.media.thumbnail.sizes | "300x300,150x150" | Comma-separated WxH thumbnail sizes to generate |
ngdpbase.media.metadata.priority | ["EXIF","IPTC","XMP"] | Ordered list of metadata sources to prefer |
ngdpbase.media.ignoredirs | [".dtrash",".ts"] | Directory names to skip during scanning |
ngdpbase.media.extensions | _(list)_ | File extensions recognized as media (images and video) |
Storage Location Permissions
| Key | Default | Description |
|---|---|---|
ngdpbase.storageLocation.enabled | true | Enable storage-location-based access rules |
ngdpbase.storageLocation.aclBasedStorage | true | Enforce ACL checks on storage locations |
ngdpbase.storageLocation.roleBasedStorage.admin | "required" | Storage location accessible to the admin role |
ngdpbase.storageLocation.roleBasedStorage.editor | "regular" | Storage location accessible to the editor role |
ngdpbase.storageLocation.roleBasedStorage.user | "regular" | Storage location accessible to the user role |
ngdpbase.storageLocation.categoryBasedStorage.System | "required" | Storage location for pages in the System category |
ngdpbase.storageLocation.categoryBasedStorage.Admin | "required" | Storage location for pages in the Admin category |
ngdpbase.storageLocation.categoryBasedStorage.Security | "required" | Storage location for pages in the Security category |
ngdpbase.storageLocation.categoryBasedStorage.General | "regular" | Storage location for pages in the General category |
ngdpbase.storageLocation.categoryBasedStorage.Documentation | "regular" | Storage location for pages in the Documentation category |
Holidays
| Key | Default | Description |
|---|---|---|
ngdpbase.holidays.enabled | true | Enable holiday-based access restrictions |
ngdpbase.holidays.dates | _(object)_ | Map of YYYY-MM-DD dates to { name, message, enabled } — one-time specific dates |
ngdpbase.holidays.recurring | _(object)_ | Map of *-MM-DD patterns to { name, message, enabled } — repeats every year |
Schedules
| Key | Default | Description |
|---|---|---|
ngdpbase.schedules.enabled | true | Enable named access schedules |
ngdpbase.schedules | _(object)_ | Map of schedule names to schedule definitions |
Each schedule definition has:
| Field | Description |
|---|---|
name | Human-readable schedule name |
description | Purpose description |
timeZone | IANA timezone string for rule evaluation |
rules | Array of { days, startTime, endTime, type } — type is "allow" or "deny" |
exceptions | Array of date-specific overrides |
enabled | Whether this schedule is active |
Special schedule keys: role_admin applies to the admin role; category_System applies to system category pages; default is the fallback for users without a specific assignment.
All Properties (Live Index)
The curated sections above explain the important settings and their trade-offs. This appendix is the complete, never-stale list of every property in config/app-default-config.json — rendered live from the running configuration by [{ConfigAccessor}], so new keys appear automatically the moment they are added (no hand-maintenance, no drift). Currently 432 properties across 55 groups. Use your browser's find (Ctrl/Cmd-F) within a group, or jump via the headings.
Maintenance note: do not hand-list keys here. Each group below is a
[{ConfigAccessor key='<prefix>.*'}]wildcard — it stays correct on its own. See Using ConfigAccessorPlugin anddocs/proper-documentation-pages.md.
jspwiki.*
jspwiki.*
| Key | Value |
|---|---|
jspwiki.parser.useExtractionPipeline |
true |
log4j.*
log4j.*
| Key | Value |
|---|---|
log4j.appender.console |
org.apache.log4j.ConsoleAppender |
log4j.appender.console.layout |
org.apache.log4j.PatternLayout |
log4j.appender.console.layout.ConversionPattern |
%d [%t] %p %c %x - %m%n |
log4j.rootCategory |
INFO,console |
ngdpbase.access.*
ngdpbase.access.*
| Key | Value |
|---|---|
ngdpbase.access.policies |
[
{
"id": "admin-full-access",
"name": "Administrator Full Access",
"description": "Full system access for administrators - all page and admin permissions",
"priority": 100,
"effect": "allow",
"subjects": [
{
"type": "role",
"value": "admin"
}
],
"resources": [
{
"type": "page",
"pattern": "*"
}
],
"actions": [
"page-read",
"page-edit",
"page-create",
"page-delete",
"page-rename",
"page-export",
"asset-read",
"asset-upload",
"asset-delete",
"search-page",
"search-user",
"user-read",
"user-edit",
"user-create",
"user-delete",
"admin-roles",
"admin-system"
]
},
{
"id": "user-admin-permissions",
"name": "User Administrator Permissions",
"description": "Can manage users — create, edit, deactivate, delete",
"priority": 95,
"effect": "allow",
"subjects": [
{
"type": "role",
"value": "user-admin"
}
],
"resources": [
{
"type": "page",
"pattern": "*"
}
],
"actions": [
"user-read",
"user-edit",
"user-create",
"user-delete",
"search-user"
]
},
{
"id": "editor-permissions",
"name": "Editor Permissions",
"description": "Can create, edit, delete, and rename pages plus manage assets",
"priority": 80,
"effect": "allow",
"subjects": [
{
"type": "role",
"value": "editor"
}
],
"resources": [
{
"type": "page",
"pattern": "*"
}
],
"actions": [
"page-read",
"page-edit",
"page-create",
"page-delete",
"page-rename",
"page-export",
"asset-read",
"asset-upload",
"asset-delete",
"search-page"
]
},
{
"id": "contributor-permissions",
"name": "Contributor Permissions",
"description": "Can create and edit pages, upload assets (no delete/rename)",
"priority": 70,
"effect": "allow",
"subjects": [
{
"type": "role",
"value": "contributor"
}
],
"resources": [
{
"type": "page",
"pattern": "*"
}
],
"actions": [
"page-read",
"page-edit",
"page-create",
"page-export",
"asset-read",
"asset-upload",
"search-page"
]
},
{
"id": "reader-permissions",
"name": "Reader Permissions",
"description": "Read-only access - can view pages and assets, search, and export",
"priority": 60,
"effect": "allow",
"subjects": [
{
"type": "role",
"value": "reader"
}
],
"resources": [
{
"type": "page",
"pattern": "*"
}
],
"actions": [
"page-read",
"page-export",
"asset-read",
"search-page"
]
},
{
"id": "member-permissions",
"name": "Member Permissions",
"description": "Community member read-only access",
"priority": 55,
"effect": "allow",
"subjects": [
{
"type": "role",
"value": "member"
}
],
"resources": [
{
"type": "page",
"pattern": "*"
}
],
"actions": [
"page-read",
"asset-read",
"search-page"
]
},
{
"id": "anonymous-read-only",
"name": "Anonymous Read Access",
"description": "Anonymous users can only read pages",
"priority": 50,
"effect": "allow",
"subjects": [
{
"type": "role",
"value": "anonymous"
}
],
"resources": [
{
"type": "page",
"pattern": "*"
}
],
"actions": [
"page-read"
]
},
{
"id": "deny-anonymous-system-pages",
"name": "Deny Anonymous System Pages",
"description": "Block anonymous access to system and admin category pages",
"priority": 90,
"effect": "deny",
"subjects": [
{
"type": "role",
"value": "anonymous"
}
],
"resources": [
{
"type": "category",
"value": "system"
},
{
"type": "category",
"value": "admin"
}
],
"actions": [
"*"
]
},
{
"id": "default-view-for-all",
"name": "Default View Access for All",
"description": "Fallback - all authenticated users can at minimum view pages",
"priority": 1,
"effect": "allow",
"subjects": [
{
"type": "role",
"value": "All"
}
],
"resources": [
{
"type": "page",
"pattern": "*"
}
],
"actions": [
"page-read"
]
}
] |
ngdpbase.access.policies.default-policy |
deny |
ngdpbase.access.policies.enabled |
true |
ngdpbase.access-control.*
ngdpbase.access-control.*
| Key | Value |
|---|---|
ngdpbase.access-control.business-hours.days |
monday,tuesday,wednesday,thursday,friday |
ngdpbase.access-control.business-hours.enabled |
false |
ngdpbase.access-control.business-hours.end |
17:00 |
ngdpbase.access-control.business-hours.start |
09:00 |
ngdpbase.access-control.context-aware.enabled |
true |
ngdpbase.access-control.context-aware.time-zone |
UTC |
ngdpbase.access-control.custom-schedules.enabled |
false |
ngdpbase.access-control.custom-schedules.schedules |
./config/schedules.json |
ngdpbase.access-control.holidays.calendar |
./config/holidays.json |
ngdpbase.access-control.holidays.enabled |
false |
ngdpbase.addons.*
ngdpbase.addons.*
| Key | Value |
|---|---|
ngdpbase.addons.forms.dataPath |
${FAST_STORAGE}/forms |
ngdpbase.addons.forms.enabled |
false |
ngdpbase.addons.forms.notifyRole |
admin |
ngdpbase.addons.geohazardwatch.dataPath |
|
ngdpbase.addons.geohazardwatch.enabled |
true |
ngdpbase.addons.geohazardwatch.eqIntervalMs |
1200000 |
ngdpbase.addons.geohazardwatch.hansIntervalMs |
600000 |
ngdpbase.application.*
ngdpbase.application.*
| Key | Value |
|---|---|
ngdpbase.application.base-url |
https://geohazardwatch.com |
ngdpbase.application.category |
Digital Platform |
ngdpbase.application.contact.enabled |
true |
ngdpbase.application.contact.footer.enabled |
true |
ngdpbase.application.contact.page |
|
ngdpbase.application.contact.persist.enabled |
true |
ngdpbase.application.contact.persist.path |
|
ngdpbase.application.contact.recipient |
[email protected] |
ngdpbase.application.organization.file |
geohazardwatch.json |
ngdpbase.application.organization.provider |
fileorganizationprovider |
ngdpbase.application.organization.provider.default |
fileorganizationprovider |
ngdpbase.application.organization.storagedir |
${FAST_STORAGE}/organizations |
ngdpbase.application.persons.provider |
filepersonprovider |
ngdpbase.application.persons.provider.default |
filepersonprovider |
ngdpbase.application.persons.storagedir |
${FAST_STORAGE}/persons |
ngdpbase.application.registration |
false |
ngdpbase.application.registration.redirect-page |
request-access |
ngdpbase.application.roles.provider |
fileroleprovider |
ngdpbase.application.roles.provider.default |
fileroleprovider |
ngdpbase.application.roles.storagedir |
${FAST_STORAGE}/roles |
ngdpbase.approver.*
ngdpbase.approver.*
| Key | Value |
|---|---|
ngdpbase.approver.workflow.save-wiki-page |
Admin |
ngdpbase.attachment.*
ngdpbase.attachment.*
| Key | Value |
|---|---|
ngdpbase.attachment.allowedtypes |
image/*,text/*,application/pdf |
ngdpbase.attachment.enabled |
true |
ngdpbase.attachment.enhanced.cachemetadata |
true |
ngdpbase.attachment.enhanced.enabled |
true |
ngdpbase.attachment.enhanced.generatethumbnails |
true |
ngdpbase.attachment.enhanced.iconpath |
/icons/filetypes |
ngdpbase.attachment.enhanced.metadata |
true |
ngdpbase.attachment.enhanced.showfilesize |
true |
ngdpbase.attachment.enhanced.showmetadata |
true |
ngdpbase.attachment.enhanced.showmodified |
true |
ngdpbase.attachment.enhanced.thumbnails |
true |
ngdpbase.attachment.enhanced.thumbnailsizes |
150x150,300x300 |
ngdpbase.attachment.forcedownload |
false |
ngdpbase.attachment.maxsize |
10485760 |
ngdpbase.attachment.metadatafile |
${SLOW_STORAGE}/attachments/attachment-metadata.json |
ngdpbase.attachment.provider |
basicattachmentprovider |
ngdpbase.attachment.provider.basic.hashcontent |
true |
ngdpbase.attachment.provider.basic.hashmethod |
sha256 |
ngdpbase.attachment.provider.basic.storagedir |
${SLOW_STORAGE}/attachments |
ngdpbase.attachment.provider.default |
basicattachmentprovider |
ngdpbase.audit.*
ngdpbase.audit.*
| Key | Value |
|---|---|
ngdpbase.audit.enabled |
true |
ngdpbase.audit.flushinterval |
30000 |
ngdpbase.audit.loglevel |
info |
ngdpbase.audit.maxqueuesize |
1000 |
ngdpbase.audit.provider |
fileauditprovider |
ngdpbase.audit.provider.cloud.loggroup |
/ngdpbase/audit |
ngdpbase.audit.provider.cloud.logstream |
audit-events |
ngdpbase.audit.provider.cloud.region |
us-east-1 |
ngdpbase.audit.provider.cloud.service |
cloudwatch |
ngdpbase.audit.provider.database.connectionstring |
|
ngdpbase.audit.provider.database.maxconnections |
10 |
ngdpbase.audit.provider.database.tablename |
audit_logs |
ngdpbase.audit.provider.database.type |
postgresql |
ngdpbase.audit.provider.default |
fileauditprovider |
ngdpbase.audit.provider.file.archivefilename |
audit-archive.log |
ngdpbase.audit.provider.file.auditfilename |
audit.log |
ngdpbase.audit.provider.file.logdirectory |
${FAST_STORAGE}/logs |
ngdpbase.audit.provider.file.maxfiles |
10 |
ngdpbase.audit.provider.file.maxfilesize |
10MB |
ngdpbase.audit.retentiondays |
90 |
ngdpbase.auth.*
ngdpbase.auth.*
| Key | Value |
|---|---|
ngdpbase.auth.cloudflare-access.application-aud |
|
ngdpbase.auth.cloudflare-access.default-role |
occupant |
ngdpbase.auth.cloudflare-access.enabled |
false |
ngdpbase.auth.cloudflare-access.group-map |
{} |
ngdpbase.auth.cloudflare-access.team-domain |
|
ngdpbase.auth.google-oidc.auto-provision |
true |
ngdpbase.auth.google-oidc.callback-url |
|
ngdpbase.auth.google-oidc.client-id |
|
ngdpbase.auth.google-oidc.client-secret |
|
ngdpbase.auth.google-oidc.default-roles |
[
"occupant"
] |
ngdpbase.auth.google-oidc.deny-redirect |
/login?error=Access+denied |
ngdpbase.auth.google-oidc.enabled |
false |
ngdpbase.auth.google-oidc.hd |
|
ngdpbase.auth.magic-link.enabled |
false |
ngdpbase.auth.magic-link.ttl-minutes |
15 |
ngdpbase.auth.password.enabled |
true |
ngdpbase.auth.required-factors |
[
"password"
] |
ngdpbase.auth.user.default-external |
false |
ngdpbase.backup.*
ngdpbase.backup.*
| Key | Value |
|---|---|
ngdpbase.backup.auto-backup |
false |
ngdpbase.backup.auto-backup-days |
daily |
ngdpbase.backup.auto-backup-interval |
86400000 |
ngdpbase.backup.auto-backup-time |
02:00 |
ngdpbase.backup.compress |
true |
ngdpbase.backup.directory |
${SLOW_STORAGE}/backups |
ngdpbase.backup.max-backups |
10 |
ngdpbase.backup.provider |
filebackupprovider |
ngdpbase.breadcrumbs.*
ngdpbase.breadcrumbs.*
| Key | Value |
|---|---|
ngdpbase.breadcrumbs.maxpages |
10 |
ngdpbase.cache.*
ngdpbase.cache.*
| Key | Value |
|---|---|
ngdpbase.cache.checkperiod |
120 |
ngdpbase.cache.defaultttl |
300 |
ngdpbase.cache.enabled |
true |
ngdpbase.cache.maxkeys |
1000 |
ngdpbase.cache.provider |
nodecacheprovider |
ngdpbase.cache.provider.default |
nodecacheprovider |
ngdpbase.cache.provider.nodecache.checkperiod |
120 |
ngdpbase.cache.provider.nodecache.maxkeys |
1000 |
ngdpbase.cache.provider.nodecache.stdttl |
300 |
ngdpbase.cache.provider.nodecache.useclones |
true |
ngdpbase.cache.provider.redis.connecttimeout |
5000 |
ngdpbase.cache.provider.redis.enablecluster |
false |
ngdpbase.cache.provider.redis.keyprefix |
ngdpbase: |
ngdpbase.cache.provider.redis.url |
redis://localhost:6379 |
ngdpbase.catalog.*
ngdpbase.catalog.*
| Key | Value |
|---|---|
ngdpbase.catalog.ai.enabled |
false |
ngdpbase.catalog.ai.provider |
null |
ngdpbase.catalog.ai.threshold |
0.7 |
ngdpbase.comments.*
ngdpbase.comments.*
| Key | Value |
|---|---|
ngdpbase.comments.allow |
true |
ngdpbase.comments.storagedir |
${SLOW_STORAGE}/comments |
ngdpbase.default.*
ngdpbase.default.*
| Key | Value |
|---|---|
ngdpbase.default.system-category |
general |
ngdpbase.default.template.dateformat |
dd-MMM-yyyy HH:mm |
ngdpbase.default.timezone |
UTC |
ngdpbase.directories.*
ngdpbase.directories.*
| Key | Value |
|---|---|
ngdpbase.directories.data |
${FAST_STORAGE} |
ngdpbase.directories.pages |
${SLOW_STORAGE}/pages |
ngdpbase.directories.required-pages |
./required-pages |
ngdpbase.directories.resources |
./resources |
ngdpbase.directories.schemas |
${FAST_STORAGE}/schemas |
ngdpbase.directories.templates |
./templates |
ngdpbase.directories.users |
${FAST_STORAGE}/users |
ngdpbase.directories.work |
./ |
ngdpbase.features.*
ngdpbase.features.*
| Key | Value |
|---|---|
ngdpbase.features.export.html |
true |
ngdpbase.features.export.odt |
false |
ngdpbase.features.export.pdf |
false |
ngdpbase.features.images.allowed-types |
image/jpeg,image/png,image/gif,image/webp |
ngdpbase.features.images.default-alt |
Uploaded image |
ngdpbase.features.images.default-class |
wiki-image |
ngdpbase.features.images.enabled |
true |
ngdpbase.features.images.max-size |
5MB |
ngdpbase.features.images.upload-dir |
./public/images |
ngdpbase.features.llm.enabled |
false |
ngdpbase.features.llm.endpoint |
http://localhost:11434 |
ngdpbase.features.llm.model |
llama2 |
ngdpbase.features.maintenance.allow-admins |
true |
ngdpbase.features.maintenance.enabled |
false |
ngdpbase.features.maintenance.estimated-duration |
null |
ngdpbase.features.maintenance.message |
System is currently under maintenance. Please try again later. |
ngdpbase.footnotes.*
ngdpbase.footnotes.*
| Key | Value |
|---|---|
ngdpbase.footnotes.enabled |
true |
ngdpbase.footnotes.storagedir |
${SLOW_STORAGE}/footnotes |
ngdpbase.github.*
ngdpbase.github.*
| Key | Value |
|---|---|
ngdpbase.github.repo |
jwilleke/ngdpbase |
ngdpbase.holidays.*
ngdpbase.holidays.*
| Key | Value |
|---|---|
ngdpbase.holidays.dates |
{
"2025-01-01": {
"name": "New Year's Day",
"message": "Access restricted on New Year's Day",
"enabled": true
},
"2025-07-04": {
"name": "Independence Day",
"message": "Access restricted on Independence Day",
"enabled": true
},
"2025-12-25": {
"name": "Christmas Day",
"message": "Access restricted on Christmas Day",
"enabled": true
},
"2025-12-26": {
"name": "Boxing Day",
"message": "Access restricted on Boxing Day",
"enabled": true
}
} |
ngdpbase.holidays.enabled |
true |
ngdpbase.holidays.recurring |
{
"*-01-01": {
"name": "New Year's Day",
"message": "Access restricted on New Year's Day",
"enabled": true
},
"*-12-25": {
"name": "Christmas Day",
"message": "Access restricted on Christmas Day",
"enabled": true
}
} |
ngdpbase.interwiki.*
ngdpbase.interwiki.*
| Key | Value |
|---|---|
ngdpbase.interwiki.enabled |
true |
ngdpbase.interwiki.options |
{
"openInNewWindow": true,
"addIconIndicator": true,
"caseSensitive": false,
"showTooltips": true,
"cacheTTL": 3600,
"maxCacheEntries": 1000
} |
ngdpbase.interwiki.sites |
{
"Wikipedia": {
"url": "https://en.wikipedia.org/wiki/%s",
"description": "Wikipedia, the free encyclopedia",
"icon": "wikipedia.png",
"enabled": true,
"openInNewWindow": true
},
"JSPWiki": {
"url": "https://jspwiki-wiki.apache.org/Wiki.jsp?page=%s",
"description": "Apache JSPWiki Documentation",
"icon": "jspwiki.png",
"enabled": true,
"openInNewWindow": true
},
"MeatBall": {
"url": "http://www.usemod.com/cgi-bin/mb.pl?%s",
"description": "MeatBall Wiki",
"icon": "meatball.png",
"enabled": true,
"openInNewWindow": true
},
"C2": {
"url": "http://wiki.c2.com/?%s",
"description": "C2 Wiki (Portland Pattern Repository)",
"icon": "c2.png",
"enabled": false,
"openInNewWindow": true
},
"GVP": {
"url": "https://volcano.si.edu/volcano.cfm?vn=%s",
"description": "GVP (Global Volcanism Program)",
"icon": "gvp-icon.jpg",
"enabled": true,
"openInNewWindow": true
},
"GVP-COUNTRY": {
"url": "https://volcano.si.edu/volcanolist_countries.cfm?country=%s",
"description": "GVP (Global Volcanism Program) — Volcanoes by Country",
"icon": "gvp-icon.jpg",
"enabled": true,
"openInNewWindow": true
}
} |
ngdpbase.location.*
ngdpbase.location.*
| Key | Value |
|---|---|
ngdpbase.location.default-provider |
osm |
ngdpbase.logging.*
ngdpbase.logging.*
| Key | Value |
|---|---|
ngdpbase.logging.debug.enabled |
false |
ngdpbase.logging.debug.login |
false |
ngdpbase.logging.debug.session |
false |
ngdpbase.logging.dir |
${FAST_STORAGE}/logs |
ngdpbase.logging.level |
info |
ngdpbase.logging.max-files |
5 |
ngdpbase.logging.max-size |
1MB |
ngdpbase.logging.provider |
fileloggingprovider |
ngdpbase.login-module.*
ngdpbase.login-module.*
| Key | Value |
|---|---|
ngdpbase.login-module.class |
CookieAuthenticationLoginModule |
ngdpbase.lucene-search-provider.*
ngdpbase.lucene-search-provider.*
| Key | Value |
|---|---|
ngdpbase.lucene-search-provider.lucene-directory |
./lucene |
ngdpbase.mail.*
ngdpbase.mail.*
| Key | Value |
|---|---|
ngdpbase.mail.enabled |
true |
ngdpbase.mail.from |
GeoHazardWatch Contact <[email protected]> |
ngdpbase.mail.honeypot.enabled |
true |
ngdpbase.mail.provider |
smtp |
ngdpbase.mail.provider.smtp.from |
|
ngdpbase.mail.provider.smtp.host |
smtp.gmail.com |
ngdpbase.mail.provider.smtp.pass |
nqyiswddgaicffnq |
ngdpbase.mail.provider.smtp.port |
587 |
ngdpbase.mail.provider.smtp.secure |
false |
ngdpbase.mail.provider.smtp.user |
[email protected] |
ngdpbase.mail.rate-limit.enabled |
true |
ngdpbase.mail.rate-limit.max-submissions |
5 |
ngdpbase.mail.rate-limit.window-minutes |
15 |
ngdpbase.managers.*
ngdpbase.managers.*
| Key | Value |
|---|---|
ngdpbase.managers.addons-manager.addons-path |
[
"/app/addons",
"/opt/geohazardwatch/addons"
] |
ngdpbase.managers.addons-manager.enabled |
true |
ngdpbase.managers.cache-manager.enabled |
true |
ngdpbase.managers.page-manager.enabled |
true |
ngdpbase.managers.plugin-manager.enabled |
true |
ngdpbase.managers.plugin-manager.search-paths |
[
"./dist/src/plugins"
] |
ngdpbase.managers.rendering-manager.enabled |
true |
ngdpbase.managers.search-manager.enabled |
true |
ngdpbase.managers.template-manager.enabled |
true |
ngdpbase.markdown.*
ngdpbase.markdown.*
| Key | Value |
|---|---|
ngdpbase.markdown.footnotes.enabled |
true |
ngdpbase.markdown.ncm.image.ad-deny-list |
[
"doubleclick.net",
"googlesyndication.com",
"google-analytics.com",
"facebook.com/tr",
"scorecardresearch.com"
] |
ngdpbase.markup.*
ngdpbase.markup.*
| Key | Value |
|---|---|
ngdpbase.markup.cache-ttl |
300 |
ngdpbase.markup.cache.enable-warmup |
true |
ngdpbase.markup.cache.handler-results.enabled |
true |
ngdpbase.markup.cache.handler-results.max-size |
2000 |
ngdpbase.markup.cache.handler-results.ttl |
600 |
ngdpbase.markup.cache.metrics-enabled |
true |
ngdpbase.markup.cache.parse-results.enabled |
true |
ngdpbase.markup.cache.parse-results.max-size |
1000 |
ngdpbase.markup.cache.parse-results.ttl |
300 |
ngdpbase.markup.cache.patterns.enabled |
true |
ngdpbase.markup.cache.patterns.max-size |
100 |
ngdpbase.markup.cache.patterns.ttl |
3600 |
ngdpbase.markup.cache.variables.enabled |
true |
ngdpbase.markup.cache.variables.max-size |
500 |
ngdpbase.markup.cache.variables.ttl |
900 |
ngdpbase.markup.caching |
true |
ngdpbase.markup.enabled |
true |
ngdpbase.markup.fallback-to-legacy |
true |
ngdpbase.markup.fenced-code-tags |
[
"text",
"plain",
"none",
"javascript",
"js",
"typescript",
"ts",
"jsx",
"tsx",
"html",
"xml",
"svg",
"css",
"scss",
"sass",
"less",
"json",
"yaml",
"yml",
"toml",
"bash",
"sh",
"shell",
"zsh",
"python",
"py",
"java",
"kotlin",
"c",
"cpp",
"csharp",
"cs",
"go",
"rust",
"ruby",
"php",
"sql",
"markdown",
"md",
"diff",
"patch",
"mermaid"
] |
ngdpbase.markup.filters.custom.auto-load |
true |
ngdpbase.markup.filters.custom.cache-results |
true |
ngdpbase.markup.filters.custom.enabled |
false |
ngdpbase.markup.filters.custom.search-paths |
./filters,./src/filters |
ngdpbase.markup.filters.enabled |
true |
ngdpbase.markup.filters.pipeline.enable-profiling |
true |
ngdpbase.markup.filters.pipeline.fail-on-error |
false |
ngdpbase.markup.filters.pipeline.max-filters |
50 |
ngdpbase.markup.filters.pipeline.timeout |
10000 |
ngdpbase.markup.filters.security.allowed-attributes |
class,id,href,src,alt,title |
ngdpbase.markup.filters.security.allowed-tags |
p,div,span,strong,em,ul,ol,li,h1,h2,h3,h4,h5,h6,a,img |
ngdpbase.markup.filters.security.enabled |
false |
ngdpbase.markup.filters.security.prevent-csrf |
true |
ngdpbase.markup.filters.security.prevent-xss |
true |
ngdpbase.markup.filters.security.priority |
110 |
ngdpbase.markup.filters.security.sanitize-html |
true |
ngdpbase.markup.filters.security.strip-dangerous-content |
true |
ngdpbase.markup.filters.spam.blacklist-words |
spam,casino,pharmacy,viagra |
ngdpbase.markup.filters.spam.cache-blacklist |
true |
ngdpbase.markup.filters.spam.enabled |
false |
ngdpbase.markup.filters.spam.max-images |
5 |
ngdpbase.markup.filters.spam.max-links |
10 |
ngdpbase.markup.filters.spam.priority |
100 |
ngdpbase.markup.filters.spam.whitelist-domains |
wikipedia.org,github.com,stackoverflow.com |
ngdpbase.markup.filters.validation.enabled |
true |
ngdpbase.markup.filters.validation.max-content-length |
1048576 |
ngdpbase.markup.filters.validation.priority |
90 |
ngdpbase.markup.filters.validation.report-errors |
true |
ngdpbase.markup.filters.validation.validate-images |
true |
ngdpbase.markup.filters.validation.validate-links |
true |
ngdpbase.markup.filters.validation.validate-markup |
true |
ngdpbase.markup.handler-registry.allow-duplicate-priorities |
true |
ngdpbase.markup.handler-registry.default-timeout |
5000 |
ngdpbase.markup.handler-registry.enable-conflict-detection |
true |
ngdpbase.markup.handler-registry.enable-dependency-resolution |
true |
ngdpbase.markup.handler-registry.max-handlers |
100 |
ngdpbase.markup.handlers.attachment.enabled |
true |
ngdpbase.markup.handlers.attachment.enhanced |
true |
ngdpbase.markup.handlers.attachment.metadata |
true |
ngdpbase.markup.handlers.attachment.priority |
75 |
ngdpbase.markup.handlers.attachment.thumbnails |
true |
ngdpbase.markup.handlers.form.enabled |
true |
ngdpbase.markup.handlers.form.priority |
85 |
ngdpbase.markup.handlers.interwiki.enabled |
true |
ngdpbase.markup.handlers.interwiki.priority |
80 |
ngdpbase.markup.handlers.plugin.enabled |
true |
ngdpbase.markup.handlers.plugin.priority |
90 |
ngdpbase.markup.handlers.rss.enabled |
true |
ngdpbase.markup.handlers.rss.priority |
60 |
ngdpbase.markup.handlers.search.enabled |
true |
ngdpbase.markup.handlers.search.priority |
65 |
ngdpbase.markup.handlers.style.enabled |
true |
ngdpbase.markup.handlers.style.priority |
70 |
ngdpbase.markup.handlers.wikitag.enabled |
true |
ngdpbase.markup.handlers.wikitag.priority |
95 |
ngdpbase.markup.integration.rendering-manager |
true |
ngdpbase.markup.log-parsing-method |
true |
ngdpbase.markup.use-advanced-parser |
true |
ngdpbase.maximum.*
ngdpbase.maximum.*
| Key | Value |
|---|---|
ngdpbase.maximum.user-keywords |
5 |
ngdpbase.media.*
ngdpbase.media.*
| Key | Value |
|---|---|
ngdpbase.media.enabled |
false |
ngdpbase.media.extensions |
[
"jpg",
"jpeg",
"png",
"gif",
"heic",
"heif",
"tiff",
"tif",
"webp",
"raw",
"orf",
"cr2",
"nef",
"arw",
"dng",
"bmp",
"mp4",
"mov",
"avi",
"mkv",
"m4v",
"wmv",
"3gp"
] |
ngdpbase.media.folders |
[] |
ngdpbase.media.ignoredirs |
[
".dtrash",
".ts"
] |
ngdpbase.media.maxdepth |
5 |
ngdpbase.media.metadata.priority |
[
"EXIF",
"IPTC",
"XMP"
] |
ngdpbase.media.readonly |
true |
ngdpbase.media.scaninterval |
3600000 |
ngdpbase.media.thumbnail.sizes |
300x300,150x150 |
ngdpbase.notifications.*
ngdpbase.notifications.*
| Key | Value |
|---|---|
ngdpbase.notifications.auto-save-interval |
300000 |
ngdpbase.notifications.dir |
${FAST_STORAGE}/notifications |
ngdpbase.notifications.escalation.enabled |
false |
ngdpbase.notifications.escalation.levels |
[
"error"
] |
ngdpbase.notifications.escalation.recipient-role |
admin |
ngdpbase.notifications.file |
notifications.json |
ngdpbase.page.*
ngdpbase.page.*
| Key | Value |
|---|---|
ngdpbase.page.enabled |
true |
ngdpbase.page.nofooter |
[
"LeftMenu",
"Footer",
"Template:PageTabs"
] |
ngdpbase.page.notabs |
[
"LeftMenu",
"Footer",
"Template:PageTabs"
] |
ngdpbase.page.provider |
versioningfileprovider |
ngdpbase.page.provider.default |
filesystemprovider |
ngdpbase.page.provider.filesystem.autosave |
true |
ngdpbase.page.provider.filesystem.encoding |
utf-8 |
ngdpbase.page.provider.filesystem.requiredpagesdir |
./required-pages |
ngdpbase.page.provider.filesystem.storagedir |
${SLOW_STORAGE}/pages |
ngdpbase.page.provider.versioning.indexfile |
${FAST_STORAGE}/page-index.json |
ngdpbase.permissions.*
ngdpbase.permissions.*
| Key | Value |
|---|---|
ngdpbase.permissions.definitions |
{
"page-read": {
"description": "View pages",
"icon": "eye",
"color": "#6c757d"
},
"page-edit": {
"description": "Edit pages",
"icon": "edit",
"color": "#007bff"
},
"page-create": {
"description": "Create new pages",
"icon": "plus",
"color": "#28a745"
},
"page-delete": {
"description": "Delete pages",
"icon": "trash",
"color": "#dc3545"
},
"page-rename": {
"description": "Rename pages",
"icon": "i-cursor",
"color": "#fd7e14"
},
"page-export": {
"description": "Export pages",
"icon": "file-export",
"color": "#6c757d"
},
"asset-read": {
"description": "View assets (attachments)",
"icon": "paperclip",
"color": "#6c757d"
},
"asset-upload": {
"description": "Upload assets",
"icon": "upload",
"color": "#28a745"
},
"asset-delete": {
"description": "Delete assets",
"icon": "trash",
"color": "#dc3545"
},
"search-page": {
"description": "Search pages",
"icon": "search",
"color": "#6c757d"
},
"search-user": {
"description": "Search users",
"icon": "search",
"color": "#6c757d"
},
"user-read": {
"description": "View user list and profiles",
"icon": "users",
"color": "#6c757d"
},
"user-edit": {
"description": "Edit user accounts",
"icon": "user-edit",
"color": "#007bff"
},
"user-create": {
"description": "Create user accounts",
"icon": "user-plus",
"color": "#28a745"
},
"user-delete": {
"description": "Delete user accounts",
"icon": "user-minus",
"color": "#dc3545"
},
"admin-system": {
"description": "System administration",
"icon": "cog",
"color": "#dc3545"
},
"admin-roles": {
"description": "Role management",
"icon": "shield-alt",
"color": "#dc3545"
}
} |
ngdpbase.plugin.*
ngdpbase.plugin.*
| Key | Value |
|---|---|
ngdpbase.plugin.searchresult.maxItems |
50 |
ngdpbase.plugin.searchresult.showScore |
true |
ngdpbase.plugin.versioning.use |
true |
ngdpbase.plugins.*
ngdpbase.plugins.*
| Key | Value |
|---|---|
ngdpbase.plugins.enabled |
true |
ngdpbase.plugins.searchPath |
./plugins |
ngdpbase.roles.*
ngdpbase.roles.*
| Key | Value |
|---|---|
ngdpbase.roles.definitions |
{
"admin": {
"name": "admin",
"displayname": "Administrator",
"description": "Full system access to all features",
"issystem": true,
"icon": "shield-alt",
"color": "#dc3545",
"permissions": [
"page-read",
"page-edit",
"page-create",
"page-delete",
"page-rename",
"page-export",
"asset-read",
"asset-upload",
"asset-delete",
"search-page",
"search-user",
"user-read",
"user-edit",
"user-create",
"user-delete",
"admin-system",
"admin-roles"
]
},
"user-admin": {
"name": "user-admin",
"displayname": "User Administrator",
"description": "Can manage users — create, edit, deactivate, delete",
"issystem": true,
"icon": "user-cog",
"color": "#6610f2",
"permissions": [
"user-read",
"user-edit",
"user-create",
"user-delete",
"search-user"
]
},
"editor": {
"name": "editor",
"displayname": "Editor",
"description": "Can create, edit, delete, and rename pages",
"issystem": true,
"icon": "edit",
"color": "#007bff",
"permissions": [
"page-read",
"page-edit",
"page-create",
"page-delete",
"page-rename",
"page-export",
"asset-read",
"asset-upload",
"asset-delete",
"search-page"
]
},
"contributor": {
"name": "contributor",
"displayname": "Contributor",
"description": "Can create and edit pages",
"issystem": true,
"icon": "user-edit",
"color": "#28a745",
"permissions": [
"page-read",
"page-edit",
"page-create",
"page-export",
"asset-read",
"asset-upload",
"search-page"
]
},
"reader": {
"name": "reader",
"displayname": "Reader",
"description": "Read-only access to content",
"issystem": true,
"icon": "book-reader",
"color": "#6c757d",
"permissions": [
"page-read",
"page-export",
"asset-read",
"search-page"
]
},
"member": {
"name": "member",
"displayname": "Member",
"description": "Community member — same read access as reader, placeholder for community-specific permissions",
"issystem": true,
"icon": "id-card",
"color": "#20c997",
"permissions": [
"page-read",
"asset-read",
"search-page"
]
},
"anonymous": {
"name": "anonymous",
"displayname": "Anonymous",
"description": "Public access without authentication",
"issystem": true,
"icon": "user-secret",
"color": "#adb5bd",
"permissions": [
"page-read",
"asset-read"
]
}
} |
ngdpbase.rss.*
ngdpbase.rss.*
| Key | Value |
|---|---|
ngdpbase.rss.channel-description |
RSS feed for ngdpbase updates |
ngdpbase.rss.channel-title |
ngdpbase RSS Feed |
ngdpbase.rss.file-name |
rss.xml |
ngdpbase.rss.generate |
true |
ngdpbase.rss.interval |
3600 |
ngdpbase.schedules.*
ngdpbase.schedules.*
| Key | Value |
|---|---|
ngdpbase.schedules.enabled |
true |
ngdpbase.search.*
ngdpbase.search.*
| Key | Value |
|---|---|
ngdpbase.search.autocomplete.enabled |
true |
ngdpbase.search.autocomplete.minlength |
2 |
ngdpbase.search.enabled |
true |
ngdpbase.search.maxresults |
50 |
ngdpbase.search.plugin.allowAdvanced |
true |
ngdpbase.search.plugin.cacheResults |
true |
ngdpbase.search.plugin.cacheTTL |
300 |
ngdpbase.search.plugin.maxResults |
50 |
ngdpbase.search.plugin.showScore |
true |
ngdpbase.search.provider |
lunrsearchprovider |
ngdpbase.search.provider.default |
lunrsearchprovider |
ngdpbase.search.provider.elasticsearch.autotagging.enabled |
false |
ngdpbase.search.provider.elasticsearch.connecttimeout |
5000 |
ngdpbase.search.provider.elasticsearch.indexname |
ngdpbase-pages |
ngdpbase.search.provider.elasticsearch.requesttimeout |
30000 |
ngdpbase.search.provider.elasticsearch.url |
http://localhost:9200 |
ngdpbase.search.provider.lunr.boost.keywords |
4 |
ngdpbase.search.provider.lunr.boost.systemcategory |
8 |
ngdpbase.search.provider.lunr.boost.tags |
5 |
ngdpbase.search.provider.lunr.boost.title |
10 |
ngdpbase.search.provider.lunr.boost.userkeywords |
6 |
ngdpbase.search.provider.lunr.indexdir |
${FAST_STORAGE}/search-index |
ngdpbase.search.provider.lunr.maxresults |
50 |
ngdpbase.search.provider.lunr.snippetlength |
200 |
ngdpbase.search.provider.lunr.stemming |
true |
ngdpbase.search.suggestions.enabled |
true |
ngdpbase.search.suggestions.maxitems |
10 |
ngdpbase.server.*
ngdpbase.server.*
| Key | Value |
|---|---|
ngdpbase.server.host |
0.0.0.0 |
ngdpbase.server.port |
3000 |
ngdpbase.session.*
ngdpbase.session.*
| Key | Value |
|---|---|
ngdpbase.session.http-only |
true |
ngdpbase.session.max-age |
86400000 |
ngdpbase.session.sameSite |
lax |
ngdpbase.session.secret |
ngdpbase-session-secret-change-in-production |
ngdpbase.session.secure |
true |
ngdpbase.session.storagedir |
${FAST_STORAGE}/sessions |
ngdpbase.session.store |
users/sessions.json |
ngdpbase.specialpage.*
ngdpbase.specialpage.*
| Key | Value |
|---|---|
ngdpbase.specialpage.diff |
Diff.jsp |
ngdpbase.specialpage.findpage |
FindPage.jsp |
ngdpbase.specialpage.login |
Login.jsp |
ngdpbase.specialpage.search |
Search.jsp |
ngdpbase.specialpage.upload |
Upload.jsp |
ngdpbase.specialpage.userpreferences |
UserPreferences.jsp |
ngdpbase.specialpage.workflow |
Workflow.jsp |
ngdpbase.storageLocation.*
ngdpbase.storageLocation.*
| Key | Value |
|---|---|
ngdpbase.storageLocation.aclBasedStorage |
true |
ngdpbase.storageLocation.categoryBasedStorage.Admin |
required |
ngdpbase.storageLocation.categoryBasedStorage.Documentation |
regular |
ngdpbase.storageLocation.categoryBasedStorage.General |
regular |
ngdpbase.storageLocation.categoryBasedStorage.Security |
required |
ngdpbase.storageLocation.categoryBasedStorage.System |
required |
ngdpbase.storageLocation.enabled |
true |
ngdpbase.storageLocation.roleBasedStorage.admin |
required |
ngdpbase.storageLocation.roleBasedStorage.editor |
regular |
ngdpbase.storageLocation.roleBasedStorage.user |
regular |
ngdpbase.style.*
ngdpbase.style.*
| Key | Value |
|---|---|
ngdpbase.style.bootstrap.integration |
true |
ngdpbase.style.custom-classes.enabled |
true |
ngdpbase.style.predefined.background |
bg-primary,bg-secondary,bg-light,bg-dark |
ngdpbase.style.predefined.layout |
text-center,text-left,text-right,float-left,float-right |
ngdpbase.style.predefined.text |
text-primary,text-secondary,text-success,text-danger,text-warning,text-info |
ngdpbase.style.security.allow-inline-css |
false |
ngdpbase.style.security.allowed-properties |
color,background-color,font-weight,font-style,text-align |
ngdpbase.tab.*
ngdpbase.tab.*
| Key | Value |
|---|---|
ngdpbase.tab.pagetabs |
true |
ngdpbase.tab.pagetabs.template |
Template:PageTabs |
ngdpbase.tab.persist |
true |
ngdpbase.tab.style |
tabs |
ngdpbase.telemetry.*
ngdpbase.telemetry.*
| Key | Value |
|---|---|
ngdpbase.telemetry.enabled |
false |
ngdpbase.telemetry.metrics.host |
0.0.0.0 |
ngdpbase.telemetry.metrics.interval |
15000 |
ngdpbase.telemetry.metrics.path |
/metrics |
ngdpbase.telemetry.metrics.port |
9464 |
ngdpbase.telemetry.otlp.enabled |
false |
ngdpbase.telemetry.otlp.endpoint |
|
ngdpbase.telemetry.otlp.headers |
{} |
ngdpbase.telemetry.otlp.interval |
30000 |
ngdpbase.telemetry.otlp.timeout |
30000 |
ngdpbase.telemetry.service-name |
|
ngdpbase.theme.*
ngdpbase.theme.*
| Key | Value |
|---|---|
ngdpbase.theme.active |
volcano |
ngdpbase.theme.defaults.mode |
light |
ngdpbase.theme.directory |
themes |
ngdpbase.translator-reader.*
ngdpbase.translator-reader.*
| Key | Value |
|---|---|
ngdpbase.translator-reader.allow-html |
false |
ngdpbase.translator-reader.camel-case-links |
true |
ngdpbase.translator-reader.inline-pattern.1 |
s/\{\{([^}]+)\}\}/\<tt\>$1\<\/tt\>/g |
ngdpbase.translator-reader.match-english-plurals |
true |
ngdpbase.translator-reader.plain-uris |
true |
ngdpbase.url.*
ngdpbase.url.*
| Key | Value |
|---|---|
ngdpbase.url.generator |
DefaultURLGenerator |
ngdpbase.user.*
ngdpbase.user.*
| Key | Value |
|---|---|
ngdpbase.user.coreFields |
[
"username",
"email",
"displayName",
"password",
"roles",
"isActive",
"isExternal",
"isSystem",
"createdAt",
"loginCount",
"lastLogin",
"preferences",
"profilePage",
"allowedAuthMethods",
"avatar"
] |
ngdpbase.user.defaults.locale |
en-us |
ngdpbase.user.defaults.timezone |
utc |
ngdpbase.user.enabled |
true |
ngdpbase.user.provider |
jsonuserprovider |
ngdpbase.user.provider.default |
jsonuserprovider |
ngdpbase.user.provider.files.sessions |
sessions.json |
ngdpbase.user.provider.files.users |
users.json |
ngdpbase.user.provider.storagedir |
${FAST_STORAGE}/users |
ngdpbase.user.security.defaultpassword |
admin123 |
ngdpbase.user.security.passwordsalt |
amdwiki-salt |
ngdpbase.user.security.sessionexpiration |
86400000 |
ngdpbase.workflow.*
ngdpbase.workflow.*
| Key | Value |
|---|---|
ngdpbase.workflow.approver |
Admin |
ngdpbase.workflow.saveWikiPage |
false |
ngdpbase.xmlGroupDatabase.*
ngdpbase.xmlGroupDatabase.*
| Key | Value |
|---|---|
ngdpbase.xmlGroupDatabase.file |
./config/groupdatabase.xml |
ngdpbase.xmlUserDatabase.*
ngdpbase.xmlUserDatabase.*
| Key | Value |
|---|---|
ngdpbase.xmlUserDatabase.file |
./config/userdatabase.xml |
Top-level ngdpbase.* (ungrouped)
Single-segment keys with no sub-group:
ngdpbase.addons: {}ngdpbase.application-name: GeoHazardWatchngdpbase.authorizer: DefaultAuthorizerngdpbase.diff-provider: TraditionalDiffProviderngdpbase.encoding: UTF-8ngdpbase.favicon-path: /favicon.svgngdpbase.fetch-timeout-ms: 30000ngdpbase.front-page: volcanoes-and-earthquakesngdpbase.groupdatabase: JSONGroupDatabasengdpbase.jsonorganizationsdatabase: users/organizations.jsonngdpbase.jsonpersonsdatabase: .users/persons.jsonngdpbase.jsonuserdatabase: .users/users.jsonngdpbase.pageFilters: org.apache.wiki.filters.BasicPageFilter,org.apache.wiki.filters.ProfanityFilterngdpbase.referenceStyle: relativengdpbase.schedules: {"business-hours":{"name":"Standard Business Hours","description":"Monday-Friday, 9 AM - 5 PM","timeZone":"America/New_York","rules":[{"days":["monday","tuesday","wednesday","thursday","friday"],"startTime":"09:00","endTime":"17:00","type":"allow"},{"days":["saturday","sunday"],"type":"deny"}],"exceptions":[],"enabled":true},"weekend-support":{"name":"Weekend Support","description":"Limited weekend access for critical issues","timeZone":"America/New_York","rules":[{"days":["monday","tuesday","wednesday","thursday","friday"],"startTime":"09:00","endTime":"17:00","type":"allow"},{"days":["saturday"],"startTime":"10:00","endTime":"14:00","type":"allow"},{"days":["sunday"],"type":"deny"}],"exceptions":[],"enabled":true},"emergency-24-7":{"name":"24/7 Emergency Access","description":"Full access for emergency situations","timeZone":"UTC","rules":[{"type":"allow"}],"exceptions":[],"enabled":true},"role_admin":{"name":"Administrator Schedule","description":"Extended hours for administrators","timeZone":"America/New_York","rules":[{"days":["monday","tuesday","wednesday","thursday","friday"],"startTime":"08:00","endTime":"18:00","type":"allow"},{"days":["saturday"],"startTime":"09:00","endTime":"12:00","type":"allow"}],"exceptions":[],"enabled":true},"category_System":{"name":"System Pages Schedule","description":"Restricted access to system pages","timeZone":"America/New_York","rules":[{"days":["monday","tuesday","wednesday","thursday","friday"],"startTime":"09:00","endTime":"17:00","type":"allow"}],"exceptions":[],"enabled":true},"default":{"name":"Default Schedule","description":"Fallback schedule for users without specific assignments","timeZone":"UTC","rules":[{"days":["monday","tuesday","wednesday","thursday","friday"],"startTime":"09:00","endTime":"17:00","type":"allow"}],"exceptions":[],"enabled":true}}ngdpbase.system-category: {"general":{"label":"general","description":"General User pages","default":true,"storageLocation":"regular","enabled":true},"system":{"label":"system","description":"System configuration and infrastructure pages","default":false,"storageLocation":"required","enabled":true,"page-badge":{"color":"bg-secondary","label":"System","title":"System page"}},"documentation":{"label":"documentation","description":"End-User documentation","default":false,"storageLocation":"required","enabled":true,"page-badge":{"color":"bg-info text-dark","label":"Documentation","title":"Documentation page"}},"developer":{"label":"developer","description":"Developer documentation and technical note Only in GitHub","default":false,"storageLocation":"github","enabled":true},"addon":{"label":"addon","description":"Pages seeded by an installed add-on","default":false,"storageLocation":"regular","enabled":true,"page-badge":{"color":"bg-primary","label":"Addon","title":"Add-on page"}},"user-profile":{"label":"user-profile","description":"User profile pages","default":false,"storageLocation":"regular","enabled":true,"page-badge":{"color":"bg-success","label":"Profile","title":"User profile page"}},"journal":{"label":"journal","description":"Personal journal entries — schema.org BlogPosting at JSON-LD render time (#791)","default":false,"storageLocation":"regular","enabled":true,"page-badge":{"color":"bg-info","label":"Journal","title":"Journal entry"}}}ngdpbase.system-keywords: {"general":{"label":"general","description":"General-purpose keyword for standard wiki content","default":true,"category":"content-type","enabled":true},"draft":{"label":"draft","description":"Work in progress content","category":"workflow-status","enabled":true},"review":{"label":"review","description":"Content under review","category":"workflow-status","enabled":true},"published":{"label":"published","description":"Finalized and approved content","category":"workflow-status","enabled":true},"medicine":{"label":"medicine","description":"Medical and healthcare-related content","category":"subject","enabled":true},"geology":{"label":"geology","description":"Geological and earth science content","category":"subject","enabled":true},"meteorology":{"label":"meteorology","description":"Weather and atmospheric science content","category":"subject","enabled":true},"oceanography":{"label":"oceanography","description":"Ocean and marine science content","category":"subject","enabled":true},"psychology":{"label":"psychology","description":"Psychological and behavioral science content","category":"subject","enabled":true},"sociology":{"label":"sociology","description":"Social science and society-related content","category":"subject","enabled":true},"anthropology":{"label":"anthropology","description":"Human culture and society content","category":"subject","enabled":true},"economics":{"label":"economics","description":"Economic and financial content","category":"subject","enabled":true},"political-science":{"label":"political-science","description":"Political science and governance content","category":"subject","enabled":true}}ngdpbase.templateDir: defaultngdpbase.timezones: [{"value":"UTC","label":"UTC (Coordinated Universal Time)","category":"Universal"},{"value":"America/New_York","label":"Eastern Time (New York)","category":"North America"},{"value":"America/Chicago","label":"Central Time (Chicago)","category":"North America"},{"value":"America/Denver","label":"Mountain Time (Denver)","category":"North America"},{"value":"America/Los_Angeles","label":"Pacific Time (Los Angeles)","category":"North America"},{"value":"America/Toronto","label":"Eastern Time (Toronto)","category":"North America"},{"value":"America/Vancouver","label":"Pacific Time (Vancouver)","category":"North America"},{"value":"Europe/London","label":"GMT (London)","category":"Europe"},{"value":"Europe/Paris","label":"CET (Paris)","category":"Europe"},{"value":"Europe/Berlin","label":"CET (Berlin)","category":"Europe"},{"value":"Europe/Rome","label":"CET (Rome)","category":"Europe"},{"value":"Europe/Madrid","label":"CET (Madrid)","category":"Europe"},{"value":"Europe/Moscow","label":"MSK (Moscow)","category":"Europe"},{"value":"Europe/Stockholm","label":"CET (Stockholm)","category":"Europe"},{"value":"Asia/Tokyo","label":"JST (Tokyo)","category":"Asia"},{"value":"Asia/Shanghai","label":"CST (Shanghai)","category":"Asia"},{"value":"Asia/Seoul","label":"KST (Seoul)","category":"Asia"},{"value":"Asia/Kolkata","label":"IST (Kolkata)","category":"Asia"},{"value":"Asia/Dubai","label":"GST (Dubai)","category":"Asia"},{"value":"Asia/Singapore","label":"SGT (Singapore)","category":"Asia"},{"value":"Australia/Sydney","label":"AEST (Sydney)","category":"Oceania"},{"value":"Australia/Melbourne","label":"AEST (Melbourne)","category":"Oceania"},{"value":"Australia/Perth","label":"AWST (Perth)","category":"Oceania"},{"value":"Pacific/Auckland","label":"NZST (Auckland)","category":"Oceania"},{"value":"Africa/Cairo","label":"EET (Cairo)","category":"Africa"},{"value":"Africa/Johannesburg","label":"SAST (Johannesburg)","category":"Africa"},{"value":"America/Sao_Paulo","label":"BRT (São Paulo)","category":"South America"},{"value":"America/Argentina/Buenos_Aires","label":"ART (Buenos Aires)","category":"South America"}]ngdpbase.user-keywords: {"default":{"label":"default","description":"Default keyword with no special restrictions","category":"general","enabled":true,"restrictEditing":false},"draft":{"label":"draft","description":"Work in progress content","category":"status","enabled":true,"restrictEditing":false},"review":{"label":"review","description":"Content under review","category":"status","enabled":true,"restrictEditing":false},"published":{"label":"published","description":"Finalized and approved content","category":"status","enabled":true,"restrictEditing":false},"medicine":{"label":"medicine","description":"Medical and healthcare-related content","category":"subject","enabled":true,"restrictEditing":false,"schemaOrg":"MedicalEntity"},"geology":{"label":"geology","description":"Geological and earth science content","category":"subject","enabled":true,"restrictEditing":false},"meteorology":{"label":"meteorology","description":"Weather and atmospheric science content","category":"subject","enabled":true,"restrictEditing":false},"oceanography":{"label":"oceanography","description":"Ocean and marine science content","category":"subject","enabled":true,"restrictEditing":false},"psychology":{"label":"psychology","description":"Psychological and behavioral science content","category":"subject","enabled":true,"restrictEditing":false},"sociology":{"label":"sociology","description":"Social science and society-related content","category":"subject","enabled":true,"restrictEditing":false},"anthropology":{"label":"anthropology","description":"Human culture and society content","category":"subject","enabled":true,"restrictEditing":false},"economics":{"label":"economics","description":"Economic and financial content","category":"subject","enabled":true,"restrictEditing":false},"political-science":{"label":"political-science","description":"Political science and governance content","category":"subject","enabled":true,"restrictEditing":false}}ngdpbase.userdatabase: JSONUserDatabasengdpbase.version: 3.46.1ngdpbase.workDir: ./work
No comments yet.