In a Confluence user macro, I have access to the Tiny URL of a Confluence page. I'd like to get the ID of that Page, ultimately so I can iterate the descendents of that Page. So, something like:
#set($url='http://localhost/x/9_PXEg')
#set($page=$GET_PAGE($url))
#set($descendents=$pageManager.getDescendents($page))
## use $descendents...
I *thought* that the final six characters of the tiny url were the page id, Base64 encoded. But this does not work:
#set($url='http://localhost/x/9_PXEg')
#set($base64=$stringUtils.substringAfterLast($url, "/"))
#set($idString=$generalUtil.base64Decode($base64))
$idString
The Base64 decoder cannot handle the six character string, even though it was generated by the same instance of Confluence. So it seems it's not simply a Base64 number.
I found a solution. It's rather ugly, but it works. Suggestions for streamlining this would be very welcome!
#set($url="http://localhost/x/9_PXEg")
#set($tinyUrlClass=$action.class.forName('com.atlassian.confluence.pages.TinyUrl'))
#set($stringClass=$action.class.forName('java.lang.String'))
#set($constructor=$tinyUrlClass.getConstructor($stringClass))
#set($identifier=$stringUtils.substringAfterLast($url, "/"))
#set($tinyUrl=$constructor.newInstance($identifier))
#set($pageId=$tinyUrl.getPageId())
#set($page=$pageManager.getPage($pageId))
#set($descendents=$pageManager.getDescendents($page))
Hi Damon,
You're on the right track... they are base64 encoded, but they are encoded as a bytestring. You may have some luck referencing this answer:
or maybe if I have time later today I can try to reimplement in a user macro.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.