Changelog 6.3 beta - 6.3 final

From Sense/Net Wiki
Jump to: navigation, search

This page contains the changes in Sense/Net ECMS between versions 6.3.0.5856 (6.3 beta) and 6.3.0.6297 (6.3 final).

Download Sense/Net ECM 6.3 Community Edition: http://www.sensenet.com/download

Please note that 6.3 beta was released prior to 6.3 final. You may want to check the previous changelog for details.

Features

  • Security and robustness
    • Prepared queries and Safe queries features are designed to prevent information leak from the system.
    • Password hash provider feature: from now on we generate password hashes using a salt. This and password validation is the responsibility of the password hash provider.
    • After an upgrade you can use the Password migration feature that is able to convert password hashes stored in the repository to be usable with the new PasswordHashProvider. Hashes are converted gradually, when users sign in after the upgrade.
    • Content naming change: the default invalid name chars pattern has changed: rather stating the characters that are allowed in a content name, we state a few invalid characters and let you use everything else. We do not remove accents from now on.
    • Lucene index can not contain the 'Password' and 'PasswordHash' fields of a user. This behavior (which is hardcoded and cannot be changed) is for preventing users executing harmful queries. If a Content Query contains 'Password' or 'PasswordHash' fields, an InvalidOperationException will be thrown.
    • Content created by visitors (e.g. contact form entries) will be saved as created by an administrator to prevent visitors from seeing each others' content. This adaministrator user can be changed using the 'Owner of items created by visitor' (OwnerWhenVisitor) field on Content List.
    • Setting local only permissions: from now on it is possible to set and view local-only permissions (the ones that do not propagate to children) in the permission editor or through the OData REST API .
    • Global Settings folder is accessible only for administrators. Settings are loaded by the system and served through the server-side API. Users should not have permissions for the settings content themselves.
    • Deny cross-site access feature: accessing content from under a different site is not allowed by default. You can change this behavior on the edit page of the Site.
  • Editing documents
    • We support Microsoft Office 2013 from this version. You can open Office files from the portal or through WebDAV and edit them directly.
  • Document preview
    • All document versions (e.g. 1.0 Aproved and 1.2 Draft) have their own preview images in separate folders under the document. This means users with only preview permission will see the preview for the last major version, and administrators will see tha lates draft in the document viewer.
    • The document viewer breaks watermark text on images into multiple lines if the watermark text is too long (3 lines maximum).
    • Preview generator workflow handles heavy document load by maximizing the processor usage and the number of executing preview generation processes.
    • We store the preview status values (e.g. failed, pending, or in case of success, the page count) in the PageCount field of the document. Custom document preview generators may take advantage of this information to build a document viewer UI.
  • User interface
    • Two new field controls were added:
      • Color Picker for editing Color fields (built on Kendo UI ColorPicker)
      • Reference DropDown for displaying content in a dropdown in case of single reference fields.
  • Client side programming (OData REST API)
    • Actions and functions section in the metadata of an OData item has a "parameters" property. It contains the list of required and optional parameters (and their types) for the action (or function). Portal builders can use this information to construct OData requests for actions and functions.
    • OData $count feature is implemented to provide a raw count of a collection.
    • OData formatter is an independent pluggable unit (built using the strategy pattern) for formatting the response generated by our OData module. The actual implementation is selected by the value of the $format parameter (default: "json"). Available (built-in) formatters are: "json", "table", "xml" (metadata only).
    • Permission queries: GetRelatedItems and GetRelatedPermissions by PermissionLevel methods accept Allowed, Denied and AllowedOrDenied levels to support more sophisticated client-side permission displaying scenarios.
    • OData requests may contain a version url parameter to work with earlier versions of a content. For example ?version=V1.0.A. Only GET requests have this feature, PUT and PATCH not.
    • Reject action has a parameter called rejectReason to store the reason why the admin rejected the content.
  • Content Repository
    • Multistep saving feature and API was added to support long-running content creation (e.g. huge file upload). The document binary is not accessible while the upload is still in progress - but the previous version (the last finalized) is.
    • The repository serves the "LastFinalized" version of the node when a binary is requested. During indexing not-finalized binary (and Size) properties are skipped.
    • The Import tool can be used to delete a content. If the document element in the content metadata xml has a "delete" attribute with the value 'true', the content will be deleted during the import operation.
    • User class got a new property called LoggedInUser that returns the real logged in user even if the value of the User.Current is the SystemUser. This can be useful for logging or when you need to check permissions programmaically for the real logged in user.
    • Workflow Definition content type got a new field: Assignable to content list. This determines if the workflow can be assigned to a list or not. The previously used Content workflow field is only used when setting the related content of a workflow from now on.
  • Extension points for developers
    • Mail provider feature was added to let 3rd party developers customize how Sense/Net ECMS determines the POP3 credentials when accessing the mail server for new emails. Default implementation looks for username and password in global settings.
    • It is possible to define a custom children list programmatically for a content. This can contain real or dynamic nodes from anywhere in the repository. Developers can provide a custom array of child nodes by setting the BaseCollection property of a ChildrenDefinition of a content - content.Children will serve this array from then on.
  • Debug and maintainance
    • Message channel recovery feature: cluster channel monitor is able to detect MSMQ channel problems. It will try to recover lost channels and will log errors when needed. Administrators can define alerts specifically for these kind of events.
    • The Export tool saves the children structure into the <name>.Children folder if the content name and an attachment name are equal (this is useful when exporting documents and their preview images). The Import tool recognizes the .Children folder if the attachment name and content name are equal.
    • Transaction tracing is implemented to help administrators monitor the system. Writing "Begin", "Commit", "Rollback", Id, time into the verbose log.
    • A diagnostic feature: ?lx url parameter for getting the execution time of pages and portlets :)
    • Invalid content action throws a more meaningful exception, containing the reason - e.g. the content is checked out by someone else, or there is a missing permission. Client-side developers may use this value for more sophisticated UI messages.
    • RepositoryPathTooLongException is thrown when the user tries to save or move content with a path longer than 450 characters.
    • CSS bundle will convert small images to data URIs to lessen the number of server round-trips.

