Apache Syncope - CHANGES
Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------

Release Notes - Syncope - Version 2.1.9
================================================================================

** Bug
    * [SYNCOPE-1606] - Syncope returns an exception when doing two sequential operations for the same user from the toggle panel
    * [SYNCOPE-1607] - Console Page preferences not working
    * [SYNCOPE-1613] - startAt date is set to start field for SCHEDULED, PULL and PUSH TaskTOs
    * [SYNCOPE-1616] - CSV and single push / pull concurrency issues
    * [SYNCOPE-1619] - SearchPanel should display the input field based on the type of the selected property
    * [SYNCOPE-1620] - JWT validation requires exp and nbf claims
    * [SYNCOPE-1622] - ConnId Connectors not pooled with Resource override

** Improvement
    * [SYNCOPE-1608] - Allow wildcard group membership search
    * [SYNCOPE-1609] - Reduce the number of table joins into PostgreSQL JSONB persistence implementation
    * [SYNCOPE-1610] - Set Reconciliation to work with Pull and Push Correlation Rules if available
    * [SYNCOPE-1611] - Caffeine Cache for Virtual Attribute Cache
    * [SYNCOPE-1624] - Toggle panel improvements

Release Notes - Syncope - Version 2.1.8
================================================================================

** Bug
    * [SYNCOPE-1590] - Error when adding i18n labels to schemas
    * [SYNCOPE-1596] - Console: read-only attributes not rendered as disabled
    * [SYNCOPE-1598] - Create or update user with two+ memberships for the same group are not prevented
    * [SYNCOPE-1601] - Propagation not always triggered after form submit in User Requests
    * [SYNCOPE-1602] - ConnObjectKey attribute values not included with DefaultPushCorrelationRule
    * [SYNCOPE-1603] - PushCorrelationRule not used for DELETE on External Resources
    * [SYNCOPE-1604] - AjaxDateTimePicker doesn't handle some 1900 dates the right way
    * [SYNCOPE-1605] - Propagation task not generated if update involves only ConnObjectLink

** Improvement
    * [SYNCOPE-1591] - Support fetching data from internal storage for XML content loader
    * [SYNCOPE-1594] - Allow to filter user requests and forms by username
    * [SYNCOPE-1597] - Enable default customization of console layout
    * [SYNCOPE-1600] - Flowable: support password form property type

Release Notes - Syncope - Version 2.1.7
================================================================================

** Bug
    * [SYNCOPE-1549] - Groups select opens a popup when removing a group
    * [SYNCOPE-1560] - File upload component: missing translations
    * [SYNCOPE-1561] - Batch: missing support for custom TLSClientParameters
    * [SYNCOPE-1563] - User approval update should send the password only when requested
    * [SYNCOPE-1564] - Integration tests run with YAML payloads are failing
    * [SYNCOPE-1565] - Integration tests run with XML payloads are failing
    * [SYNCOPE-1567] - Mapping does not allow relationships
    * [SYNCOPE-1569] - Console: cannot save Reportlet search conditions
    * [SYNCOPE-1573] - Logout forced from Console when editing user with many memberships
    * [SYNCOPE-1581] - When enabling Swagger UI or Flowable extensions Installer generates invalid POM files
    * [SYNCOPE-1583] - For members part of a Dynamic Group, but cannot access group attributes in member mapping
    * [SYNCOPE-1586] - Startup failures with sample docker-compose and MySQL

** Improvement
    * [SYNCOPE-1568] - Render custom wizard on user request
    * [SYNCOPE-1575] - Provide the ability to specify on which resources the user's status should be propagated

Release Notes - Syncope - Version 2.1.6
================================================================================

** Bug
    * [SYNCOPE-1461] - MySQL: Segmentation fault with query using JSON_TABLE
    * [SYNCOPE-1503] - Cannot remove provisioning information from Resource in Admin Console
    * [SYNCOPE-1504] - Error setting uidOnCreate attribute during a pull task with multiple provisions
    * [SYNCOPE-1505] - Changes to "AjaxPalettePanel" components in Console are not saved when the previous step button is pressed before submitting the wizard form
    * [SYNCOPE-1512] - Error while saving a unique plain attribute value with single quote when using JPA JSON
    * [SYNCOPE-1520] - Exception when updating Group unique attribute with JPA JSON
    * [SYNCOPE-1524] - Social registration does not redirect to self registration page
    * [SYNCOPE-1525] - Documentation indicates sharing private key, hiding public key
    * [SYNCOPE-1526] - Broken link to issues from reference documentation
    * [SYNCOPE-1533] - Broken backward compatibilty because of changes in Equals and HashCode methods in TOs
    * [SYNCOPE-1536] - Enduser UI does not clean up file alteration monitors on shutdown
    * [SYNCOPE-1537] - Password of LinkedAccounts not saved properly from Admin Console
    * [SYNCOPE-1538] - Admin Console: users / groups management slow to access with high number of realms
    * [SYNCOPE-1539] - AjaxPalettePanel does not support setRequired
    * [SYNCOPE-1542] - Search panel issues in Admin Console
    * [SYNCOPE-1544] - 'Override?' flag not properly set for password and username fields of LinkedAccounts
    * [SYNCOPE-1546] - PriorityPropagationTaskExecutor: rejected tasks not stored
    * [SYNCOPE-1554] - Generated default admin role layout doesn't work

** New Feature
    * [SYNCOPE-957] - Multiaccount
    * [SYNCOPE-1506] - Merge Users
    * [SYNCOPE-1511] - Configure audit events create/update/etc of users, groups, etc
    * [SYNCOPE-1529] - French (CA) translation for Admin Console

