| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.apache.ranger.rest; |
| |
| import org.apache.commons.collections.CollectionUtils; |
| import org.apache.commons.lang.StringUtils; |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.apache.ranger.biz.AssetMgr; |
| import org.apache.ranger.biz.RangerBizUtil; |
| import org.apache.ranger.biz.ServiceDBStore; |
| import org.apache.ranger.biz.TagDBStore; |
| import org.apache.ranger.common.RESTErrorUtil; |
| import org.apache.ranger.db.RangerDaoManager; |
| import org.apache.ranger.entity.XXService; |
| import org.apache.ranger.entity.XXServiceDef; |
| import org.apache.ranger.plugin.model.RangerPluginInfo; |
| import org.apache.ranger.plugin.model.RangerService; |
| import org.apache.ranger.plugin.model.RangerServiceResource; |
| import org.apache.ranger.plugin.model.RangerTag; |
| import org.apache.ranger.plugin.model.RangerTagResourceMap; |
| import org.apache.ranger.plugin.model.RangerTagDef; |
| import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil; |
| import org.apache.ranger.plugin.store.TagStore; |
| import org.apache.ranger.plugin.store.TagValidator; |
| import org.apache.ranger.plugin.util.SearchFilter; |
| import org.apache.ranger.plugin.util.ServiceTags; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.context.annotation.Scope; |
| import org.springframework.security.access.prepost.PreAuthorize; |
| import org.springframework.stereotype.Component; |
| import org.springframework.transaction.annotation.Propagation; |
| import org.springframework.transaction.annotation.Transactional; |
| |
| import javax.annotation.PostConstruct; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.ws.rs.DELETE; |
| import javax.ws.rs.DefaultValue; |
| import javax.ws.rs.GET; |
| import javax.ws.rs.POST; |
| import javax.ws.rs.PUT; |
| import javax.ws.rs.Path; |
| import javax.ws.rs.PathParam; |
| import javax.ws.rs.Produces; |
| import javax.ws.rs.QueryParam; |
| import javax.ws.rs.WebApplicationException; |
| import javax.ws.rs.core.Context; |
| |
| import java.util.List; |
| |
| @Path(TagRESTConstants.TAGDEF_NAME_AND_VERSION) |
| @Component |
| @Scope("request") |
| @Transactional(propagation = Propagation.REQUIRES_NEW) |
| public class TagREST { |
| |
| private static final Log LOG = LogFactory.getLog(TagREST.class); |
| public static final String Allowed_User_List_For_Tag_Download = "tag.download.auth.users"; |
| |
| @Autowired |
| RESTErrorUtil restErrorUtil; |
| |
| @Autowired |
| ServiceDBStore svcStore; |
| |
| @Autowired |
| TagDBStore tagStore; |
| |
| @Autowired |
| RangerDaoManager daoManager; |
| |
| @Autowired |
| RangerBizUtil bizUtil; |
| |
| @Autowired |
| AssetMgr assetMgr; |
| |
| TagValidator validator; |
| |
| public TagREST() { |
| } |
| |
| @PostConstruct |
| public void initStore() { |
| validator = new TagValidator(); |
| |
| tagStore.setServiceStore(svcStore); |
| validator.setTagStore(tagStore); |
| } |
| |
| TagStore getTagStore() { |
| return tagStore; |
| } |
| |
| @POST |
| @Path(TagRESTConstants.TAGDEFS_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagDef createTagDef(RangerTagDef tagDef, @DefaultValue("true") @QueryParam("updateIfExists") boolean updateIfExists) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.createTagDef(" + tagDef + ", " + updateIfExists + ")"); |
| } |
| |
| RangerTagDef ret; |
| |
| try { |
| RangerTagDef exist = validator.preCreateTagDef(tagDef, updateIfExists); |
| if (exist == null) { |
| ret = tagStore.createTagDef(tagDef); |
| } else if (updateIfExists) { |
| ret = updateTagDef(exist.getId(), exist); |
| } else { |
| throw new Exception("tag-definition with Id " + exist.getId() + " already exists"); |
| } |
| } catch(Exception excp) { |
| LOG.error("createTagDef(" + tagDef + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.createTagDef(" + tagDef + ", " + updateIfExists + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| |
| @PUT |
| @Path(TagRESTConstants.TAGDEF_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagDef updateTagDef(@PathParam("id") Long id, RangerTagDef tagDef) { |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.updateTagDef(" + id + ")"); |
| } |
| if (tagDef.getId() == null) { |
| tagDef.setId(id); |
| } else if (!tagDef.getId().equals(id)) { |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST , "tag name mismatch", true); |
| } |
| |
| RangerTagDef ret; |
| |
| try { |
| ret = tagStore.updateTagDef(tagDef); |
| } catch (Exception excp) { |
| LOG.error("updateTagDef(" + id + ") failed", excp); |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.updateTagDef(" + id + ")"); |
| } |
| |
| return ret; |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.TAGDEF_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteTagDef(@PathParam("id") Long id) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteTagDef(" + id + ")"); |
| } |
| |
| try { |
| tagStore.deleteTagDef(id); |
| } catch(Exception excp) { |
| LOG.error("deleteTagDef(" + id + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.deleteTagDef(" + id + ")"); |
| } |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.TAGDEF_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteTagDefByGuid(@PathParam("guid") String guid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteTagDefByGuid(" + guid + ")"); |
| } |
| |
| try { |
| RangerTagDef exist = tagStore.getTagDefByGuid(guid); |
| if(exist!=null){ |
| tagStore.deleteTagDef(exist.getId()); |
| } |
| } catch(Exception excp) { |
| LOG.error("deleteTagDef(" + guid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.deleteTagDefByGuid(" + guid + ")"); |
| } |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGDEF_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagDef getTagDef(@PathParam("id") Long id) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagDef(" + id + ")"); |
| } |
| |
| RangerTagDef ret; |
| |
| try { |
| ret = tagStore.getTagDef(id); |
| } catch(Exception excp) { |
| LOG.error("getTagDef(" + id + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(ret == null) { |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not found", true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTagDef(" + id + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGDEF_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagDef getTagDefByGuid(@PathParam("guid") String guid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagDefByGuid(" + guid + ")"); |
| } |
| |
| RangerTagDef ret; |
| |
| try { |
| ret = tagStore.getTagDefByGuid(guid); |
| } catch(Exception excp) { |
| LOG.error("getTagDefByGuid(" + guid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(ret == null) { |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not found", true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTagDefByGuid(" + guid + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGDEF_RESOURCE + "name/{name}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagDef getTagDefByName(@PathParam("name") String name) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagDefByName(" + name + ")"); |
| } |
| |
| RangerTagDef ret; |
| |
| try { |
| ret = tagStore.getTagDefByName(name); |
| } catch(Exception excp) { |
| LOG.error("getTagDefByName(" + name + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(ret == null) { |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not found", true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTagDefByName(" + name + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGDEFS_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public List<RangerTagDef> getAllTagDefs() { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getAllTagDefs()"); |
| } |
| |
| List<RangerTagDef> ret; |
| |
| try { |
| ret = tagStore.getTagDefs(new SearchFilter()); |
| } catch(Exception excp) { |
| LOG.error("getAllTagDefs() failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(ret == null) { |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not found", true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getAllTagDefs()"); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGTYPES_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public List<String> getTagTypes() { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagTypes()"); |
| } |
| |
| List<String> ret = null; |
| |
| try { |
| ret = tagStore.getTagTypes(); |
| } catch(Exception excp) { |
| LOG.error("getTagTypes() failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTagTypes(): count=" + (ret != null ? ret.size() : 0)); |
| } |
| |
| return ret; |
| } |
| |
| |
| @POST |
| @Path(TagRESTConstants.TAGS_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTag createTag(RangerTag tag, @DefaultValue("true") @QueryParam("updateIfExists") boolean updateIfExists) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.createTag(" + tag + ", " + updateIfExists + ")"); |
| } |
| |
| RangerTag ret; |
| |
| try { |
| RangerTag exist = validator.preCreateTag(tag); |
| if (exist == null) { |
| ret = tagStore.createTag(tag); |
| } else if (updateIfExists) { |
| ret = updateTag(exist.getId(), exist); |
| } else { |
| throw new Exception("tag with Id " + exist.getId() + " already exists"); |
| } |
| } catch(Exception excp) { |
| LOG.error("createTag(" + tag + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.createTag(" + tag + ", " + updateIfExists + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @PUT |
| @Path(TagRESTConstants.TAG_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTag updateTag(@PathParam("id") Long id, RangerTag tag) { |
| |
| RangerTag ret; |
| |
| try { |
| validator.preUpdateTag(id, tag); |
| ret = tagStore.updateTag(tag); |
| } catch (Exception excp) { |
| LOG.error("updateTag(" + id + ") failed", excp); |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.updateTag(" + id + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @PUT |
| @Path(TagRESTConstants.TAG_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTag updateTagByGuid(@PathParam("guid") String guid, RangerTag tag) { |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.updateTagByGuid(" + guid + ")"); |
| } |
| |
| RangerTag ret; |
| |
| try { |
| validator.preUpdateTagByGuid(guid, tag); |
| ret = tagStore.updateTag(tag); |
| } catch (Exception excp) { |
| LOG.error("updateTagByGuid(" + guid + ") failed", excp); |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.updateTagByGuid(" + guid + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.TAG_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteTag(@PathParam("id") Long id) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteTag(" + id +")"); |
| } |
| |
| try { |
| validator.preDeleteTag(id); |
| tagStore.deleteTag(id); |
| } catch(Exception excp) { |
| LOG.error("deleteTag(" + id + ") failed", excp); |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.deleteTag(" + id + ")"); |
| } |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.TAG_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteTagByGuid(@PathParam("guid") String guid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteTagByGuid(" + guid + ")"); |
| } |
| |
| try { |
| RangerTag exist = validator.preDeleteTagByGuid(guid); |
| tagStore.deleteTag(exist.getId()); |
| } catch(Exception excp) { |
| LOG.error("deleteTagByGuid(" + guid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.deleteTagByGuid(" + guid + ")"); |
| } |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAG_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTag getTag(@PathParam("id") Long id) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTag(" + id + ")"); |
| } |
| RangerTag ret; |
| |
| try { |
| ret = tagStore.getTag(id); |
| } catch(Exception excp) { |
| LOG.error("getTag(" + id + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTag(" + id + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAG_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTag getTagByGuid(@PathParam("guid") String guid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagByGuid(" + guid + ")"); |
| } |
| RangerTag ret; |
| |
| try { |
| ret = tagStore.getTagByGuid(guid); |
| } catch(Exception excp) { |
| LOG.error("getTagByGuid(" + guid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTagByGuid(" + guid + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGS_RESOURCE + "type/{type}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public List<RangerTag> getTagsByType(@PathParam("type") String type) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagsByType(" + type + ")"); |
| } |
| List<RangerTag> ret; |
| |
| try { |
| ret = tagStore.getTagsByType(type); |
| } catch(Exception excp) { |
| LOG.error("getTagsByType(" + type + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTagsByType(" + type + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGS_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public List<RangerTag> getAllTags() { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getAllTags()"); |
| } |
| |
| List<RangerTag> ret; |
| |
| try { |
| ret = tagStore.getTags(new SearchFilter()); |
| } catch(Exception excp) { |
| LOG.error("getAllTags() failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if (CollectionUtils.isEmpty(ret)) { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("getAllTags() - No tags found"); |
| } |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getAllTags(): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @POST |
| @Path(TagRESTConstants.RESOURCES_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerServiceResource createServiceResource(RangerServiceResource resource, @DefaultValue("true") @QueryParam("updateIfExists") boolean updateIfExists) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.createServiceResource(" + resource + ", " + updateIfExists + ")"); |
| } |
| |
| RangerServiceResource ret; |
| |
| try { |
| RangerServiceResource exist = validator.preCreateServiceResource(resource); |
| if (exist == null) { |
| ret = tagStore.createServiceResource(resource); |
| } else if (updateIfExists) { |
| ret = updateServiceResource(exist.getId(), exist); |
| } else { |
| throw new Exception("resource with Id " + exist.getId() + " already exists"); |
| } |
| } catch(Exception excp) { |
| LOG.error("createServiceResource(" + resource + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.createServiceResource(" + resource + ", " + updateIfExists + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @PUT |
| @Path(TagRESTConstants.RESOURCE_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerServiceResource updateServiceResource(@PathParam("id") Long id, RangerServiceResource resource) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.updateServiceResource(" + id + ")"); |
| } |
| RangerServiceResource ret; |
| |
| try { |
| validator.preUpdateServiceResource(id, resource); |
| ret = tagStore.updateServiceResource(resource); |
| } catch(Exception excp) { |
| LOG.error("updateServiceResource(" + resource + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.updateServiceResource(" + id + "): " + ret); |
| } |
| return ret; |
| } |
| |
| @PUT |
| @Path(TagRESTConstants.RESOURCE_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerServiceResource updateServiceResourceByGuid(@PathParam("guid") String guid, RangerServiceResource resource) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.updateServiceResourceByGuid(" + guid + ", " + resource + ")"); |
| } |
| RangerServiceResource ret; |
| try { |
| validator.preUpdateServiceResourceByGuid(guid, resource); |
| ret = tagStore.updateServiceResource(resource); |
| } catch(Exception excp) { |
| LOG.error("updateServiceResourceByGuid(" + guid + ", " + resource + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.updateServiceResourceByGuid(" + guid + ", " + resource + "): " + ret); |
| } |
| return ret; |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.RESOURCE_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteServiceResource(@PathParam("id") Long id) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteServiceResource(" + id + ")"); |
| } |
| try { |
| validator.preDeleteServiceResource(id); |
| tagStore.deleteServiceResource(id); |
| } catch (Exception excp) { |
| LOG.error("deleteServiceResource() failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.deleteServiceResource(" + id + ")"); |
| } |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.RESOURCE_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteServiceResourceByGuid(@PathParam("guid") String guid, @DefaultValue("false") @QueryParam("deleteReferences") boolean deleteReferences) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteServiceResourceByGuid(" + guid + ", " + deleteReferences + ")"); |
| } |
| |
| try { |
| RangerServiceResource exist = validator.preDeleteServiceResourceByGuid(guid, deleteReferences); |
| if (deleteReferences) { |
| List<RangerTagResourceMap> tagResourceMaps = tagStore.getTagResourceMapsForResourceGuid(exist.getGuid()); |
| if (CollectionUtils.isNotEmpty(tagResourceMaps)) { |
| for (RangerTagResourceMap tagResourceMap : tagResourceMaps) { |
| deleteTagResourceMap(tagResourceMap.getId()); |
| } |
| } |
| } |
| tagStore.deleteServiceResource(exist.getId()); |
| } catch(Exception excp) { |
| LOG.error("deleteServiceResourceByGuid(" + guid + ", " + deleteReferences + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.deleteServiceResourceByGuid(" + guid + ", " + deleteReferences + ")"); |
| } |
| } |
| |
| @GET |
| @Path(TagRESTConstants.RESOURCE_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerServiceResource getServiceResource(@PathParam("id") Long id) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getServiceResource(" + id + ")"); |
| } |
| RangerServiceResource ret; |
| try { |
| ret = tagStore.getServiceResource(id); |
| } catch(Exception excp) { |
| LOG.error("getServiceResource(" + id + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getServiceResource(" + id + "): " + ret); |
| } |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.RESOURCE_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerServiceResource getServiceResourceByGuid(@PathParam("guid") String guid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getServiceResourceByGuid(" + guid + ")"); |
| } |
| RangerServiceResource ret; |
| try { |
| ret = tagStore.getServiceResourceByGuid(guid); |
| } catch(Exception excp) { |
| LOG.error("getServiceResourceByGuid(" + guid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getServiceResourceByGuid(" + guid + "): " + ret); |
| } |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.RESOURCES_RESOURCE + "service/{serviceName}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public List<RangerServiceResource> getServiceResourcesByService(@PathParam("serviceName") String serviceName) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getServiceResourcesByService(" + serviceName + ")"); |
| } |
| |
| List<RangerServiceResource> ret = null; |
| |
| try { |
| ret = tagStore.getServiceResourcesByService(serviceName); |
| } catch(Exception excp) { |
| LOG.error("getServiceResourcesByService(" + serviceName + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if (CollectionUtils.isEmpty(ret)) { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("getServiceResourcesByService(" + serviceName + ") - No service-resources found"); |
| } |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getServiceResourcesByService(" + serviceName + "): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.RESOURCE_RESOURCE + "service/{serviceName}/signature/{resourceSignature}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerServiceResource getServiceResourceByServiceAndResourceSignature(@PathParam("serviceName") String serviceName, |
| @PathParam("resourceSignature") String resourceSignature) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + ")"); |
| } |
| |
| RangerServiceResource ret = null; |
| |
| try { |
| ret = tagStore.getServiceResourceByServiceAndResourceSignature(serviceName, resourceSignature); |
| } catch(Exception excp) { |
| LOG.error("getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.RESOURCES_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public List<RangerServiceResource> getAllServiceResources() { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getAllServiceResources()"); |
| } |
| |
| List<RangerServiceResource> ret; |
| |
| try { |
| ret = tagStore.getServiceResources(new SearchFilter()); |
| } catch(Exception excp) { |
| LOG.error("getAllServiceResources() failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getAllServiceResources(): count=" + (ret == null ? 0 : ret.size())); |
| } |
| |
| return ret; |
| } |
| |
| @POST |
| @Path(TagRESTConstants.TAGRESOURCEMAPS_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagResourceMap createTagResourceMap(@QueryParam("tag-guid") String tagGuid, @QueryParam("resource-guid") String resourceGuid, |
| @DefaultValue("false") @QueryParam("lenient") boolean lenient) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.createTagResourceMap(" + tagGuid + ", " + resourceGuid + ", " + lenient + ")"); |
| } |
| |
| RangerTagResourceMap tagResourceMap; |
| |
| try { |
| tagResourceMap = tagStore.getTagResourceMapForTagAndResourceGuid(tagGuid, resourceGuid); |
| if (tagResourceMap == null) { |
| tagResourceMap = validator.preCreateTagResourceMap(tagGuid, resourceGuid); |
| |
| tagResourceMap = tagStore.createTagResourceMap(tagResourceMap); |
| } else if (!lenient) { |
| throw new Exception("tagResourceMap with tag-guid=" + tagGuid + " and resource-guid=" + resourceGuid + " already exists"); |
| } |
| } catch(Exception excp) { |
| LOG.error("createTagResourceMap(" + tagGuid + ", " + resourceGuid + ", " + lenient + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.createTagResourceMap(" + tagGuid + ", " + resourceGuid + ", " + lenient + ")"); |
| } |
| |
| return tagResourceMap; |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteTagResourceMap(@PathParam("id") Long id) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteTagResourceMap(" + id + ")"); |
| } |
| try { |
| validator.preDeleteTagResourceMap(id); |
| tagStore.deleteTagResourceMap(id); |
| } catch (Exception excp) { |
| LOG.error("deleteTagResourceMap() failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.deleteTagResourceMap(" + id + ")"); |
| } |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteTagResourceMapByGuid(@PathParam("guid") String guid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteTagResourceMapByGuid(" + guid + ")"); |
| } |
| |
| try { |
| RangerTagResourceMap exist = validator.preDeleteTagResourceMapByGuid(guid); |
| tagStore.deleteServiceResource(exist.getId()); |
| } catch(Exception excp) { |
| LOG.error("deleteTagResourceMapByGuid(" + guid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.deleteTagResourceMapByGuid(" + guid + ")"); |
| } |
| } |
| |
| @DELETE |
| @Path(TagRESTConstants.TAGRESOURCEMAPS_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void deleteTagResourceMap(@QueryParam("tag-guid") String tagGuid, @QueryParam("resource-guid") String resourceGuid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteTagResourceMap(" + tagGuid + ", " + resourceGuid + ")"); |
| } |
| |
| try { |
| RangerTagResourceMap exist = validator.preDeleteTagResourceMap(tagGuid, resourceGuid); |
| tagStore.deleteTagResourceMap(exist.getId()); |
| } catch(Exception excp) { |
| LOG.error("deleteTagResourceMap(" + tagGuid + ", " + resourceGuid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.deleteTagResourceMap(" + tagGuid + ", " + resourceGuid + ")"); |
| } |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "{id}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagResourceMap getTagResourceMap(@PathParam("id") Long id) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagResourceMap(" + id + ")"); |
| } |
| RangerTagResourceMap ret; |
| |
| try { |
| ret = tagStore.getTagResourceMap(id); |
| } catch(Exception excp) { |
| LOG.error("getTagResourceMap(" + id + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTagResourceMap(" + id + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "guid/{guid}") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagResourceMap getTagResourceMapByGuid(@PathParam("guid") String guid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagResourceMapByGuid(" + guid + ")"); |
| } |
| RangerTagResourceMap ret; |
| |
| try { |
| ret = tagStore.getTagResourceMapByGuid(guid); |
| } catch(Exception excp) { |
| LOG.error("getTagResourceMapByGuid(" + guid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getTagResourceMapByGuid(" + guid + "): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "tag-resource-guid") |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public RangerTagResourceMap getTagResourceMap(@QueryParam("tagGuid") String tagGuid, @QueryParam("resourceGuid") String resourceGuid) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagResourceMap(" + tagGuid + ", " + resourceGuid + ")"); |
| } |
| |
| RangerTagResourceMap ret = null; |
| |
| try { |
| ret = tagStore.getTagResourceMapForTagAndResourceGuid(tagGuid, resourceGuid); |
| } catch(Exception excp) { |
| LOG.error("getTagResourceMap(" + tagGuid + ", " + resourceGuid + ") failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getTagResourceMap(" + tagGuid + ", " + resourceGuid + ")"); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGRESOURCEMAPS_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public List<RangerTagResourceMap> getAllTagResourceMaps() { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getAllTagResourceMaps()"); |
| } |
| |
| List<RangerTagResourceMap> ret; |
| |
| try { |
| ret = tagStore.getTagResourceMaps(new SearchFilter()); |
| } catch(Exception excp) { |
| LOG.error("getAllTagResourceMaps() failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| } |
| |
| if (CollectionUtils.isEmpty(ret)) { |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("getAllTagResourceMaps() - No tag-resource-maps found"); |
| } |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getAllTagResourceMaps(): " + ret); |
| } |
| |
| return ret; |
| } |
| |
| // This API is used by tag-sync to upload tag-objects |
| |
| @PUT |
| @Path(TagRESTConstants.IMPORT_SERVICETAGS_RESOURCE) |
| @Produces({ "application/json", "application/xml" }) |
| @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") |
| public void importServiceTags(ServiceTags serviceTags) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.importServiceTags()"); |
| } |
| |
| try { |
| |
| ServiceTagsProcessor serviceTagsProcessor = new ServiceTagsProcessor(tagStore); |
| serviceTagsProcessor.process(serviceTags); |
| |
| } catch (Exception excp) { |
| LOG.error("importServiceTags() failed", excp); |
| |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); |
| |
| } |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.importServiceTags()"); |
| } |
| } |
| |
| // This API is typically used by plug-in to get selected tagged resources from RangerAdmin |
| |
| @GET |
| @Path(TagRESTConstants.TAGS_DOWNLOAD + "{serviceName}") |
| @Produces({ "application/json", "application/xml" }) |
| public ServiceTags getServiceTagsIfUpdated(@PathParam("serviceName") String serviceName, |
| @QueryParam(TagRESTConstants.LAST_KNOWN_TAG_VERSION_PARAM) Long lastKnownVersion, |
| @DefaultValue("0") @QueryParam(TagRESTConstants.LAST_ACTIVATION_TIME) Long lastActivationTime, @QueryParam("pluginId") String pluginId, |
| @Context HttpServletRequest request) { |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getServiceTagsIfUpdated(" + serviceName + ", " + lastKnownVersion + ", " + lastActivationTime + ", " + pluginId + ")"); |
| } |
| |
| ServiceTags ret = null; |
| int httpCode = HttpServletResponse.SC_OK; |
| String logMsg = null; |
| Long downloadedVersion = null; |
| |
| try { |
| ret = tagStore.getServiceTagsIfUpdated(serviceName, lastKnownVersion); |
| |
| if (ret == null) { |
| downloadedVersion = lastKnownVersion; |
| httpCode = HttpServletResponse.SC_NOT_MODIFIED; |
| logMsg = "No change since last update"; |
| } else { |
| downloadedVersion = ret.getTagVersion(); |
| httpCode = HttpServletResponse.SC_OK; |
| logMsg = "Returning " + (ret.getTags() != null ? ret.getTags().size() : 0) + " tags. Tag version=" + ret.getTagVersion(); |
| } |
| } catch (WebApplicationException webException) { |
| httpCode = webException.getResponse().getStatus(); |
| logMsg = webException.getResponse().getEntity().toString(); |
| } catch(Exception excp) { |
| httpCode = HttpServletResponse.SC_BAD_REQUEST; |
| logMsg = excp.getMessage(); |
| } finally { |
| assetMgr.createPluginInfo(serviceName, pluginId, request, RangerPluginInfo.ENTITY_TYPE_TAGS, downloadedVersion, lastKnownVersion, lastActivationTime, httpCode); |
| } |
| |
| if(httpCode != HttpServletResponse.SC_OK) { |
| boolean logError = httpCode != HttpServletResponse.SC_NOT_MODIFIED; |
| throw restErrorUtil.createRESTException(httpCode, logMsg, logError); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getServiceTagsIfUpdated(" + serviceName + ", " + lastKnownVersion + ", " + lastActivationTime + ", " + pluginId + ")"); |
| } |
| |
| return ret; |
| } |
| |
| @GET |
| @Path(TagRESTConstants.TAGS_SECURE_DOWNLOAD + "{serviceName}") |
| @Produces({ "application/json", "application/xml" }) |
| public ServiceTags getSecureServiceTagsIfUpdated(@PathParam("serviceName") String serviceName, |
| @QueryParam(TagRESTConstants.LAST_KNOWN_TAG_VERSION_PARAM) Long lastKnownVersion, |
| @DefaultValue("0") @QueryParam(TagRESTConstants.LAST_ACTIVATION_TIME) Long lastActivationTime, @QueryParam("pluginId") String pluginId, |
| @Context HttpServletRequest request) { |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("==> TagREST.getSecureServiceTagsIfUpdated(" + serviceName + ", " + lastKnownVersion + ", " + lastActivationTime + ", " + pluginId + ")"); |
| } |
| |
| ServiceTags ret = null; |
| int httpCode = HttpServletResponse.SC_OK; |
| String logMsg = null; |
| boolean isAllowed = false; |
| boolean isAdmin = bizUtil.isAdmin(); |
| boolean isKeyAdmin = bizUtil.isKeyAdmin(); |
| Long downloadedVersion = null; |
| |
| try { |
| XXService xService = daoManager.getXXService().findByName(serviceName); |
| if (xService == null) { |
| LOG.error("Requested Service not found. serviceName=" + serviceName); |
| throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Service:" + serviceName + " not found", |
| false); |
| } |
| XXServiceDef xServiceDef = daoManager.getXXServiceDef().getById(xService.getType()); |
| RangerService rangerService = svcStore.getServiceByName(serviceName); |
| |
| if (StringUtils.equals(xServiceDef.getImplclassname(), EmbeddedServiceDefsUtil.KMS_IMPL_CLASS_NAME)) { |
| if (isKeyAdmin) { |
| isAllowed = true; |
| }else { |
| isAllowed = bizUtil.isUserAllowed(rangerService, Allowed_User_List_For_Tag_Download); |
| } |
| }else{ |
| if (isAdmin) { |
| isAllowed = true; |
| }else{ |
| isAllowed = bizUtil.isUserAllowed(rangerService, Allowed_User_List_For_Tag_Download); |
| } |
| } |
| if (isAllowed) { |
| ret = tagStore.getServiceTagsIfUpdated(serviceName, lastKnownVersion); |
| |
| if(ret == null) { |
| downloadedVersion = lastKnownVersion; |
| httpCode = HttpServletResponse.SC_NOT_MODIFIED; |
| logMsg = "No change since last update"; |
| } else { |
| downloadedVersion = ret.getTagVersion(); |
| httpCode = HttpServletResponse.SC_OK; |
| logMsg = "Returning " + (ret.getTags() != null ? ret.getTags().size() : 0) + " tags. Tag version=" + ret.getTagVersion(); |
| } |
| }else{ |
| LOG.error("getSecureServiceTagsIfUpdated(" + serviceName + ", " + lastKnownVersion + ", " + lastActivationTime + ") failed as User doesn't have permission to download tags"); |
| httpCode = HttpServletResponse.SC_UNAUTHORIZED; |
| logMsg = "User doesn't have permission to download tags"; |
| } |
| } catch (WebApplicationException webException) { |
| httpCode = webException.getResponse().getStatus(); |
| logMsg = webException.getResponse().getEntity().toString(); |
| } catch (Exception excp) { |
| httpCode = HttpServletResponse.SC_BAD_REQUEST; |
| logMsg = excp.getMessage(); |
| } finally { |
| assetMgr.createPluginInfo(serviceName, pluginId, request, RangerPluginInfo.ENTITY_TYPE_TAGS, downloadedVersion, lastKnownVersion, lastActivationTime, httpCode); |
| } |
| |
| if(httpCode != HttpServletResponse.SC_OK) { |
| boolean logError = httpCode != HttpServletResponse.SC_NOT_MODIFIED; |
| throw restErrorUtil.createRESTException(httpCode, logMsg, logError); |
| } |
| |
| if(LOG.isDebugEnabled()) { |
| LOG.debug("<== TagREST.getSecureServiceTagsIfUpdated(" + serviceName + ", " + lastKnownVersion + ", " + lastActivationTime + ", " + pluginId + ")"); |
| } |
| |
| return ret; |
| } |
| |
| } |