Breaking changes

Please note that in this version we made Sense/Net ECMS default permission settings a lot stricter. This means that during an upgrade you may need to refine the permission settings on your custom content (e.g. sites, applications).

  • Security hardening: Everyone and Visitor permissions have been removed from the Root content as these permissions are no longer necessary there for the system to work. This means you may need to grant some permissions for these groups on lower levels (e.g. on a Site).
  • Creation and modification properties of the Node class are renamed to be more clear. E.g. CreationDate became VersionCreationDate and NodeCreationDate became CreationDate.
  • VersionCreationDate and CreationDate properties of a node are not writable but importable.
  • Choice Field indexing: the Lucene index contains all localized values of the selected options. Option values are searchable with a '$' prefix.
  • Prepared queries: in elevated mode only checked queries are allowed (hardcoded white-list technology).
  • Permission change: Open permission is not mandatory for content views and pages to be accessible, but Run application permission is.
  • Allow application pages to be loaded without Open permission. Check for Run application permission instead.
  • Upload file extension settings has been moved to the Content Repository Settings infrastructure to be able to handle local content type differentiation by extension (this is what local settings are for).

Resolved bugs

  • Security
    • Avoiding CQL (Content Query Language) injections: user loader method does not throw any exceptions to avoid information leak.
    • throw 403 in repository file open method if the user has only See or Preview permission for a content.
    • XSS: error messages displayed on the global error pages are html encoded to prevent xss hacks.
    • Information leak eliminated: user could find any document with content query even if she had only See permission for that document. From now the document collector skips these documents.
    • Visitor could view a locked page without OpenMinor privilege.
  • Office and WebDav
    • Open in Office feature works in IE11
    • Open in Office feature is accessible only on https sites if they are Forms or None authentication types.
    • Action menu handles 'Open in office' links correctly in different browsers.
    • Editing documents in Office did not work if the document was not under a requested site.
    • Webdav works correctly when using mapped network drive.
    • Deny access for Visitors in case of webdav or office protocol requests if they have no See permissions for the content (return with 401 instead of 404).
  • Preview
    • Preview generation is stopped if the current version of the content is changed.
  • OData
    • OData filter can contain Aspect field like a Content property. Syntax: {AspectName} / {FieldName}. In older versions this feature was not implemented and 'Field not found' or "Not implemented' exception was thrown.
    • Generic odata methods are able to throw real exceptions because odata operation extracts the inner exception from targetinvocation exception.
    • OData requests did not have a proper PortalContext because of parsing of the url failed on the odata svc part. Now current node, ws, etc. are available in an odata request.
    • HeadOnly view in OData works correctly.
    • Count property of the query result object always contains correct value. This value is the total count of the query result without top and skip. In older versions Count had incorrect value if there were any invisible content or content version according to query conditions.
    • ODataHandler can now save choice fields properly.
  • Workflows
    • Registration workflow does not store initial password as clear text or any way. Only password hash is stored. The new CreateUser activity can write the new user's creation date.
    • Workflows can wake up properly and content queries are safe in the workflow engine.
    • Workflow executor component become more fault-tolerant so workflows can be executed and deleted.
    • Cleaning after workflow deletion. Orphaned lock owners are deleted.
    • A workflow is not executed multiple times in one polling period.
    • Creating workflow instance store only once. With this we avoid the LockOwnersTable growth and parallel execution of the same workflow.
    • Mail processor workflow saves attachments as specific types (with the correct content handler) instead of using the File handler.
  • Fields and Properties
    • Approvable and Publishable (GenericContent properties) return with false if the current user has only see permission. Previously this caused a Portlet error in a grid.
    • FileName property of BinaryData no longer contains the path.
    • ChoiceField sorting works correctly.
    • Type of lazy-loaded binary property value was RepositoryStream instead of BinaryPropertyValue which caused an InvalidCastException. This fix creates a new stored procedure and separates the loading of the BinaryDatavalue and its stream.
    • Swapped content list fields after copy. In the fixed version after copying the target and source field values are the same but in the node-property level maybe swapped.
    • Templated copy takes care of content list fields that may have different property names on the source and target content lists.
    • Size field caused an error for preview-only users because it relies on the binary field which is inaccessible for them. From now on Size field is inaccessible for them too (it would cause an info leak anyway).
  • Portlets
    • Parametric search portlet search template may contain parenthesis' around templates.
    • Duplicating result of context bound portlet is fixed (context node is always loaded in every portlet).
    • Youtube portlet: all the embedding modes are now supported (iframe, object, share link)
    • Null reference error is eliminated in case of empty portlet renderer in skinmanager.
    • Context search portlet adds the base query filter to its query.
    • L2Cache: Enabled property was added to support switching off the feature. ContextBoundPortlet: L2Cache switching off during getting context node.
  • Page rendering, html, http headers and URL
    • Page rendering trace feature (trace=true url parameter) is fixed.
    • Content disposition header is removed from the response in the Application_Error method.
    • SurveyItem url resolution fix, when there is no HttpContext.
    • RepositoryFile's mime type is written when OnPreSendRequestHeaders is fired instead of OnEndRequest.
    • ShowExecutionTime url parameter name is case insensitive.
  • Indexing
    • Text extracting from documents (e.g. pdf or Word files) is executed after saving the content to the Content Repository to avoid SQL deadlocks.
    • FieldInfo enums are serialized as enum name instead of enum value (e.g.: "VisibleBrowse": "Show" instead of "0").
    • Default analyzer was incorrect. From today FieldIndexHandler is responsible for providing the default Analyzer. Master default is the KeywordAnalyzer, and LongTextIndexHandler gives the StandardAnalyzer.
  • Permission system
    • Separate system and custom in-memory permission entries caused the following problem: only the first entry was found in the evaluator algorithm so the second entry's permissions kept hidden. After this correction entries that have same path, principal id and propagation will be always combined.
    • Removing all explicit permission entries. This function had a bug: only propagated entries were removed.
    • Flattened membership was incorrect after deleting group that was contained by another groups. Now the membership is recalculated after deleting a group or a user.
  • Other
    • Content add portlet displays relative urls for adding new content, instead of hardcoding the scheme and domain.
    • Cache control headers are set in a centralized way.
    • SenseNetSecurityException is logged as warning instead of error. Message is always "Access denied.". Additional data are added to exception's Data dictionary.
    • Regex option in a field configuration of a CTD reads its content as text insead of xml fragment because this value cannot be XML but the regex text may contain xml characters (e.g. <, >, & ...).
    • In Content Explorer, delete action redirects to the Explore action of the parent content.
    • Memory leak eliminated in import tool.
    • Text extract: uploading an average size PDF does not eat the memory.
    • Aspects could be saved with invalid aspect definition. This caused an error: the Content could not be loaded in any way. Now invalid aspects cannot be saved.
    • Total count of query result was 0 if the skip is bigger than the count of the original result set.
    • Bundling restriction: if the resource comes from a known url (meaning it is registered on a Site in the repository), the host is changed to 127.0.0.1 but the original host is passed to a Host property of the worker web request.
    • Upload dialog javascript gets binary chunks size value from the same configuration as the server code.
    • Missing jpeg file handler added to web.config.
    • If the Settings folder contains a content of type other than settings, it skips it silently during settings resolution.
    • Data provider indicates that move cannot be completed because of a long string data (in this case Path)
    • Uploaded chunk size is set correctly when there is only one chunk.
    • SenseNet datasource view and content store controller skip null content values to prevent the GUI from collapsing.
    • Permission editor hides unnecessary inheritance label when adding new permission entries. The search button is set as default when searching groups and users in permission editor.
    • Edit and delete links on the Details (document preview) page has a correct back url and redirect to it correctly.
    • Empty files can be uploaded from now on.
    • User load threw an access denied exception during basic authentication process. Now it is executed in elevated mode.
    • Reducing Content Explorer / Content Picker tree size (response json got smaller).
    • Using Node.ParentPath instead of Parent.Path and PortalContext.Current.ContextNodePath instead of ContextNode.Path to avoid permission errors.
    • Node can be modified even if its parent is invisible.
    • Restore previous version: if the content is locked by me, I can restore any one of the previous versions. The content will remain locked, and no new versions will be created, only the fields will be copied from the old one.

3rd party plugins

For the list of 3rd party plugins used in this release, please visit the following article:

Differences between Community and Enterprise editions

For the list of the differences between Community and Enterprise editions in this release, please visit the following article:

Related links