android/src/main/java/com/owncloud/android/authentication/AuthenticatorUrlUtils.java

117 lines
4.2 KiB
Java

/*
* Nextcloud Android client application
*
* @author Andy Scherzinger
* Copyright (C) 2017 Andy Scherzinger
* Copyright (C) 2012 Bartek Przybylski
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.owncloud.android.authentication;
import android.content.Context;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import java.util.Locale;
/**
* Helper class for authenticator-URL related logic.
*/
public final class AuthenticatorUrlUtils {
public static final String WEBDAV_PATH_4_0_AND_LATER = "/remote.php/webdav";
private static final String HTTPS_PROTOCOL = "https://";
private static final String HTTP_PROTOCOL = "http://";
private AuthenticatorUrlUtils() {
}
/**
* Returns the proper URL path to access the WebDAV interface of an ownCloud server,
* according to its version and the authorization method used.
*
* @param version Version of ownCloud server.
* @param authTokenType Authorization token type, matching some of the AUTH_TOKEN_TYPE_* constants in
* {@link AccountAuthenticator}.
* @return WebDAV path for given OC version and authorization method, null if OC version
* is unknown; versions prior to ownCloud 4 are not supported anymore
*/
public static String getWebdavPath(OwnCloudVersion version, String authTokenType, Context context) {
return WEBDAV_PATH_4_0_AND_LATER;
}
public static String normalizeUrlSuffix(String url) {
String normalizedUrl = url;
if (normalizedUrl.endsWith("/")) {
normalizedUrl = normalizedUrl.substring(0, normalizedUrl.length() - 1);
}
return trimUrlWebdav(normalizedUrl);
}
public static String normalizeUrl(String url, boolean sslWhenUnprefixed) {
String normalizedUrl = url;
if (normalizedUrl != null && normalizedUrl.length() > 0) {
normalizedUrl = normalizedUrl.trim();
if (!normalizedUrl.toLowerCase(Locale.ROOT).startsWith(HTTP_PROTOCOL) &&
!normalizedUrl.toLowerCase(Locale.ROOT).startsWith(HTTPS_PROTOCOL)) {
if (sslWhenUnprefixed) {
normalizedUrl = HTTPS_PROTOCOL + normalizedUrl;
} else {
normalizedUrl = HTTP_PROTOCOL + normalizedUrl;
}
}
normalizedUrl = normalizeUrlSuffix(normalizedUrl);
}
return normalizedUrl != null ? normalizedUrl : "";
}
public static String trimWebdavSuffix(String url) {
String trimmedUrl = url;
while (trimmedUrl.endsWith("/")) {
trimmedUrl = trimmedUrl.substring(0, url.length() - 1);
}
int pos = trimmedUrl.lastIndexOf(WEBDAV_PATH_4_0_AND_LATER);
if (pos >= 0) {
trimmedUrl = trimmedUrl.substring(0, pos);
}
return trimmedUrl;
}
private static String trimUrlWebdav(String url) {
if (url.toLowerCase(Locale.ROOT).endsWith(WEBDAV_PATH_4_0_AND_LATER)) {
return url.substring(0, url.length() - WEBDAV_PATH_4_0_AND_LATER.length());
}
return url;
}
public static String stripIndexPhpOrAppsFiles(String url) {
String strippedUrl = url;
if (strippedUrl.endsWith("/index.php")) {
strippedUrl = strippedUrl.substring(0, strippedUrl.lastIndexOf("/index.php"));
} else if (strippedUrl.contains("/index.php/apps/")) {
strippedUrl = strippedUrl.substring(0, strippedUrl.lastIndexOf("/index.php/apps/"));
}
return strippedUrl;
}
}