package com.fsck.k9.mail.store.webdav;
import com.fsck.k9.mail.ServerSettings;
import com.fsck.k9.mail.store.StoreConfig;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import static com.fsck.k9.mail.helper.UrlEncodingHelper.encodeUtf8;
public class WebDavStoreUriCreator {
/**
* Creates a WebDavStore URI with the supplied settings.
*
* @param server The {@link ServerSettings} object that holds the server settings.
* @return A WebDavStore URI that holds the same information as the {@code server} parameter.
* @see StoreConfig#getStoreUri()
* @see WebDavStore#decodeUri(String)
*/
public static String create(ServerSettings server) {
String userEnc = encodeUtf8(server.username);
String passwordEnc = (server.password != null) ?
encodeUtf8(server.password) : "";
String scheme;
switch (server.connectionSecurity) {
case SSL_TLS_REQUIRED:
scheme = "webdav+ssl+";
break;
default:
case NONE:
scheme = "webdav";
break;
}
String userInfo = userEnc + ":" + passwordEnc;
String uriPath;
Map<String, String> extra = server.getExtra();
if (extra != null) {
String path = extra.get(WebDavStoreSettings.PATH_KEY);
path = (path != null) ? path : "";
String authPath = extra.get(WebDavStoreSettings.AUTH_PATH_KEY);
authPath = (authPath != null) ? authPath : "";
String mailboxPath = extra.get(WebDavStoreSettings.MAILBOX_PATH_KEY);
mailboxPath = (mailboxPath != null) ? mailboxPath : "";
uriPath = "/" + path + "|" + authPath + "|" + mailboxPath;
} else {
uriPath = "/||";
}
try {
return new URI(scheme, userInfo, server.host, server.port, uriPath,
null, null).toString();
} catch (URISyntaxException e) {
throw new IllegalArgumentException("Can't create WebDavStore URI", e);
}
}
}