static public Tuple<CmisServer, Exception> GetRepositoriesFuzzy(Credentials.ServerCredentials credentials)
{
Dictionary<string, string> repositories = null;
Exception firstException = null;
// Try the given URL, maybe user directly entered the CMIS AtomPub endpoint URL.
try
{
repositories = GetRepositories(credentials);
}
catch (DotCMIS.Exceptions.CmisRuntimeException e)
{
if (e.Message == "ConnectFailure") {
return new Tuple<CmisServer, Exception>(new CmisServer(credentials.Address, null), new CmisServerNotFoundException(e.Message, e));
}
firstException = e;
}
catch (Exception e)
{
// Save first Exception and try other possibilities.
firstException = e;
}
if (repositories != null)
{
// Found!
return new Tuple<CmisServer, Exception>(new CmisServer(credentials.Address, repositories), null);
}
// Extract protocol and server name or IP address
string prefix = credentials.Address.GetLeftPart(UriPartial.Authority);
// See https://github.com/nicolas-raoul/CmisSync/wiki/What-address for the list of ECM products prefixes
// Please send us requests to support more CMIS servers: https://github.com/nicolas-raoul/CmisSync/issues
string[] suffixes = {
"/cmis/atom11",
"/alfresco/cmisatom",
"/alfresco/service/cmis",
"/cmis/resources/",
"/emc-cmis-ea/resources/",
"/xcmis/rest/cmisatom",
"/files/basic/cmis/my/servicedoc",
"/p8cmis/resources/Service",
"/_vti_bin/cmis/rest?getRepositories",
"/Nemaki/atom/bedroom",
"/nuxeo/atom/cmis",
"/cmis/atom"
};
string bestUrl = null;
// Try all suffixes
for (int i = 0; i < suffixes.Length; i++)
{
string fuzzyUrl = prefix + suffixes[i];
Logger.Info("Sync | Trying with " + fuzzyUrl);
try
{
Credentials.ServerCredentials cred = new Credentials.ServerCredentials()
{
UserName = credentials.UserName,
Password = credentials.Password.ToString(),
Address = new Uri(fuzzyUrl)
};
repositories = GetRepositories(cred);
}
catch (DotCMIS.Exceptions.CmisPermissionDeniedException e)
{
firstException = new CmisSync.Lib.Cmis.CmisPermissionDeniedException(e.Message, e);
bestUrl = fuzzyUrl;
}
catch (Exception e)
{
// Do nothing, try other possibilities.
Logger.Debug(e.Message);
}
if (repositories != null)
{
// Found!
return new Tuple<CmisServer, Exception>(new CmisServer(new Uri(fuzzyUrl), repositories), null);
}
}
// Not found. Return also the first exception to inform the user correctly
return new Tuple<CmisServer, Exception>(new CmisServer(bestUrl == null ? credentials.Address : new Uri(bestUrl), null), firstException);
}