** Improvement
    * [SYNCOPE-1498] - Allow variable resolution in Content.xml
    * [SYNCOPE-1499] - Add support for READ correlation rule
    * [SYNCOPE-1500] - Allow single import from External Resource
    * [SYNCOPE-1501] - Allow filtering for explore resource
    * [SYNCOPE-1502] - Find Anys using FIQL: SQL improvements
    * [SYNCOPE-1508] - Allow to extend the set of attributes requested from External Resources
    * [SYNCOPE-1509] - Auto-select language from Accept-Language HTTP header
    * [SYNCOPE-1510] - Allow to store encrypted schema's secret key externally
    * [SYNCOPE-1513] - Allow to customize security headers
    * [SYNCOPE-1515] - Adapt realm selector to actual number of realms
    * [SYNCOPE-1517] - Audit appender should be configurable
    * [SYNCOPE-1518] - Allow X-Forwarded-For and X-Forwarded-Proto HTTP headers integration
    * [SYNCOPE-1521] - Allow filtering for Role assignment
    * [SYNCOPE-1522] - Realm behaviors for Delegated Administration
    * [SYNCOPE-1523] - JPAConnInstanceDAO should be marked as Transactional
    * [SYNCOPE-1527] - Allow for custom search conditions
    * [SYNCOPE-1530] - Add parameters at User Requests start
    * [SYNCOPE-1531] - Easier bulk upload from / download to CSV
    * [SYNCOPE-1532] - Allow tilde for key values and Realms name
    * [SYNCOPE-1534] - Display friendly error messages in Admin Console
    * [SYNCOPE-1535] - Customize the order of the provisions of a resource according to the object classes
    * [SYNCOPE-1540] - Make internal storage export DBMS independent
    * [SYNCOPE-1541] - XML response message timestamps missing millisecs component if "0 msecs"
    * [SYNCOPE-1547] - Allow the possibility to customize the roles to be displayed
    * [SYNCOPE-1548] - Allow the possibility to customize the Groups wizard step
    * [SYNCOPE-1551] - Allow for info notifications in Admin Console

** Task
    * [SYNCOPE-1514] - Report CLI deprecation

Release Notes - Syncope - Version 2.1.5
================================================================================

** Bug
    * [SYNCOPE-1462] - Requests list is not refreshed if empty
    * [SYNCOPE-1467] - RDN not allowed when an attribute of the group present also in the DN is changed
    * [SYNCOPE-1469] - MySQL with JSON support: errors during startup
    * [SYNCOPE-1470] - Flowable extension not working with MariaDB
    * [SYNCOPE-1472] - Resource association is duplicated on database after update, assign or link operations
    * [SYNCOPE-1474] - Resource is duplicated after batch operation
    * [SYNCOPE-1476] - Error while creating Enum schema from Admin Console
    * [SYNCOPE-1477] - jQuery UI's spinner not rendered
    * [SYNCOPE-1478] - Unable to remove value of "Schema to hold values for identifiers generated upon Create by the external Identity Store" from provisioning
    * [SYNCOPE-1480] - Elasticsearch:dynrealm assignment not updated on condition change
    * [SYNCOPE-1481] - Invalid values when saving a membership attribute of type date
    * [SYNCOPE-1484] - syncope-ide-netbeans submodule fails to find netbeans dependency
    * [SYNCOPE-1485] - Reindex of elasticsearch ends with memory error in case of huge amount of data
    * [SYNCOPE-1487] - Build Instructions do not say that the "patch" program is needed
    * [SYNCOPE-1488] - Change to MVM Env for JDK > 8.00
    * [SYNCOPE-1492] - Build Instructions are missing an EVN (DOCKER_HOST) needed for  mvn -Ppostgres-it 
    * [SYNCOPE-1493] - Mapping unique schema as remote key never matches internal objects

** Improvement
    * [SYNCOPE-1463] - Improve UX enduser User Request management
    * [SYNCOPE-1468] - Allow for configurable org.quartz.jobStore.misfireThreshold
    * [SYNCOPE-1473] - Provide a PropagationActions to maintain a conservative membership policy management

** Task
    * [SYNCOPE-1464] - Upgrade to Apache Netbeans Maven dependencies

Release Notes - Syncope - Version 2.1.4
================================================================================

** Bug
    * [SYNCOPE-1428] - APIs to read by key return 404 instead of 401 for not authenticated calls
    * [SYNCOPE-1429] - Wildcard case-insesitive queries do not work with Elasticsearch
    * [SYNCOPE-1430] - ItemTransformer for Date schemas throws NPE 
    * [SYNCOPE-1431] - Connector and Resource history compare does not work
    * [SYNCOPE-1432] - After creating new connector / resource, Topology does not show it
    * [SYNCOPE-1437] - Error while searching for users / groups / any objects with Elasticsearch when no data are present
    * [SYNCOPE-1438] - "changePwdDate" field is not initialized when create a new user with the specified password
    * [SYNCOPE-1439] - User membership attributes not updated
    * [SYNCOPE-1440] - Pagination of Users/Groups doesn't work as expected with Elasticsearch
    * [SYNCOPE-1442] - Inactive Job with cron expression set is executed anyway 
    * [SYNCOPE-1443] - Changing Display Rows number in Reconciliation Resource Panel doesn't work
    * [SYNCOPE-1446] - Persistence exception on PostgreSQL when AUDIT is enabled on propagation tasks 
    * [SYNCOPE-1447] - NPE while deleting a privilege from admin console
    * [SYNCOPE-1448] - Bean loading/register section not threadsafe
    * [SYNCOPE-1450] - Audit: sensitive information not masked by default during update
    * [SYNCOPE-1452] - Notification about is not deleted after update
    * [SYNCOPE-1453] - MappingItem with "mustChangePassword" field cannot be provisioned and updated during import
    * [SYNCOPE-1454] - Avoid duplicated Propagation Tasks
    * [SYNCOPE-1457] - NonAlphaNumeric policy pattern matches the "Not word" character class

** New Feature
    * [SYNCOPE-1401] - Leverage MySQL JSON type

