The Sitecore Shibboleth Login module – SSO one header at a time

When you start using Sitecore as an intranet you inevitably must face the identity management scenario: where are the users who are visiting the intranet going to be stored?

In most established organizations, a centralized identity management system is already in place. For a recent project, I came across the need to get Sitecore to act as a Shibboleth Service Provider and perform Single Sign-on (SSO) with a Shibboleth Identity Provider.

Shibboleth itself handles most of the heavy lifting, but there are some steps to force Sitecore to get out of Shibboleth’s way. Also, once you actually authenticate to Shibboleth you still need to authenticate to Sitecore with the header details you receive.

Enter the Shibboleth Login module, now available for download on my GitHub repository: https://github.com/jst-cyr/SitecoreShibbolethLogin

The module will get inject a pipeline handler to read the headers from Shibboleth and log in a virtual user for you with the information from the identity provider.

This has been tested against Sitecore 8.2 update 2, but I’m fairly certain that the API calls I made should work across other 8.x versions. Let me know if you find a problem getting it set up!

A first look at IBM Bluemix

On Thursday evening, I got my first taste of this hip and happening Internet of Things (IoT) by attending a workshop at the Ottawa IBM campus organized by Hacking Health Ottawa. The workshop was centered on getting folks ready for a hackathon coming up in April where we will focus on the use of IoT technology and cloud services to improve health care services. I had little knowledge of this stuff and had no idea what to expect…

Continue reading A first look at IBM Bluemix

Sitecore 8.2 ProtectedImageLinkRenderer throws “Length cannot be less than zero” exception

I ran into this particular bug when upgrading a client to Sitecore 8.2 update 2. Whenever a RichText block had both a link to a media document (like a PDF) and an anchor with no HREF the processing pipelines that update the HREF links would blow up. For those who may google it in the future, here are the details!

Exception

