/* (non-Javadoc) * @see com.zimbra.soap.DocumentHandler#handle(org.dom4j.Element, java.util.Map) */ public Element handle(Element request, Map<String, Object> context) throws ServiceException { ZimbraSoapContext zsc = getZimbraSoapContext(context); Element a = request.getElement(AdminConstants.E_ACCOUNT); String key = a.getAttribute(AdminConstants.A_BY); String value = a.getText(); Provisioning prov = Provisioning.getInstance(); Account account = prov.get(AccountBy.fromString(key), value, zsc.getAuthToken()); if (account == null) throw AccountServiceException.NO_SUCH_ACCOUNT(value); if (account.isCalendarResource()) { // need a CalendarResource instance for RightChecker CalendarResource resource = prov.get(CalendarResourceBy.id, account.getId()); checkCalendarResourceRight(zsc, resource, Admin.R_getCalendarResourceInfo); } else checkAccountRight(zsc, account, Admin.R_getAccountInfo); Element response = zsc.createElement(AdminConstants.GET_ACCOUNT_INFO_RESPONSE); response.addElement(AdminConstants.E_NAME).setText(account.getName()); addAttr(response, Provisioning.A_zimbraId, account.getId()); addAttr( response, Provisioning.A_zimbraMailHost, account.getAttr(Provisioning.A_zimbraMailHost)); doCos(account, response); addUrls(response, account); return response; }
/** * central place where a target should be loaded * * @param prov * @param targetType * @param targetBy * @param target * @return * @throws ServiceException */ static Entry lookupTarget( Provisioning prov, TargetType targetType, TargetBy targetBy, String target, boolean mustFind) throws ServiceException { Entry targetEntry = null; switch (targetType) { case account: targetEntry = prov.get(AccountBy.fromString(targetBy.name()), target); if (targetEntry == null && mustFind) throw AccountServiceException.NO_SUCH_ACCOUNT(target); break; case calresource: targetEntry = prov.get(CalendarResourceBy.fromString(targetBy.name()), target); if (targetEntry == null && mustFind) throw AccountServiceException.NO_SUCH_CALENDAR_RESOURCE(target); break; case dl: targetEntry = prov.getAclGroup(DistributionListBy.fromString(targetBy.name()), target); if (targetEntry == null && mustFind) throw AccountServiceException.NO_SUCH_DISTRIBUTION_LIST(target); break; case domain: targetEntry = prov.get(DomainBy.fromString(targetBy.name()), target); if (targetEntry == null && mustFind) throw AccountServiceException.NO_SUCH_DOMAIN(target); break; case cos: targetEntry = prov.get(CosBy.fromString(targetBy.name()), target); if (targetEntry == null && mustFind) throw AccountServiceException.NO_SUCH_COS(target); break; case server: targetEntry = prov.get(ServerBy.fromString(targetBy.name()), target); if (targetEntry == null && mustFind) throw AccountServiceException.NO_SUCH_SERVER(target); break; case xmppcomponent: targetEntry = prov.get(XMPPComponentBy.fromString(targetBy.name()), target); if (targetEntry == null && mustFind) throw AccountServiceException.NO_SUCH_XMPP_COMPONENT(target); break; case zimlet: ZimletBy zimletBy = ZimletBy.fromString(targetBy.name()); if (zimletBy != ZimletBy.name) throw ServiceException.INVALID_REQUEST("zimlet must be by name", null); targetEntry = prov.getZimlet(target); if (targetEntry == null && mustFind) throw AccountServiceException.NO_SUCH_ZIMLET(target); break; case config: targetEntry = prov.getConfig(); break; case global: targetEntry = prov.getGlobalGrant(); break; default: ServiceException.INVALID_REQUEST( "invallid target type for lookupTarget:" + targetType.toString(), null); } return targetEntry; }