** Improvement
    * [SYNCOPE-1433] - Unflag/flag uniqueness shouldn't be permitted
    * [SYNCOPE-1436] - Remove pullPolicy EAGER fetchType from JPAExternalResource
    * [SYNCOPE-1441] - Perform in-memory match for dynamic conditions
    * [SYNCOPE-1444] - Pull correlation rules: allow to discriminate ongoing event
    * [SYNCOPE-1445] - Docker: support pgjsonb as DBMS option
    * [SYNCOPE-1449] - Support multi-value attributes in JEXL expressions

** Task
    * [SYNCOPE-1400] - Support MySQL 8

Release Notes - Syncope - Version 2.1.3
================================================================================

** Bug
    * [SYNCOPE-1391] - Check template for confirmPasswordReset and mustChangePassword
    * [SYNCOPE-1393] - jexl function fullPath2Dn return invalid value for ROOT realm
    * [SYNCOPE-1399] - Error while executing the custom task to initialize indices with Elasticsearch v6.x
    * [SYNCOPE-1404] - Dialog not closing in Netbeans ide plugin when creating a new element
    * [SYNCOPE-1405] - Error during db initialization: views.xml always set for PostgreSQL
    * [SYNCOPE-1406] - Error during startup because of missing property 'historyLevel'
    * [SYNCOPE-1407] - Date pattern ignored by widget
    * [SYNCOPE-1408] - Partial user edit via Role layout implies removing all unmanaged attributes
    * [SYNCOPE-1411] - User/Any object updates generate attributes with null owner in case of patches involving membership attributes
    * [SYNCOPE-1417] - Search with order by two plain attributes gives no results
    * [SYNCOPE-1419] - User and AnyObject search fails in case of not leaf conditions given on multivalue fields
    * [SYNCOPE-1420] - Expired Access Tokens might impede successful authentication
    * [SYNCOPE-1425] - Mapping item transformers do not work for non-string values

** New Feature
    * [SYNCOPE-1368] - Add some accessibility features to Console
    * [SYNCOPE-1395] - Leverage PostgreSQL's jsonb type

** Improvement
    * [SYNCOPE-1392] - Reduce usage of Reflection to improve overall performance
    * [SYNCOPE-1394] - Add un-claim capability for requests
    * [SYNCOPE-1396] - Give the possibility to configure TLS client parameters
    * [SYNCOPE-1397] - No Such element exception while editing USER update approval
    * [SYNCOPE-1409] - Avoid double round-trip to External Resource during Push
    * [SYNCOPE-1412] - Serch for identities with null attributes can be improved 
    * [SYNCOPE-1416] - remove user_search_null_attr view
    * [SYNCOPE-1422] - Permit to provide custom implementation of NotificationManager and AuditManager
    * [SYNCOPE-1424] - Improve Propagation task ordered search

** Task
    * [SYNCOPE-1381] - Support user request from Enduser UI
    * [SYNCOPE-1402] - Upgrade to Validation API 2.0

Release Notes - Syncope - Version 2.1.2
================================================================================

** Bug
    * [SYNCOPE-1360] - Delegated administration to Dynamic Realms not possible
    * [SYNCOPE-1361] - Custom audit appender does not work after a restart
    * [SYNCOPE-1362] - Sorting users by creation date raises RuntimeException
    * [SYNCOPE-1363] - Deleting multiple users at once reports "Operation delete not supported"
    * [SYNCOPE-1364] - Upgrade tool from 2.0 script error
    * [SYNCOPE-1365] - Erorr during retrieve candidate groups for approval process
    * [SYNCOPE-1366] - Audit events ownership always set to admin user
    * [SYNCOPE-1370] - Password reset succeeds also on wrong captcha
    * [SYNCOPE-1371] - After upgrade from 2.0, error when updating Realm: ClassCastException: Expected LOGIC_ACTIONS, got PULL_ACTIONS
    * [SYNCOPE-1372] - Password history checks not effective
    * [SYNCOPE-1373] - Custom task schedule is reset after update
    * [SYNCOPE-1374] - Concurrent propagation tasks for non-Master domains not saved
    * [SYNCOPE-1375] - The existence of a membership attribute mapping implies membership creation during pull
    * [SYNCOPE-1376] - swagger-ui server URL incorrect behind ssl reverse proxy
    * [SYNCOPE-1377] - Wrong X-Syncope-Domain header does not throw an error
    * [SYNCOPE-1380] - During Push or Pull, if policy with conflict resolution IGNORE is set, the process is interrupted as soon as such setting applies
    * [SYNCOPE-1383] - Exception during "getObject" from external resource
    * [SYNCOPE-1387] - ClassCast exception when pull realms
    * [SYNCOPE-1388] - mustChangePassword flag does not prevent user from invoking actions
    * [SYNCOPE-1389] - In case of virtual attribute mapping, propagation is always set as UPDATE also in case of CREATE
    * [SYNCOPE-1390] - Pull Realms: pull task with Unmatching Rules: PROVISION shouldn't create propagation task

** New Feature
    * [SYNCOPE-1019] - Template mechanism for Enduser UI
    * [SYNCOPE-1220] - Support Groovy implementations in the Netbeans IDE plugin
    * [SYNCOPE-1367] - Add some accessibility features to Enduser
    * [SYNCOPE-1369] - User requests

** Improvement
    * [SYNCOPE-1379] - Make configurable resource check timeout
    * [SYNCOPE-1382] - Failure specifying push task filters including db column mapped as integer
    * [SYNCOPE-1384] - SAML 2.0: Allow to customize RequestedAuthnContext for a given Service Provider
    * [SYNCOPE-1385] - Priority propagation timeout hard coded into PriorityPropagationTaskExecutor

Release Notes - Syncope - Version 2.1.1
================================================================================

