Hello,
I'm using Alfresco API exporer to run a query to list all files that have been "shared" with a public link. I need to be able to go through and remove that public link. What I have been doing is using this.
https://mydomain/alfresco/api/-default-/public/alfresco/versions/1/shared-links?skipCount=0&maxItems=1000
I get results of everything, but I need the actual path to where the file is and possibly from which site.
Hi:
You can do this task with JS Console, or even with a custom webscript. You can search all public documents with an alfresco fts query:
'ASPECT:"qshare:shared"
And for the list of obtained noderefs just remove the aspect.
Kind regards.
--C.
I am not familiar with using a fts query. Where and how would I go about it?
You can use below search api to get list of all shared files:
POST: http://localhost:8080/alfresco/api/-default-/public/search/versions/1/search Payload: { "query": { "query": "+TYPE:\"cm:content\" AND +ASPECT:\"qshare:shared\"", "language": "afts" } }
This will return list of files, but you are looking for display path which may not be possible to get using the v1 search api.
You would have to write a custom java/js webscript that will execute fts query and return the list of nodes. Using the returned nodes you can extract the displaypath.
You seem to be unware of fts queries and stuff. I would recommend to go through these documentations:
https://docs.alfresco.com/search-enterprise/concepts/searchsyntax-intro.html
https://docs.alfresco.com/6.2/tasks/ws-tutorials.html
Here is a sample javascript webscript, you can register it dynamically by uploading the file in "/Data Dictionary/Web Scripts Extensions/" folder in repository and refresh the webscripts.
get-shared-files.get.desc.xml
<webscript> <shortname>Get shared files information</shortname> <url>/search/get-shared-files?skipCount={skipCount}&maxCount={maxCount}</url> <authentication>admin</authentication> </webscript>
get-shared-files.get.js
main(); function main() { var skipCount = (args["skipCount"] == null || args["skipCount"] == undefined) ? 0 : args["skipCount"]; var maxCount = (args["maxCount"] == null || args["maxCount"] == undefined) ? 10000 : args["maxCount"]; var successNodes = []; var failedNodes = []; var totalNodes; var query = "+TYPE:\"cm:content\" AND +ASPECT:\"qshare:shared\""; var page = { skipCount: parseInt(skipCount), maxItems: parseInt(maxCount) }; var searchQuery = { query: query, language: "fts-alfresco", page: page }; logger.log("Executing SearchQuery: " + query) var nodes = search.query(searchQuery); totalNodes = nodes.length; logger.log("Total Nodes: " + totalNodes) for each(node in nodes) { var sharedFileDetails = []; var fileName = node.name; var nodeReference = node.nodeRef; try { logger.log("Fetching details for file: " + fileName); sharedFileDetails["fileName"] = fileName; sharedFileDetails["NodeRef"] = nodeReference; var fullDP = node.displayPath+"/"+fileName; sharedFileDetails["DisplayPath"] = fullDP; logger.log("DisplayPath: " + fullDP); successNodes[nodeReference] = sharedFileDetails; } catch (ex) { logger.log("Exception occurred: " + ex.message); failedNodes[nodeReference] = fileName + " - " + ex.message; } } model.successNodes = successNodes; model.failedNodes = failedNodes; model.totalNodes = totalNodes; }
get-shared-files.get.html.ftl
<html> <head> <title>Shared File Information</title> </head> <body> <h3>Total Folders: <#if totalNodes??>${totalNodes}<#else>-</#if></h3> <#if successNodes??> <table border="1"> <tr> <th align="center">FileName</th> <th align="center">Type And NodeRef</th> <th align="center">DisplayPath</th> </tr> <#list successNodes?keys as nodeReference> <tr> <td align="center"> ${successNodes[nodeReference].fileName}</td> <td align="center"> ${successNodes[nodeReference].NodeRef}</td> <td align="center"> ${successNodes[nodeReference].DisplayPath}</td> </tr> </#list> </table> </#if> <#if failedNodes?is_hash_ex> <table border="1"> <tr> <th align="center">NodeRef</th> <th align="center">ErrorMsg</th> </tr> <#assign keys = failedNodes ?keys> <#list keys as key> <tr> <td align="center">${key}</td> <td align="center">${failedNodes [key]}</td> </tr> </#list> </table> </#if> </body> </html>
Once the webscript is registred and refreshed, use this url to get the response:
http://127.0.0.1:8080/alfresco/service/search/get-shared-files?skipCount=0&maxCount=1000
Your result will similar to this one:
FileName | Type and NodeRef | Display Path |
Test.pdf | Node Type: cm:content NodeRef: workspace://SpacesStore/4e28d5fd-f596-4403-b61b-2501ae910e0d | /Company Home/Sites/test/documentLibrary/Test.pdf |
You can update the same webscript to remove the "qshare:shared" aspect, e.g.:
for each(node in nodes) { var sharedFileDetails = []; var fileName = node.name; var nodeReference = node.nodeRef; try { logger.log("Fetching details for file: " + fileName); sharedFileDetails["fileName"] = fileName; sharedFileDetails["NodeRef"] = nodeReference; var fullDP = node.displayPath+"/"+fileName; sharedFileDetails["DisplayPath"] = fullDP; logger.log("DisplayPath: " + fullDP); if(node.hasAspect("qshare:shared")) { node.removeAspect("qshare:shared"); } successNodes[nodeReference] = sharedFileDetails; } catch (ex) { logger.log("Exception occurred: " + ex.message); failedNodes[nodeReference] = fileName + " - " + ex.message; } }
This will remove the shared aspect and files will no more be publicly accesible.
Ask for and offer help to other Alfresco Content Services Users and members of the Alfresco team.
Related links:
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.