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

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