** Bug
    * [SYNCOPE-1331] - ExternalResourcePropagationAction is too long name for a table in Oracle DB
    * [SYNCOPE-1333] - Missing virtual attribute value in case of type extension
    * [SYNCOPE-1334] - Maven install problem with Apache Syncope 2.1.0
    * [SYNCOPE-1335] - Missing SQL statements when upgrading from 2.0 Jazz
    * [SYNCOPE-1337] - Password history policy is not enforced on salted passwords
    * [SYNCOPE-1338] - Double type conversion applied during pull leads to errors
    * [SYNCOPE-1339] - Enduser spinner does not apply to the whole page
    * [SYNCOPE-1340] - Cannot update membership attribute
    * [SYNCOPE-1342] - console UI login form ignores Domain selection
    * [SYNCOPE-1343] - Attributes are not reset after pull of null values
    * [SYNCOPE-1344] - CORE_SCHEME not being updated in enduser.properties
    * [SYNCOPE-1346] - Adding a new task while re-executing a propagation task
    * [SYNCOPE-1347] - Invocation Problem calling org.apache.syncope.installer.processes.ArchetypeProcess
    * [SYNCOPE-1350] - Date values not formatted according to the conversion pattern
    * [SYNCOPE-1352] - Group wizard doesn't update the plain attributes
    * [SYNCOPE-1353] - DBPasswordPropagationActions link in the reference guide is wrong
    * [SYNCOPE-1354] - Push Tasks do not send status onto External Resources
    * [SYNCOPE-1356] - LDAPMembershipPullActions does not remove memberships
    * [SYNCOPE-1357] - MemoryVirAttrCache not working
    * [SYNCOPE-1358] - Search by boolean value does not work from Admin Console

** New Feature
    * [SYNCOPE-1348] - REST: replace bulk operations with batch requests

** Improvement
    * [SYNCOPE-1336] - Add pagination for approvals forms
    * [SYNCOPE-1341] - Domain should be configurable parameter for syncope-enduser docker image

Release Notes - Syncope - Version 2.1.0
================================================================================

** Sub-task
    * [SYNCOPE-808] - Netbeans plugin
    * [SYNCOPE-984] - Errors when building on Windows for archetype and Eclipse plugin
    * [SYNCOPE-985] - org.apache.syncope.client.cli.commands.MigrateTest Fails on Windows

