use of com.zimbra.cs.account.Provisioning in project zm-mailbox by Zimbra.
the class UrlNamespace method getMailItemById.
private static MailItem getMailItemById(DavContext ctxt, String user, int id) throws DavException, ServiceException {
Provisioning prov = Provisioning.getInstance();
Account account = prov.get(AccountBy.name, user);
if (account == null) {
// Anti-account name harvesting.
ZimbraLog.dav.info("Failing GET of mail item - no such account '%s' id=%d", user, id);
throw new DavException("Request denied", HttpServletResponse.SC_NOT_FOUND, null);
}
Mailbox mbox = MailboxManager.getInstance().getMailboxByAccount(account);
return mbox.getItemById(ctxt.getOperationContext(), id, MailItem.Type.UNKNOWN);
}
use of com.zimbra.cs.account.Provisioning in project zm-mailbox by Zimbra.
the class UrlNamespace method getAbsoluteUrl.
private static String getAbsoluteUrl(Account user, String path) throws ServiceException {
Provisioning prov = Provisioning.getInstance();
Domain domain = null;
Server server = prov.getLocalServer();
if (user != null) {
domain = prov.getDomain(user);
server = prov.getServer(user);
}
return DavServlet.getServiceUrl(server, domain, path);
}
use of com.zimbra.cs.account.Provisioning in project zm-mailbox by Zimbra.
the class UrlNamespace method getFolders.
private static java.util.Collection<DavResource> getFolders(DavContext ctxt, String user) throws ServiceException, DavException {
Provisioning prov = Provisioning.getInstance();
Account account = prov.get(AccountBy.name, user);
if (account == null) {
// Anti-account name harvesting.
ZimbraLog.dav.info("Failing GET of folders - no such account '%s'", user);
throw new DavException("Request denied", HttpServletResponse.SC_NOT_FOUND, null);
}
Mailbox mbox = MailboxManager.getInstance().getMailboxByAccount(account);
OperationContext octxt = ctxt.getOperationContext();
ArrayList<DavResource> rss = new ArrayList<DavResource>();
for (Folder f : mbox.getVisibleFolders(octxt)) rss.add(getResourceFromMailItem(ctxt, f));
return rss;
}
use of com.zimbra.cs.account.Provisioning in project zm-mailbox by Zimbra.
the class UrlNamespace method getMailItemResource.
/**
*
* @param ctxt
* @param user
* @param path - May contain parameters
* @return
*/
private static DavResource getMailItemResource(DavContext ctxt, String user, String path) throws ServiceException, DavException {
Provisioning prov = Provisioning.getInstance();
Account account = prov.get(AccountBy.name, user);
if (account == null) {
// Anti-account name harvesting.
ZimbraLog.dav.info("Failing GET of mail item resource - no such account '%s' path '%s'", user, path);
throw new DavException("Request denied", HttpServletResponse.SC_NOT_FOUND, null);
}
if (ctxt.getUser().compareTo(user) != 0 || !Provisioning.onLocalServer(account)) {
try {
return new RemoteCollection(ctxt, path, account);
} catch (MailServiceException.NoSuchItemException e) {
return null;
}
}
Mailbox mbox = MailboxManager.getInstance().getMailboxByAccount(account);
int id = 0;
int index = path.indexOf('?');
if (index > 0) {
Map<String, String> params = HttpUtil.getURIParams(path.substring(index + 1));
path = path.substring(0, index);
if (params.containsKey("id")) {
try {
id = Integer.parseInt(params.get("id"));
} catch (NumberFormatException e) {
}
}
}
// At this point, path will have had any parameters stripped from it
OperationContext octxt = ctxt.getOperationContext();
MailItem item = null;
// simple case. root folder or if id is specified.
if (path.equals("/")) {
item = mbox.getFolderByPath(octxt, "/");
} else if (id > 0) {
item = mbox.getItemById(octxt, id, MailItem.Type.UNKNOWN);
}
if (item != null) {
return getResourceFromMailItem(ctxt, item);
}
// check for named items (folders, documents)
try {
return getResourceFromMailItem(ctxt, mbox.getItemByPath(octxt, path));
} catch (MailServiceException.NoSuchItemException e) {
}
// check if the this is renamed folder.
DavResource rs = checkRenamedResource(user, path);
if (rs != null)
return rs;
// look up the item from path
if (path.endsWith("/")) {
path = path.substring(0, path.length() - 1);
}
index = path.lastIndexOf('/');
String folderPath = path.substring(0, index);
String baseName = path.substring(index + 1);
Folder f = null;
if (index != -1) {
try {
f = mbox.getFolderByPath(octxt, folderPath);
} catch (MailServiceException.NoSuchItemException e) {
}
}
if (f != null) {
/* First check whether the default name has been over-ridden - perhaps because the name was
* chosen by a DAV client via PUT to a URL when creating the item. */
DavNames.DavName davName = null;
if (DebugConfig.enableDAVclientCanChooseResourceBaseName) {
davName = DavNames.DavName.create(mbox.getId(), f.getId(), baseName);
}
if (davName != null) {
Integer itemId = DavNames.get(davName);
if (itemId != null) {
item = mbox.getItemById(octxt, itemId, MailItem.Type.UNKNOWN);
if ((item != null) && (f.getId() == item.getFolderId())) {
return getResourceFromMailItem(ctxt, item);
}
item = null;
}
}
if (baseName.toLowerCase().endsWith(CalendarObject.CAL_EXTENSION)) {
String uid = baseName.substring(0, baseName.length() - CalendarObject.CAL_EXTENSION.length());
// Unescape the name (It was encoded in DavContext intentionally)
uid = HttpUtil.urlUnescape(uid);
index = uid.indexOf(',');
if (index > 0) {
try {
id = Integer.parseInt(uid.substring(index + 1));
} catch (NumberFormatException e) {
}
}
if (id > 0) {
item = mbox.getItemById(octxt, id, MailItem.Type.UNKNOWN);
} else {
item = mbox.getCalendarItemByUid(octxt, uid);
}
if ((item != null) && (f.getId() != item.getFolderId())) {
item = null;
}
} else if (baseName.toLowerCase().endsWith(AddressObject.VCARD_EXTENSION)) {
rs = AddressObject.getAddressObjectByUID(ctxt, baseName, account, f);
if (rs != null) {
return rs;
}
} else if (f.getId() == Mailbox.ID_FOLDER_INBOX || f.getId() == Mailbox.ID_FOLDER_SENT) {
ctxt.setActingAsDelegateFor(baseName);
// delegated scheduling and notification handling
return getResourceFromMailItem(ctxt, f);
}
}
return getResourceFromMailItem(ctxt, item);
}
use of com.zimbra.cs.account.Provisioning in project zm-mailbox by Zimbra.
the class UrlNamespace method onSameServer.
private static boolean onSameServer(Account thisOne, Account thatOne) {
if (thisOne.getId().equals(thatOne.getId()))
return true;
try {
Provisioning prov = Provisioning.getInstance();
Server mine = prov.getServer(thisOne);
Server theirs = prov.getServer(thatOne);
if (mine != null && theirs != null)
return mine.getId().equals(theirs.getId());
} catch (Exception e) {
ZimbraLog.dav.warn("can't get domain or server for %s %s", thisOne.getId(), thatOne.getId(), e);
}
return true;
}
Aggregations