From fa5cdf1f5b76af0780fd06b3f463268edf991fa6 Mon Sep 17 00:00:00 2001 From: Brian Remmington Date: Fri, 22 Jul 2011 10:44:32 +0000 Subject: [PATCH] Publishing: - Return JSON status in response to authform.post - Remove authstatus webscript - Add icon URL to channel type data on REST API - Add authorise status to channel data on REST API - Add delete channel to REST API - Altered get icon operation on channel type so the required size can be specified freely (previously limited to known sizes) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29275 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../publishing/authcallback.get.desc.xml | 4 +- .../publishing/authcallback.get.html.ftl | 5 ++ .../publishing/authform.get.desc.xml | 2 +- .../publishing/authform.post.desc.xml | 20 ++++- .../publishing/authform.post.json.ftl | 6 ++ .../publishing/authstatus.get.desc.xml | 48 ----------- .../publishing/authstatus.get.json.ftl | 10 --- .../publishing/channel-type-icon.get.desc.xml | 2 +- .../publishing/channels.delete.desc.xml | 34 ++++++++ .../publishing/channels.get.desc.xml | 1 + .../publishing/channels.post.json.ftl | 1 - .../repository/publishing/publishing.lib.ftl | 1 + .../web-scripts-application-context.xml | 15 ++-- .../publishing/AuthCallbackWebScript.java | 49 +++-------- .../publishing/ChannelPostWebScript.java | 82 ------------------- .../ChannelTypeIconGetWebScript.java | 13 +-- ...ript.java => ChannelsDeleteWebScript.java} | 57 +++++++------ .../publishing/ChannelsPostWebScript.java | 17 ++-- .../publishing/PublishingModelBuilder.java | 30 +------ .../publishing/PublishingRestApiTest.java | 2 +- .../PublishingWebScriptConstants.java | 1 + 21 files changed, 135 insertions(+), 265 deletions(-) create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authcallback.get.html.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.post.json.ftl delete mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authstatus.get.desc.xml delete mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authstatus.get.json.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.delete.desc.xml delete mode 100644 source/java/org/alfresco/repo/web/scripts/publishing/ChannelPostWebScript.java rename source/java/org/alfresco/repo/web/scripts/publishing/{AuthStatusGetWebScript.java => ChannelsDeleteWebScript.java} (52%) diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authcallback.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authcallback.get.desc.xml index 4a67176194..96a69a74c9 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authcallback.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authcallback.get.desc.xml @@ -4,8 +4,8 @@ Used to receive authorisation callbacks from publishing service providers ]]> - /api/publishing/channel/{store_protocol}/{store_id}/{node_id}/authcallback - + /api/publishing/channels/{store_protocol}/{store_id}/{node_id}/authcallback + user required public_api diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authcallback.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authcallback.get.html.ftl new file mode 100644 index 0000000000..ff9ae7ab42 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authcallback.get.html.ftl @@ -0,0 +1,5 @@ + + +AuthStatus == ${authStatus} + + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.get.desc.xml index cb2db8700a..2ef40b4998 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.get.desc.xml @@ -3,7 +3,7 @@ - /api/publishing/channel/{store_protocol}/{store_id}/{node_id}/authform + /api/publishing/channels/{store_protocol}/{store_id}/{node_id}/authform user required diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.post.desc.xml index bfc817ee7e..d3ced1f806 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.post.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.post.desc.xml @@ -1,10 +1,12 @@ Channel Authorisation Form - /api/publishing/channel/{store_protocol}/{store_id}/{node_id}/authform - + /api/publishing/channels/{store_protocol}/{store_id}/{node_id}/authform + user required public_api @@ -22,4 +24,16 @@ The identifier of the node that represents the relevant publishing channel. + + + json + + + + + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.post.json.ftl new file mode 100644 index 0000000000..99e9ee20cd --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authform.post.json.ftl @@ -0,0 +1,6 @@ +<#-- Response to a request to create a publishing channel --> +<#escape x as jsonUtils.encodeJSONString(x)> +{ + "authStatus" : "${authStatus}", +} + diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authstatus.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authstatus.get.desc.xml deleted file mode 100644 index 9bdecd5671..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authstatus.get.desc.xml +++ /dev/null @@ -1,48 +0,0 @@ - - Authorisation status check for a new publishing channel - -
  • PENDING - we haven't finished the necessary exchanges with the service provider yet.
  • -
  • REJECTED - our request to authorise the channel has been rejected. The channel creation has failed.
  • -
  • AUTHORISED - the channel has been authorised and is now ready to be used.
  • - - ]]>
    - - /api/publishing/channel/{store_protocol}/{store_id}/{node_id}/authstatus - - user - required - public_api - - - store_protocol - The protocol of the store in which the relevant publishing channel lives. - - - store_id - The identifier of the store in which the relevant publishing channel lives. - - - node_id - The identifier of the node that represents the relevant publishing channel. - - - - - json - - - - - -
    \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authstatus.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authstatus.get.json.ftl deleted file mode 100644 index 5619b794bf..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/authstatus.get.json.ftl +++ /dev/null @@ -1,10 +0,0 @@ -<#-- Response to a request to check the authorisation status of a publishing channel --> -<#escape x as jsonUtils.encodeJSONString(x)> -{ - "data": - { - "channelId" : "${channelId}", - "authStatus": "${authStatus}", - } -} - diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channel-type-icon.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channel-type-icon.get.desc.xml index dcfea9ab2c..706da1e05e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channel-type-icon.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channel-type-icon.get.desc.xml @@ -11,7 +11,7 @@ are missing then a 400 status code is returned. ]]> - /api/publishing/channel-type/{channelType}/icon/{iconSize} + /api/publishing/channel-types/{channelType}/icon/{iconSize} user required diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.delete.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.delete.desc.xml new file mode 100644 index 0000000000..b79d3ed365 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.delete.desc.xml @@ -0,0 +1,34 @@ + + Delete specified publishing channel + + Response status indicates result: +
    +
    200
    deletion successful
    +
    400
    invalid data received from caller
    +
    401
    user doesn't have permission to delete the specified channel
    +
    404
    the specified channel cannot be found
    +
    + + ]]>
    + /api/publishing/channels/{store_protocol}/{store_id}/{node_id} + + user + required + public_api + + + store_protocol + The protocol of the store in which the relevant publishing channel lives. + + + store_id + The identifier of the store in which the relevant publishing channel lives. + + + node_id + The identifier of the node that represents the relevant publishing channel. + + +
    \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.get.desc.xml index e836184c39..16a8fc30c1 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.get.desc.xml @@ -41,6 +41,7 @@ "id": string, "name": string, "title": string, + "authorised": boolean, "channelType": { "id": string, diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.post.json.ftl index ea6e9e7467..ae16ba8c9c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.post.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.post.json.ftl @@ -4,7 +4,6 @@ "data": { "channelId" : "${channelId}", - "pollUrl": "${pollUrl}", "authoriseUrl": "${authoriseUrl}", "authCallbackUrl": "${authCallbackUrl}" } diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing.lib.ftl index a5213f8a42..18fdf0ffb7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing.lib.ftl @@ -78,6 +78,7 @@ "id": "${channel.id}", "name": "${channel.name}", "title": "${channel.title}", + "authorised": "${channel.authorised}", "channelType": <@channelTypeJSON type=channel.channelType /> } diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 42b28d68c4..5d0ead8c3f 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -1130,25 +1130,18 @@ class="org.alfresco.repo.web.scripts.publishing.ChannelsPostWebScript" parent="webscript"> + - - - - - - @@ -1168,6 +1161,12 @@ + + + + diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/AuthCallbackWebScript.java b/source/java/org/alfresco/repo/web/scripts/publishing/AuthCallbackWebScript.java index 10976b7c69..f749e94cf4 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/AuthCallbackWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/AuthCallbackWebScript.java @@ -19,46 +19,33 @@ package org.alfresco.repo.web.scripts.publishing; -import java.io.IOException; -import java.io.Serializable; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; -import org.alfresco.repo.publishing.PublishingModel; import org.alfresco.service.cmr.publishing.channels.Channel; import org.alfresco.service.cmr.publishing.channels.ChannelService; +import org.alfresco.service.cmr.publishing.channels.ChannelType; import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.namespace.QName; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.extensions.webscripts.AbstractWebScript; +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -import org.springframework.extensions.webscripts.WebScriptResponse; -public class AuthCallbackWebScript extends AbstractWebScript +public class AuthCallbackWebScript extends DeclarativeWebScript { private final static Log log = LogFactory.getLog(AuthCallbackWebScript.class); - private NodeService nodeService; private ChannelService channelService; - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - public void setChannelService(ChannelService channelService) { this.channelService = channelService; } @Override - public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException + protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { - res.setContentType("text/html"); - res.setContentEncoding("UTF-8"); - Map templateVars = req.getServiceMatch().getTemplateVars(); Map params = new TreeMap(); Map headers = new TreeMap(); @@ -87,24 +74,10 @@ public class AuthCallbackWebScript extends AbstractWebScript NodeRef channelNodeRef = new NodeRef(channelNodeStoreProtocol, channelNodeStoreId, channelNodeUuid); Channel channel = channelService.getChannelById(channelNodeRef.toString()); - if (channel.getChannelType().acceptAuthorisationCallback(channel, headers, params)) - { - Map props = new HashMap(); - props.put(PublishingModel.PROP_AUTHORISATION_COMPLETE, Boolean.TRUE); - channelService.updateChannel(channel, props); - res.getWriter().write("Authorisation granted!"); - } - else - { - Boolean authorised = (Boolean)nodeService.getProperty(channelNodeRef, PublishingModel.PROP_AUTHORISATION_COMPLETE); - if (authorised != null && !authorised) - { - //If we have not been granted access by the service provider then we - //simply delete this publishing channel - channelService.deleteChannel(channel); - } - res.getWriter().write("Authorisation denied!"); - } + ChannelType.AuthStatus authStatus = channel.getChannelType().acceptAuthorisationCallback(channel, headers, params); + + Map model = new TreeMap(); + model.put("authStatus", authStatus.name()); + return model; } - } diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/ChannelPostWebScript.java b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelPostWebScript.java deleted file mode 100644 index 3b5e791d69..0000000000 --- a/source/java/org/alfresco/repo/web/scripts/publishing/ChannelPostWebScript.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ - -package org.alfresco.repo.web.scripts.publishing; - -import java.util.Map; -import java.util.TreeMap; - -import org.alfresco.service.cmr.publishing.channels.Channel; -import org.alfresco.service.cmr.publishing.channels.ChannelService; -import org.alfresco.service.cmr.repository.NodeRef; -import org.springframework.extensions.webscripts.Cache; -import org.springframework.extensions.webscripts.DeclarativeWebScript; -import org.springframework.extensions.webscripts.Status; -import org.springframework.extensions.webscripts.WebScriptRequest; - -public class ChannelPostWebScript extends DeclarativeWebScript -{ - private ChannelService channelService; - - public void setChannelService(ChannelService channelService) - { - this.channelService = channelService; - } - - @Override - protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) - { - String channelType = req.getParameter("channelType"); - String siteId = req.getParameter("siteId"); - String channelName = req.getParameter("channelName"); - - Channel newChannel = channelService.createChannel(channelType, channelName, null); - - NodeRef channelNodeRef = newChannel.getNodeRef(); - StringBuilder urlBuilder = new StringBuilder(req.getServerPath()); - urlBuilder.append(req.getServiceContextPath()); - urlBuilder.append("/api/publishing/channel/"); - urlBuilder.append(channelNodeRef.getStoreRef().getProtocol()); - urlBuilder.append('/'); - urlBuilder.append(channelNodeRef.getStoreRef().getIdentifier()); - urlBuilder.append('/'); - urlBuilder.append(channelNodeRef.getId()); - urlBuilder.append('/'); - - String baseUrl = urlBuilder.toString(); - String pollUrl = baseUrl + "authstatus"; - String callbackUrl = baseUrl + "authcallback"; - - String authoriseUrl = channelService.getChannelType(channelType).getAuthorisationUrl(newChannel, callbackUrl); - if (authoriseUrl == null) - { - // If a channel type returns null as the authorise URL then we - // assume credentials are to be supplied to us directly. We'll point the - // user at our own credential-gathering form. - authoriseUrl = baseUrl + "authform"; - } - - Map model = new TreeMap(); - model.put("pollUrl", pollUrl); - model.put("authoriseUrl", authoriseUrl); - model.put("channelId", channelNodeRef.toString()); - - return model; - } -} diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/ChannelTypeIconGetWebScript.java b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelTypeIconGetWebScript.java index 8b89e038c5..b7005e17a5 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/ChannelTypeIconGetWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelTypeIconGetWebScript.java @@ -27,8 +27,6 @@ import java.util.Map; import org.alfresco.service.cmr.publishing.channels.ChannelService; import org.alfresco.service.cmr.publishing.channels.ChannelType; import org.alfresco.service.cmr.repository.MimetypeService; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.core.io.Resource; import org.springframework.extensions.webscripts.AbstractWebScript; import org.springframework.extensions.webscripts.WebScriptRequest; @@ -37,7 +35,6 @@ import org.springframework.util.FileCopyUtils; public class ChannelTypeIconGetWebScript extends AbstractWebScript { - private final static Log log = LogFactory.getLog(ChannelTypeIconGetWebScript.class); private ChannelService channelService; private MimetypeService mimetypeService; @@ -73,15 +70,7 @@ public class ChannelTypeIconGetWebScript extends AbstractWebScript return; } - Resource iconFile = null; - if (iconSize.equals("16")) - { - iconFile = channelType.getIcon16(); - } - else if (iconSize.equals("32")) - { - iconFile = channelType.getIcon32(); - } + Resource iconFile = channelType.getIcon(iconSize); if (iconFile == null || !iconFile.exists()) { res.setStatus(404); //Not found diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/AuthStatusGetWebScript.java b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsDeleteWebScript.java similarity index 52% rename from source/java/org/alfresco/repo/web/scripts/publishing/AuthStatusGetWebScript.java rename to source/java/org/alfresco/repo/web/scripts/publishing/ChannelsDeleteWebScript.java index 78e857e72a..9b3982890b 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/AuthStatusGetWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsDeleteWebScript.java @@ -19,52 +19,57 @@ package org.alfresco.repo.web.scripts.publishing; +import java.io.IOException; import java.util.Map; -import java.util.TreeMap; -import org.alfresco.repo.publishing.PublishingModel; +import org.alfresco.repo.security.permissions.AccessDeniedException; +import org.alfresco.service.cmr.publishing.channels.Channel; +import org.alfresco.service.cmr.publishing.channels.ChannelService; import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.springframework.extensions.webscripts.Cache; -import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.AbstractWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; +import org.springframework.extensions.webscripts.WebScriptResponse; -public class AuthStatusGetWebScript extends DeclarativeWebScript +public class ChannelsDeleteWebScript extends AbstractWebScript { - private NodeService nodeService; + private ChannelService channelService; - public void setNodeService(NodeService nodeService) + public void setChannelService(ChannelService channelService) { - this.nodeService = nodeService; + this.channelService = channelService; } @Override - protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) + public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException { Map templateVars = req.getServiceMatch().getTemplateVars(); + String channelNodeUuid = templateVars.get("node_id"); String channelNodeStoreProtocol = templateVars.get("store_protocol"); String channelNodeStoreId = templateVars.get("store_id"); - String authStatus = "REJECTED"; - NodeRef channelNodeRef = new NodeRef(channelNodeStoreProtocol, channelNodeStoreId, channelNodeUuid); - if (nodeService.exists(channelNodeRef)) + if (channelNodeStoreId == null || channelNodeStoreProtocol == null || channelNodeUuid == null) { - Boolean authComplete = (Boolean)nodeService.getProperty(channelNodeRef, PublishingModel.PROP_AUTHORISATION_COMPLETE); - if (authComplete) - { - authStatus = "AUTHORISED"; - } - else - { - authStatus = "PENDING"; - } + res.setStatus(Status.STATUS_BAD_REQUEST); + return; } - Map model = new TreeMap(); - model.put("channelId", channelNodeRef.toString()); - model.put("authStatus", authStatus); - return model; + NodeRef channelNodeRef = new NodeRef(channelNodeStoreProtocol, channelNodeStoreId, channelNodeUuid); + Channel channel = channelService.getChannelById(channelNodeRef.toString()); + if (channel == null) + { + res.setStatus(Status.STATUS_NOT_FOUND); + return; + } + + try + { + channelService.deleteChannel(channel); + } + catch (AccessDeniedException ex) + { + res.setStatus(Status.STATUS_UNAUTHORIZED); + } } } diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsPostWebScript.java b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsPostWebScript.java index b417cfba32..131ae07b72 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsPostWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsPostWebScript.java @@ -22,9 +22,11 @@ package org.alfresco.repo.web.scripts.publishing; import java.util.Map; import java.util.TreeMap; +import org.alfresco.repo.admin.SysAdminParams; import org.alfresco.service.cmr.publishing.channels.Channel; import org.alfresco.service.cmr.publishing.channels.ChannelService; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.util.UrlUtil; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; @@ -33,12 +35,18 @@ import org.springframework.extensions.webscripts.WebScriptRequest; public class ChannelsPostWebScript extends DeclarativeWebScript { private ChannelService channelService; + private SysAdminParams sysAdminParams; public void setChannelService(ChannelService channelService) { this.channelService = channelService; } + public void setSysAdminParams(SysAdminParams sysAdminParams) + { + this.sysAdminParams = sysAdminParams; + } + @Override protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { @@ -48,9 +56,8 @@ public class ChannelsPostWebScript extends DeclarativeWebScript Channel newChannel = channelService.createChannel(channelType, channelName, null); NodeRef channelNodeRef = newChannel.getNodeRef(); - StringBuilder urlBuilder = new StringBuilder(req.getServerPath()); - urlBuilder.append(req.getServiceContextPath()); - urlBuilder.append("/api/publishing/channel/"); + StringBuilder urlBuilder = new StringBuilder(UrlUtil.getShareUrl(sysAdminParams)); + urlBuilder.append("/proxy/alfresco/api/publishing/channels/"); urlBuilder.append(channelNodeRef.getStoreRef().getProtocol()); urlBuilder.append('/'); urlBuilder.append(channelNodeRef.getStoreRef().getIdentifier()); @@ -59,7 +66,6 @@ public class ChannelsPostWebScript extends DeclarativeWebScript urlBuilder.append('/'); String baseUrl = urlBuilder.toString(); - String pollUrl = baseUrl + "authstatus"; String callbackUrl = baseUrl + "authcallback"; String authoriseUrl = channelService.getChannelType(channelType).getAuthorisationUrl(newChannel, callbackUrl); @@ -72,9 +78,8 @@ public class ChannelsPostWebScript extends DeclarativeWebScript } Map model = new TreeMap(); - model.put("pollUrl", pollUrl); model.put("authoriseUrl", authoriseUrl); - model.put("channelId", channelNodeRef.toString()); + model.put("channelId", newChannel.getId()); model.put("authCallbackUrl", callbackUrl); return model; diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingModelBuilder.java b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingModelBuilder.java index 9197ea5bf2..ec00debea3 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingModelBuilder.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingModelBuilder.java @@ -21,29 +21,6 @@ package org.alfresco.repo.web.scripts.publishing; import static org.alfresco.repo.web.scripts.WebScriptUtil.buildCalendarModel; import static org.alfresco.repo.web.scripts.WebScriptUtil.buildDateModel; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CAN_PUBLISH; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CAN_PUBLISH_STATUS_UPDATES; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CAN_UNPUBLISH; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CHANNEL; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CHANNEL_NODE_TYPE; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CHANNEL_TYPE; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.COMMENT; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CREATED_TIME; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CREATOR; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.ICON; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.ID; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.MAX_STATUS_LENGTH; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.NAME; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.NODEREF; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.PUBLISH_NODES; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.SCHEDULED_TIME; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.STATUS; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.SUPPORTED_CONTENT_TYPES; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.SUPPORTED_MIME_TYPES; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.TITLE; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.UNPUBLISH_NODES; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.URL; -import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.VERSION; import static org.alfresco.util.collections.CollectionUtils.toListOfStrings; import static org.alfresco.util.collections.CollectionUtils.transform; @@ -71,7 +48,7 @@ import org.springframework.extensions.surf.util.URLEncoder; * @since 4.0 * */ -public class PublishingModelBuilder +public class PublishingModelBuilder implements PublishingWebScriptConstants { public Map buildPublishingEvent(PublishingEvent event, ChannelService channelService) @@ -122,6 +99,7 @@ public class PublishingModelBuilder //TODO Localize the title. model.put(TITLE, channel.getName()); model.put(CHANNEL_TYPE, buildChannelType(channel.getChannelType())); + model.put(CHANNEL_AUTH_STATUS, toString(channel.isAuthorised())); return model; } @@ -153,7 +131,7 @@ public class PublishingModelBuilder model.put(CAN_UNPUBLISH, toString(type.canUnpublish())); model.put(MAX_STATUS_LENGTH, type.getMaximumStatusLength()); - model.put(ICON, ""); + model.put(ICON, getUrl(type) + "/icon/"); return model; } @@ -175,7 +153,7 @@ public class PublishingModelBuilder public static String getUrl(ChannelType type) { - return "api/publishing/channelTypes/"+URLEncoder.encode(type.getId()); + return "api/publishing/channel-types/"+URLEncoder.encode(type.getId()); } public static String getUrl(Channel channel) diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingRestApiTest.java b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingRestApiTest.java index 548d3bd305..a9a2627790 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingRestApiTest.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingRestApiTest.java @@ -580,7 +580,7 @@ public class PublishingRestApiTest extends BaseWebScriptTest check(ID, jsonType, channelType.getId()); check(TITLE, jsonType, channelType.getId()); - String expUrl = "api/publishing/channelTypes/"+URLEncoder.encode(channelType.getId()); + String expUrl = "api/publishing/channel-types/"+URLEncoder.encode(channelType.getId()); check(URL, jsonType, expUrl); check(CHANNEL_NODE_TYPE, jsonType, channelType.getChannelNodeType().toString()); diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingWebScriptConstants.java b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingWebScriptConstants.java index a84c046f26..9c230abf86 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingWebScriptConstants.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingWebScriptConstants.java @@ -48,6 +48,7 @@ public interface PublishingWebScriptConstants // Channel Keys public static final String NAME = "name"; public static final String CHANNEL_TYPE = "channelType"; + public static final String CHANNEL_AUTH_STATUS = "authorised"; // Publishing Event Model Keys public static final String CHANNEL = "channel";