** Bug
    * [SYNCOPE-937] - Security question not loaded while resetting the user password
    * [SYNCOPE-940] - Handle authorization issues more gracefully in the console
    * [SYNCOPE-942] - Bug in changing security answer in the Enduser UI
    * [SYNCOPE-944] - Cannot manually assign groups provided with dynamic assignment rules
    * [SYNCOPE-946] - Encrypted attribute values not managed as password values
    * [SYNCOPE-950] - Self-registration / self-update not working
    * [SYNCOPE-953] - Enduser shows groups of the selected realm rather than groups assignable to users in the selected realm
    * [SYNCOPE-965] - Cron expression for scheduled job is not saved from the console
    * [SYNCOPE-966] - Exception reported when looking at propagation task details from user list
    * [SYNCOPE-970] - On logout, page translation doesn't reset to default settings.
    * [SYNCOPE-974] - Incorrect error reported when creating notification with missing events
    * [SYNCOPE-975] - Search case insensitive ilike operator triggers search validation
    * [SYNCOPE-976] - Duplicated events shown by admin console for notifications and audit
    * [SYNCOPE-977] - style missing for captcha buttons in responsive template (under 800px width)
    * [SYNCOPE-979] - resource id is missing in user propagation task table
    * [SYNCOPE-980] - AnyObject search filter not honored with inGroups condition
    * [SYNCOPE-981] - Oracle/SQLServer configuration does not work
    * [SYNCOPE-982] - Notification tasks modal window does not provide access to actual HTML and TEXT e-mail body
    * [SYNCOPE-987] - Build issues on Windows
    * [SYNCOPE-990] - Explore resource detailed view always shows empty left column
    * [SYNCOPE-992] - Date not registered in self registration
    * [SYNCOPE-993] - Footer buttons positioning and resizing
    * [SYNCOPE-994] - Character encoding not being respected
    * [SYNCOPE-997] - Angular transition errors
    * [SYNCOPE-999] - REST exception mapper overwrites Spring Security response
    * [SYNCOPE-1000] - CSVDir connector unclear about required attributes/columns
    * [SYNCOPE-1001] - Closing the Activiti Modeler popup does not make the spinner to disappear
    * [SYNCOPE-1002] - Updating any objects' name via console is ineffective
    * [SYNCOPE-1003] - Error when accessing notification tasks for a given user
    * [SYNCOPE-1004] - Notification tasks generated for self read event not linked to user
    * [SYNCOPE-1007] - NPE in Console when on an empty search term for user assignment
    * [SYNCOPE-1008] - Maven home directory not trimmed of whitespace
    * [SYNCOPE-1010] - Some PushActions methods not invoked even if assigned
    * [SYNCOPE-1012] - Security answer not recognized during password reset
    * [SYNCOPE-1013] - Password reset link generated by default notification template does not trigger Enduser UI features
    * [SYNCOPE-1014] - The list of security questions is not refreshed after creating new one
    * [SYNCOPE-1016] - Last change date not updated for users when attributes are updated via pull
    * [SYNCOPE-1022] - UTF-8 characters in security questions not correctly encoded by Enduser UI
    * [SYNCOPE-1023] - Maven projects from archetype deploy test content with 'all' profile
    * [SYNCOPE-1024] - Enduser does not manages properly ENUM schema labels 
    * [SYNCOPE-1025] - SYNCOPEAUDIT table not populated
    * [SYNCOPE-1026] - Cannot remove group owner once set
    * [SYNCOPE-1027] - Mapping errors cannot be fixed when defining provision rules for a new resource
    * [SYNCOPE-1030] - Invalid DefaultAccountRule definition from Admin Console
    * [SYNCOPE-1032] - Role key must be not modifiable during edit from Admin Console
    * [SYNCOPE-1033] - NPE in Admin Console when working with Reconciliation Report
    * [SYNCOPE-1034] - Assigned Auxiliary classes disappear in the Type Extensions panel when click on cancel
    * [SYNCOPE-1036] - Notification icon does not refresh on new approval event
    * [SYNCOPE-1037] - Pending approvals list is clickable
    * [SYNCOPE-1038] - User create: finish button should remain clickable if the last step is reached
    * [SYNCOPE-1039] - User attributes in user edit/create form are reset after validation error
    * [SYNCOPE-1040] - Membership derived attributes cannot reference own plain attributes
    * [SYNCOPE-1042] - Removal of all executed pull tasks via bulk action returns a missing resource exception
    * [SYNCOPE-1043] - Improve JWT token expiration handling
    * [SYNCOPE-1044] - By editing the provisioning rules, modal footer is not disabled
    * [SYNCOPE-1045] - Activiti Modeler: log out from Admin Console in case of error
    * [SYNCOPE-1046] - Console: task execution sort not working properly
    * [SYNCOPE-1048] - Into the connector configuration page the same bundle appear more then once if different versions exist
    * [SYNCOPE-1049] - Console returns an error if you try to explore Syncope as a remote object
    * [SYNCOPE-1051] - It is possible to schedule task execution in the past
    * [SYNCOPE-1052] - Enduser CAPTCHA not reloading
    * [SYNCOPE-1057] - Type extensions cleared after group update during pull
    * [SYNCOPE-1060] - Date in membership attribute is propagated as timestamp
    * [SYNCOPE-1062] - Changes pulled from one resource not propagated externally
    * [SYNCOPE-1066] - WADL servlet uses request url to provide wadl
    * [SYNCOPE-1069] - Incomplete HA setup instructions
    * [SYNCOPE-1070] - Conversion pattern ignored for date, long and double values during propagation
    * [SYNCOPE-1071] - The executed notification tasks are not displaying on the console
    * [SYNCOPE-1075] - User lastChangeDate attribute is not displayed correctly
    * [SYNCOPE-1076] - The console doesn't allow to download the report in various formats
    * [SYNCOPE-1078] - Activiti modeler window doesn't open on click
    * [SYNCOPE-1079] - Missing toggle panel for the job control widget of the administration console dashboard
    * [SYNCOPE-1081] - Console: new toggle panel behavior anomalies
    * [SYNCOPE-1082] - Concurrent CRUD random failures with dynamic memberships
    * [SYNCOPE-1085] - Custom tasks modal page shouldn't show "Cancel" button
    * [SYNCOPE-1089] - Improve provisioning mapping page in order to avoid duplicates in internal attribute name list
    * [SYNCOPE-1090] - Error defining clause to search for group owners
    * [SYNCOPE-1091] - Error while downloading Jpeg binary attribute content
    * [SYNCOPE-1094] - Out of memory error while rendering PDF
    * [SYNCOPE-1098] - User edit modal page opening takes long in case of a lot of groups defined
    * [SYNCOPE-1099] - Dynamic group membership does not trigger propagation
    * [SYNCOPE-1101] - Error showing action icons on Notidfication events managements
    * [SYNCOPE-1104] - Missing autocomplete for ConnId object class when defining new provision
    * [SYNCOPE-1107] - The installer fails with a NoClassDefFoundError
    * [SYNCOPE-1108] - NullPointerException while saving an empty template
    * [SYNCOPE-1109] - Installer fails to setup Activiti
    * [SYNCOPE-1110] - Error replacing group/auxclass/resource during self-management operation
    * [SYNCOPE-1111] - New any type not shown unders Realms
    * [SYNCOPE-1112] - Error searching for user/group/anyobject by providing conditions on attribute with schema type Long
    * [SYNCOPE-1114] - Dynamic group information not available during propagation
    * [SYNCOPE-1121] - Enduser form customization does not work with empty section in edit mode
    * [SYNCOPE-1122] - Enduser must show all attributes when customForm.json has empty section with show=true
    * [SYNCOPE-1123] - Enduser UserRequestValidator NPE on custom form empty sections
    * [SYNCOPE-1125] - Password on external resource not updated via Enduser
    * [SYNCOPE-1127] - Membership attribute values are not shown
    * [SYNCOPE-1128] - Content exporter does not sort for internal foreign keys
    * [SYNCOPE-1130] - NPE refreshing realm page after realm creation
    * [SYNCOPE-1131] - Cannot delete resources owned by realms
    * [SYNCOPE-1133] - Search panel used for relationships definition does not work
    * [SYNCOPE-1134] - Action menu not working after page refresh
    * [SYNCOPE-1135] - Groups list not refreshing after realm change
    * [SYNCOPE-1139] - StackOverflowError while serializing AuditEntry after propagation
    * [SYNCOPE-1140] - Error when trying to assign a relationship
    * [SYNCOPE-1141] - Error when getting /numbers with application/xml
    * [SYNCOPE-1149] - Access token still required for the third party JWT SSO integration scenario
    * [SYNCOPE-1150] - Invalid property set for propagation task modal page header
    * [SYNCOPE-1151] -  Glinch in the root realm information
    * [SYNCOPE-1158] - Misleading Push Task reports
    * [SYNCOPE-1162] - Change to Connector's display name not reflected by contextual menu
    * [SYNCOPE-1163] - External Resource priority is never NULL
    * [SYNCOPE-1166] - No propagation task is created for resources where the password is not propagated
    * [SYNCOPE-1168] - Encryptor pads short secret keys with "0" instead of random characters
    * [SYNCOPE-1169] - Operation not supported error when trying to run a bulk action for users 
    * [SYNCOPE-1170] - Can't remove a "Dynamic USER assignment"
    * [SYNCOPE-1174] - NPE in AccessTokenDataBinderImpl if no 'jwt.lifetime.minutes' schema is present
    * [SYNCOPE-1175] - Password Reset Token Generation Not Working After Upgrading to 2.0.4
    * [SYNCOPE-1178] - PlainSchema page empty while self update on Enduser 
    * [SYNCOPE-1179] - JWT "Date" claims are interpreted using milliseconds instead of seconds
    * [SYNCOPE-1180] - No e-mail debug output
    * [SYNCOPE-1184] - In the "Attributes to be displayed" sellection show the ones already displayed by default
    * [SYNCOPE-1188] - NPE Message while saving Dynamic Realm with empty key
    * [SYNCOPE-1189] - Realms page not accessible when user has permissions on dynamic realms
    * [SYNCOPE-1190] - Username not refreshed on toggle menu after user update
    * [SYNCOPE-1193] - Add the option to update a user via REST by using the username as key
    * [SYNCOPE-1199] - Syncope performance: AnyObjectTO's creation time grows with it's quantity
    * [SYNCOPE-1203] - Not possible to add provision rules for "Realm" type
    * [SYNCOPE-1205] - Serialization exception in the logs when editing users pending approval
    * [SYNCOPE-1206] - Dynamic membership updates not considered for provisioning during update
    * [SYNCOPE-1207] - Audit: incorrect output element reported for Pull Tasks
    * [SYNCOPE-1210] - Random password generation fails for push tasks
    * [SYNCOPE-1211] - syncope migration 1.2 to 2.0 users blocked to 200
    * [SYNCOPE-1213] - Syncope console should advice user about exceeded file size
    * [SYNCOPE-1214] - Error when sorting Users by Realm
    * [SYNCOPE-1215] - Multivalue readonly fields allow frontend deletion
    * [SYNCOPE-1216] - Upgrade to Spring 5
    * [SYNCOPE-1217] - Using the JAVA API is possible to create a Realm with the same name in the same parent realm
    * [SYNCOPE-1222] - Unwanted delete from External Resources on Membership removal
    * [SYNCOPE-1223] - Cannot search for values containing comma
    * [SYNCOPE-1224] - CLI: user "all" operations limited to 25 users
    * [SYNCOPE-1226] - List the attributes to be displayed show deleted attributes
    * [SYNCOPE-1227] - Password template not nullable after setting
    * [SYNCOPE-1229] - Pull task execution bulk delete fails
    * [SYNCOPE-1230] - Bad toggle handling during task execution delete
    * [SYNCOPE-1231] - Hidden columns in bulk action resul modal page
    * [SYNCOPE-1232] - AnyType removal does not check for existing AnyObjects
    * [SYNCOPE-1233] - NullPointerException in Topology after creating a connector with no displayName using pure REST call
    * [SYNCOPE-1235] - Unlink or unassign Group from External Resource resets dynamic membership conditions
    * [SYNCOPE-1236] - Pagination error for executed tasks
    * [SYNCOPE-1239] - Missing specified plain attr values if plain attr step is the last one of the any management wizard
    * [SYNCOPE-1241] - Under high load propagation after pull might fail
    * [SYNCOPE-1244] - Error creating bean with name 'logicInitializer' on startup related to quartz clustering 
    * [SYNCOPE-1246] - Group membership search stucks with several thousands of groups
    * [SYNCOPE-1247] - Group search and auto-completion does not work with several thousands of groups
    * [SYNCOPE-1248] - Password policy history error when the user is updated before being approved
    * [SYNCOPE-1250] - Missing attributes layout order
    * [SYNCOPE-1251] - UserTO variable is not updated during Update Activiti Task
    * [SYNCOPE-1252] - Search failing for non-string attributes from Admin Console
    * [SYNCOPE-1253] - Pulled users have password set even if no mapping was provided
    * [SYNCOPE-1254] - Cannot create new connector instances from Admin Console
    * [SYNCOPE-1257] - USER search by GROUP does not work if group name has spaces
    * [SYNCOPE-1261] - When starting with empty database and no ConnInstances in Content.xml no bundles are reported as available
    * [SYNCOPE-1263] - REST invocation with invalid JWT string returns 500
    * [SYNCOPE-1265] - SAML 2.0 IdP cache empty until either new is imported or SAML2IdPService#list is invoked
    * [SYNCOPE-1266] - Multivalue binary attributes leads to OutOfMemory exception
    * [SYNCOPE-1269] - Cannot specify validator for Configuration Parameters
    * [SYNCOPE-1272] - Export of the report always returns the result of the last execution
    * [SYNCOPE-1275] - Add the possibiliy to delete a job
    * [SYNCOPE-1276] - Link or assign Group from External Resource resets dynamic membership conditions
    * [SYNCOPE-1282] - Search schema error
    * [SYNCOPE-1285] - Quartz db init on HA environments occurs on all nodes
    * [SYNCOPE-1288] - Propagation tasks list not keeping order while browsing pages
    * [SYNCOPE-1290] - Deletion of only schema entry breaks schema UI
    * [SYNCOPE-1291] - Cannot login again into Admin Console after Session Expired
    * [SYNCOPE-1293] - Default password reset notifications not working
    * [SYNCOPE-1294] - Plainschema panel doesn't display the assigned validator class
    * [SYNCOPE-1296] - Eclipse Plugin OSGI Dependency Issue
    * [SYNCOPE-1297] - Select all + bulk button redirecting to top of the page on click
    * [SYNCOPE-1298] - Quartz jobs with no matching Task or Report not visible from Admin Console
    * [SYNCOPE-1301] - Token creation is not threadsafe
    * [SYNCOPE-1303] - Content migration from 1.2 problems
    * [SYNCOPE-1304] - Order Groups by userOwner throws DataIntegrityViolation exception
    * [SYNCOPE-1306] -  Date value without a conversion pattern not shown by Admin Console
    * [SYNCOPE-1307] - Wrong export order for Realms
    * [SYNCOPE-1308] - Exception getting users with orderBy on SyncopeClient API with Postgres 10.3
    * [SYNCOPE-1309] - Enduser UI does not remove Access Token on Finish
    * [SYNCOPE-1312] - Console CSS is depending from Google fonts
    * [SYNCOPE-1314] - Bulk action from reconciliation section ever shows NOT ATTEMPTED after provision
    * [SYNCOPE-1315] - Propagation task sorting by Object Type not working as expected
    * [SYNCOPE-1317] - RuntimeException when remove all schemas
    * [SYNCOPE-1318] - Future task rejected from ScheduledThreadPoolExecutor
    * [SYNCOPE-1319] - Pull Task template not assigning roles
    * [SYNCOPE-1320] - Push task report generation fails in case of IgnoreProvisionException
    * [SYNCOPE-1321] - Search doesn't work for date attributes with conversion pattern with time zone
    * [SYNCOPE-1326] - Wizard generates unnecessary attrPatch when the field is empty

