Fixed the Alfresco-Ringside File Upload Problem

I’ve been playing with Ringside‘s Social Application Server. In my initial post on the subject I mentioned I was having trouble with the file upload. I got that put to bed this evening. As it turns out, Facebook inserts some hidden fields into form tags (see doc) such as the Facebook user, API key, session key, and app ID. Ringside doesn’t insert those fields.

Why does this matter? When you post a multipart form (i.e., a file upload) in a Facebook app, you don’t post to the canvas URL, you post to the application directly, which in this case is an Alfresco web script. All other posts go through the canvas URL and by the time they arrive at the web script, the request has the parameters it needs to make Alfresco’s Facebook web script runtime happy. In Ringside, the file upload post lacks that context because the hidden fields are missing. Alfresco needs those hidden fields–without them, the script has no idea which Facebook app is posting the data.

The fix was easy enough. I just inserted the hidden fields into the form via the Freemarker template (adddocdialog.post.fbml.ftl). The “facebook” root object knows the user, API, and app ID because the form gets displayed as the result of a canvas post.

Here are the hidden fields I added to form in the Freemarker template:

<input type="hidden" name="fb_sig_user" value="${facebook.user}" /><input type="hidden" name="fb_sig_session_key" value="${facebook.sessionKey}" /><input type="hidden" name="fb_sig_api_key" value="${facebook.apiKey}" />

The only other change I made was to comment out the postUserAction call in adddoc.post.js. I’m not sure that’s supported yet in Ringside. If it is, there’s some other problem causing it to choke.

So, other than the user action post, the Alfresco Document Library Facebook app is fully-functional in Ringside.

The next step is deeper integration into the web client. I know Alfresco is moving toward more social networking features in the 3.x release, but integrating with Ringside via web scripts might be a way to get there faster with more functionality.