18340 14:00:52 ERROR A rendering error occurred: Xsl file could not be processed (details: System.Xml.Xsl.XslTransformException: An error occurred during a call to extension function 'field'. See InnerException for a complete description of the error. ---> System.ArgumentOutOfRangeException: Length cannot be less than zero.
Parameter name: length
 at System.String.Substring(Int32 startIndex, Int32 length)
 at Sitecore.Pipelines.RenderField.ProtectedImageLinkRenderer.ReplaceReference(String tagHtml, String urlAttribute)
 at Sitecore.Pipelines.RenderField.ProtectedImageLinkRenderer.HashReferences(String renderedText, String tagName, String urlAttribute)
 at Sitecore.Pipelines.RenderField.ProtectedImageLinkRenderer.Process(RenderFieldArgs args)
 at (Object , Object[] )
 at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
 at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
 at Sitecore.Web.UI.WebControls.FieldRenderer.RenderField()
 at Sitecore.Xml.Xsl.XslHelper.field(String fieldName, XPathNodeIterator iterator, String parameters)
 --- End of inner exception stack trace ---
 at System.Xml.Xsl.Runtime.XmlExtensionFunction.Invoke(Object extObj, Object[] args)
 at System.Xml.Xsl.Runtime.XmlQueryContext.InvokeXsltLateBoundFunction(String name, String namespaceUri, IList`1[] args)
 at <xsl:template match="*">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator {urn:schemas-microsoft-com:xslt-debug}current)
 at Root(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime)
 at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer)
 at Mvp.Xml.Common.Xsl.MvpXslTransform.TransformToWriter(XmlInput defaultDocument, XsltArgumentList xsltArgs, XmlWriter xmlWriter)
 at Mvp.Xml.Common.Xsl.MvpXslTransform.Transform(XmlInput input, XsltArgumentList arguments, XmlOutput output)
 at Sitecore.Web.UI.WebControls.XslFile.DoRender(HtmlTextWriter output, Item item))

Cause

The ProtectedImageLinkRenderer looks for media links and updates the HREF with a correct value for output. The current code in this renderer, however, doesn’t know how to process an anchor tag that has no HREF attribute. You can reproduce this scenario with a clean vanilla install of Sitecore and the following markup in the rich text field of the default home page that is installed:

<p><a>Empty HREF</a></p>
<p><a href="-/media/094AED0302E7486880CB19926661FB77.ashx">Media link</a></p>

Solution

An easy solution is to get rid of empty anchors in your content. However, you may not know how many of these anchors are in your solution. If you’ve upgraded from a previous version where this combination of anchors worked, you may not have the time or ability to clean up all the links.

Alternatively, you can patch the pipeline with your own version and add the following check in to escape the method for empty anchor tags:

//Handle empty tags
if (!tagHtml.Contains(urlAttribute))
  return tagHtml;
I have an open support ticket with Sitecore for an official patch. I’ll update this when I receive it.
UPDATE (March 1st, 2017): Here’s the official Sitecore patch: https://github.com/SitecoreSupport/Sitecore.Support.149817/releases/tag/8.2.2.0
UPDATE (May 5th, 2017): The GitHub repos seem to be private now (thanks for the heads up @JLDeveloper27!), so you’ll need to contact Sitecore Support to ask for the fix. Ask for the Sitecore.Support.149817 bug fix for version 8.2.2.0. You can provide the GitHub repo link to support if that helps.

Affected versions

I tested this starting at 8.2 update 2 and going back to 8.0 Service Pack 1. Sitecore 8.0 and 8.1 seem unaffected, but all versions of 8.2 will simulate this bug.

Sitecore announces 2017 MVPs

With a new year upon us, the time has come again: Sitecore has announced the 2017 MVPS! I was again honoured to see my name on the list for the fourth year in a row. You can see the full list of 2017 MVPs on the Sitecore MVP site. There are also some fancy stat infographics posted today!

I am glad to be one of the 215 Technologist MVPs around the world, and one of only 13 MVPs in all of Canada!

canada-awesome

With my fourth season on the MVP list ahead of me, I once again must push myself to face a new challenge. This past year I tackled my goal of creating something new for the community with the Sitecore Role Configs. While I only had time to create it for the 8.0 versions, hopefully it provided a few folks out there with something to help manage the complex on/off procedures required for role configuration of instances.

I also tackled my goal of trying my hand at some video content with the Sitecore Burst series. The experiment allowed me to play once more with some video editing. It was a lot of fun to get involved in writing, recording, and editing with my colleague and fellow 2017 MVP Grant Bartlett.

For this coming year, I’d like to get back to some more speaking engagements but I particularly want to dig into the new Sitecore PaaS offering and figure out what we can do there. For the longest time, I’ve recommended IaaS for an Azure deployment because it was simply more reliable than the old Azure offering from Sitecore. However, the new PaaS offering looks pretty awesome and I’m hoping this year I can have a bunch of cloud fun!

Six of my colleagues at nonlinear also received this prestigious award. If you are interested in reading more, below are some of the official press releases that our team put together. Congratulations team!

Trello acquired by Atlassian

If you use Trello (and there are more than 19 million of us that do) you have probably heard about the acquisition of Trello by Atlassian. While Trello will essentially still be what it is today, the team behind Trello now has some serious R&D backing.

As somebody who uses the Atlassian stack of tools daily, and also a lover of Trello, this is some pretty sweet news. I’m looking forward to seeing what integrations these teams come up with for the tool set!

TechCrunch reports that the acquisition has a value of $425 million, with $360 million in cash and the rest in shared/options. Things get official on March 31st.

The official news from Atlassian and Trello:

Twelfth day of Christmas… Deployment memes!

On the twelfth day of Christmas, my true blog gave to me… twelve Deployment memes!

eleven blogs a-plenty, ten women of Sitecore, nine sessions of trainingeight tweets a-tweetingseven VSTS featuressix GIFS a-dancingfive Golden Rules!
Four Community Sitesthree Maturity Modelstwo Sitecore PaaS features, and Sitecore in a NuGet feed.

Last year I brought you an installment of Sitecore memes, and this year my webinar on Continuous Integration and Deployment allowed me to round up a whole new set of memes. Here is the 2016 list of Deployment memes!

Continue reading Twelfth day of Christmas… Deployment memes!

Eleventh day of Christmas… Blogs A-Plenty!

On the eleventh day of Christmas, my true blog gave to me… eleven re-blogged posts!

ten women of Sitecorenine sessions of trainingeight tweets a-tweetingseven VSTS featuressix GIFS a-dancingfive Golden Rules!
Four Community Sitesthree Maturity Modelstwo Sitecore PaaS features, and Sitecore in a NuGet feed.

As a fun twist, each post has been given a new classic ‘link-bait’ title. You won’t believe your eyes!

  1. Three Easy Sitecore Instance Role Configurations
  2. Six Steps to custom TDS Post Deploy Steps
  3. Need Continuous Everything now? Read more!
  4. 7 Sitecore Burst videos… number 4 will surprise you!
  5. You wouldn’t believe what happened at Sitecore Symposium!
  6. This Big Bad Wolf won’t scare you after you read this post
  7. Are you using VSTS and NuGet? You need to read this now!
  8. Got Sitecore? Want HTTP/2? Your IT team is probably telling you no. Here’s why!
  9. Multi-tenant? Multi-site? And SSL? With Sitecore? Yes you can!
  10. I hate best practices and so do you (okay, so this one was already pretty link-baity…)
  11. Can’t find the roles in your TDS package? Read this to unlock the secret.

Swimming against the waterfall…