** New Feature
    * [SYNCOPE-152] - Support SCIM REST API
    * [SYNCOPE-882] - Log viewer
    * [SYNCOPE-956] - Allow for scripted customizations
    * [SYNCOPE-1015] - User Authentication using email
    * [SYNCOPE-1018] - Social registration for Enduser UI
    * [SYNCOPE-1035] - JWT-based access to REST services
    * [SYNCOPE-1041] - SAML 2.0 Service Provider feature
    * [SYNCOPE-1054] - Replace Activiti-based workflow adapter with Flowable
    * [SYNCOPE-1077] - Extension: Elasticsearch-based search engine
    * [SYNCOPE-1095] - Provide preview for JSON and XML binary field
    * [SYNCOPE-1129] - Third Party JWT SSO integration
    * [SYNCOPE-1144] - Customizable Audit appender
    * [SYNCOPE-1145] - Connector and Resource configuration versioning
    * [SYNCOPE-1249] - Support for mustChangePassword mapping
    * [SYNCOPE-1256] - Docker images
    * [SYNCOPE-1259] - Japanese translation for Admin console & Enduser UI
    * [SYNCOPE-1270] - OpenID Connect client feature
    * [SYNCOPE-1279] - Provide live updates from running tasks and reports
    * [SYNCOPE-1281] - Privilege management
    * [SYNCOPE-1283] - Support Azure AD
    * [SYNCOPE-1287] - Remediation
    * [SYNCOPE-1289] - REST: support YAML payloads
    * [SYNCOPE-1310] - Support SCIM v1.1
    * [SYNCOPE-1316] - Support ServiceNow

** Improvement
    * [SYNCOPE-470] - Implement correlation rule management for push task
    * [SYNCOPE-681] - i18n labels for schema names
    * [SYNCOPE-773] - Allow in-place edit in Job dashboard widget
    * [SYNCOPE-779] - Use Kendo UI Boostrap DateTimePicker
    * [SYNCOPE-938] - Use Java 8 language features
    * [SYNCOPE-948] - Optionally provide schema information with attribute values
    * [SYNCOPE-949] - Leave WebApplicationException to default processing
    * [SYNCOPE-952] - Provide realm management to enduser
    * [SYNCOPE-958] - Enduser improvements
    * [SYNCOPE-959] - Specify working domain in enduser.properties
    * [SYNCOPE-960] - Make the breadcrumb in creation navigable only when the Finish page has been reached
    * [SYNCOPE-971] - Case insensitive search
    * [SYNCOPE-972] - Make Syncope Enduser template responsive
    * [SYNCOPE-978] - Add sample REST external resource
    * [SYNCOPE-983] - Search performance improvement with mandatory schemas only
    * [SYNCOPE-989] - Upgrade FOP to 2.1
    * [SYNCOPE-991] - Improve user password management / resource management
    * [SYNCOPE-996] - Replace Angular Bootstrap DateTimePicker with Kendo UI DateTimePicker
    * [SYNCOPE-1005] - Schema sorting should be done on JS side 
    * [SYNCOPE-1009] - Enduser must provide an easy way to enable/disable visualization and sorting of USER attributes
    * [SYNCOPE-1020] - Support for BPMN call activity
    * [SYNCOPE-1028] - Improve usability of the modal window for provision rules
    * [SYNCOPE-1029] - Change modal window title and button bars background
    * [SYNCOPE-1031] - Hide key when creating / editing Security Questions from Admin Console
    * [SYNCOPE-1047] - Replace ActionLinksPanel with TogglePanel
    * [SYNCOPE-1050] - Allow easier extension of REST interface exposed to AngularJS
    * [SYNCOPE-1053] - Show actual pending modifications during approval
    * [SYNCOPE-1058] - Do not show time picker and values for date-only schemas
    * [SYNCOPE-1059] - Remove final landing page after user create/update
    * [SYNCOPE-1061] - Support SAML 2.0 Redirect profile
    * [SYNCOPE-1063] - Incomplete title for modal windows from Topology
    * [SYNCOPE-1064] - Improve security of customization mechanism
    * [SYNCOPE-1067] - More flexible delegated administration model
    * [SYNCOPE-1068] - Console: CSRF protection
    * [SYNCOPE-1072] - Display or enable add button only to realms were CREATE is owned
    * [SYNCOPE-1073] - Hide realm management if no realm entitlement are owned
    * [SYNCOPE-1074] - Realm navigator: show only relevant realms for delegated admin
    * [SYNCOPE-1083] - ConnInstance location is not normalized
    * [SYNCOPE-1084] - Switch to HikariCP for Core's default DataSource definitions
    * [SYNCOPE-1086] - Avoid to read whole entities to check ETag
    * [SYNCOPE-1087] - Avoid to read input entities if no notification or audit are requested
    * [SYNCOPE-1088] - Store authorizations with access tokens
    * [SYNCOPE-1093] - Add some feedbacks when linking not existing groups/resources to existing user
    * [SYNCOPE-1096] - Download button should be disabled while populating for the first time a binary attribute
    * [SYNCOPE-1097] - Downloaded file for binary attribute better naming
    * [SYNCOPE-1100] - Provide JWT expiration information to self
    * [SYNCOPE-1103] - Option to disable Quartz instances across cluster
    * [SYNCOPE-1106] - Remove misleading getAttrMap and similar methods from TOs
    * [SYNCOPE-1115] - Display attributes for propagation tasks
    * [SYNCOPE-1117] - Make it more obvious that the jwsKey needs to be changed
    * [SYNCOPE-1118] - Update docs to explain what "anonymousKey" refers to
    * [SYNCOPE-1119] - Make it more obvious that the default admin password needs to be changed
    * [SYNCOPE-1120] - Use the standard Bearer Authorization header for JWT tokens
    * [SYNCOPE-1124] - Support functions for internal JEXL engine
    * [SYNCOPE-1126] - Include realms into the Explore Resource feature
    * [SYNCOPE-1136] - Groups list reset always after realm change
    * [SYNCOPE-1138] - Update RelationshipTO to also report the "left" end of a relationship
    * [SYNCOPE-1143] - Fine-grained administration rights for Connector and Resources
    * [SYNCOPE-1146] - On-the-fly creation of unmatched users logging via SAML 2.0
    * [SYNCOPE-1147] - Extend SAML 2.0 IdP mapping to Roles
    * [SYNCOPE-1148] - SAML-initiated self-registration
    * [SYNCOPE-1152] - Clear out unneeded anonymous authenticated services
    * [SYNCOPE-1153] - Push Tasks result to show "no operation" when operation is not enabled 
    * [SYNCOPE-1154] - Edit resource to show always in the same order in list of object provision rules
    * [SYNCOPE-1155] - Hard-coded /syncope-enduser HTTP subcontext
    * [SYNCOPE-1159] - Allow to set Realm for Push Tasks
    * [SYNCOPE-1164] - Complete mapping for Realm provisioning
    * [SYNCOPE-1165] - Switch the default password cipher algorithm from SHA1 to SSHA256
    * [SYNCOPE-1167] - Preliminary AnyType selection when adding new provision rule
    * [SYNCOPE-1171] - Skip Relationships page when no relationship types exist
    * [SYNCOPE-1172] - Error message of "Malformed Path" could be made a little clearer
    * [SYNCOPE-1173] - Replace List<String> dynGroups with List<MembershipTO> dynMemberships
    * [SYNCOPE-1176] - Edit provisioning rules menu is flat and not toggle
    * [SYNCOPE-1177] - Configuration Parameter deletion should ask for confirmation
    * [SYNCOPE-1182] - Use Remote Key in the Mapping to fetch external entities
    * [SYNCOPE-1183] - Realm attribute available (as a detail) to use as a column in the "realm view" object list
    * [SYNCOPE-1185] - Further validate SAML responses with CXF's SAMLSSOResponseValidator
    * [SYNCOPE-1192] - Provide latest GIT commit hash alongside with version number
    * [SYNCOPE-1194] - Sign the SAML SSO Service Provider Metadata
    * [SYNCOPE-1196] - Binary previewer also for configuration parameters
    * [SYNCOPE-1197] - Enduser console doesn't specify "SAML 2.0" as per the admin console
    * [SYNCOPE-1198] - Make the signature algorithm configurable for SAML SSO
    * [SYNCOPE-1200] - Allow to update user data during approval
    * [SYNCOPE-1201] - Allow AnyType-based conditions for DynRealms
    * [SYNCOPE-1202] - Support IdP Initiated SAML SSO
    * [SYNCOPE-1212] - Allow for easier Pull / Push processes customization
    * [SYNCOPE-1225] - Search funcionality in Schemas
    * [SYNCOPE-1228] - Parent should be passed once for Realm create
    * [SYNCOPE-1234] - SyncDelta pre-processing
    * [SYNCOPE-1237] - Copy table row element key to clipboard by clicking on its name in toggle menu
    * [SYNCOPE-1238] - Terminate Topology background checks once completed
    * [SYNCOPE-1242] - Simple way to see elements full text value in Palette Panels
    * [SYNCOPE-1243] - Add information to GroupTO about user and AnyObject membership counts
    * [SYNCOPE-1255] - Dynamic group/role create/update can result in timeout error in case of a great number of members
    * [SYNCOPE-1267] - Provide check of mimetypes before generate a binary attribute preview
    * [SYNCOPE-1274] - Report required and read-only payload properties in OpenApi spec
    * [SYNCOPE-1280] - Better job interrupt
    * [SYNCOPE-1292] - Use Remote Key during Pull to match internal entities
    * [SYNCOPE-1295] - Create a structured wizard to edit SCIM 2.0 configuration 
    * [SYNCOPE-1299] - Manual reconciliation
    * [SYNCOPE-1300] - Resource: ignoreCase match
    * [SYNCOPE-1302] - New expression model in mapping for internal attributes to access user relationships
    * [SYNCOPE-1311] - Support to save ids generated by identity repositories upon create
    * [SYNCOPE-1322] - Get available tasks from workflow definition
    * [SYNCOPE-1323] - Upgrade to Wicket 8
    * [SYNCOPE-1324] - Have I Been Pwned password rule
    * [SYNCOPE-1328] - Need option to configure the encryption algorithm used to generate JWT.
    * [SYNCOPE-1329] - JWT: need support for asymmetric key

** Wish
    * [SYNCOPE-1161] - Option to clone a resource

** Task
    * [SYNCOPE-962] - Upgrade to Wicket 7.5.0
    * [SYNCOPE-1080] - Update swagger-jaxrs dependency to 1.5.13
    * [SYNCOPE-1204] - Upgrade Migration code and guide
    * [SYNCOPE-1208] - MIgrate to JUnit 5
    * [SYNCOPE-1262] - Upgrade to Swagger UI 3.0
    * [SYNCOPE-1327] - Enable build with Java 10
