Example #1
0
        public static ClassifyResult[] ClassifyLinks(IPrincipal authenticatedUser, params Uri[] uris)
        {
            if (authenticatedUser == null)
            {
                throw new ArgumentNullException("authenticatedUser");
            }
            if (uris == null)
            {
                throw new ArgumentNullException("uris");
            }
            if (uris.Length == 0)
            {
                throw new ArgumentException("uris");
            }
            if (!(authenticatedUser is WindowsPrincipal))
            {
                throw new ArgumentException("authenticatedUser");
            }
            ClassifyResult[] array = new ClassifyResult[uris.Length];
            WindowsIdentity  authenticatedUser2 = (WindowsIdentity)authenticatedUser.Identity;

            for (int i = 0; i < uris.Length; i++)
            {
                if (uris[i] == null)
                {
                    throw new ArgumentException("uris");
                }
                array[i] = LinkClassifier.ClassifyLink(uris[i], authenticatedUser2);
            }
            return(array);
        }
Example #2
0
        private static ClassifyResult ClassifyLink(Uri uri, WindowsIdentity authenticatedUser)
        {
            if (uri == null)
            {
                throw new ArgumentNullException("uri");
            }
            if (!uri.IsAbsoluteUri)
            {
                throw new ArgumentException("uri");
            }
            ClassifyResult classifyResult;

            try
            {
                if (uri.IsUnc)
                {
                    classifyResult = LinkClassifier.ClassifyUncLink(uri, authenticatedUser);
                }
                else
                {
                    if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
                    {
                        classifyResult = LinkClassifier.ClassifySharepointLink(uri, authenticatedUser);
                        if (classifyResult.Error == ClassificationError.None)
                        {
                            goto IL_9A;
                        }
                        try
                        {
                            if (LinkClassifier.CheckIfLinkExists(uri, authenticatedUser))
                            {
                                classifyResult = new ClassifyResult(null, uri, UriFlags.Other);
                            }
                            else
                            {
                                classifyResult = new ClassifyResult(uri, ClassificationError.ObjectNotFound);
                            }
                            goto IL_9A;
                        }
                        catch (WebException)
                        {
                            goto IL_9A;
                        }
                        catch (NotSupportedException)
                        {
                            goto IL_9A;
                        }
                    }
                    classifyResult = new ClassifyResult(uri, ClassificationError.UriTypeNotSupported);
                }
                IL_9A :;
            }
            catch (AuthenticationException)
            {
                classifyResult = new ClassifyResult(uri, ClassificationError.AccessDenied);
            }
            return(classifyResult);
        }
Example #3
0
        private static Uri GetSiteAddress(Uri uri, out ClassifyResult result)
        {
            result = null;
            Uri result2;

            using (Webs webs = new Webs(uri.GetLeftPart(UriPartial.Authority)))
            {
                webs.Credentials = CredentialCache.DefaultCredentials;
                try
                {
                    Uri uri2 = new Uri(webs.WebUrlFromPageUrl(uri.ToString()));
                    if (string.Compare(uri2.ToString().TrimEnd(new char[]
                    {
                        '/',
                        '\\'
                    }), uri.ToString().TrimEnd(new char[]
                    {
                        '/',
                        '\\'
                    }), StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        result = new ClassifyResult(new SharepointSiteId(uri2.OriginalString, UriFlags.Sharepoint), uri, UriFlags.Sharepoint);
                    }
                    else if (uri.Segments.Length == uri2.Segments.Length + 1 && string.Compare(uri.Segments[uri.Segments.Length - 1], "default.aspx", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        if (LinkClassifier.CheckIfLinkExists(uri, null))
                        {
                            result = new ClassifyResult(new SharepointSiteId(uri2.OriginalString, UriFlags.Sharepoint), uri, UriFlags.Sharepoint);
                        }
                        else
                        {
                            result = new ClassifyResult(null, uri, UriFlags.Other);
                        }
                    }
                    return(uri2);
                }
                catch (SoapException)
                {
                    result = new ClassifyResult(uri, ClassificationError.ObjectNotFound);
                }
                catch (WebException)
                {
                    throw;
                }
                catch (InvalidOperationException)
                {
                    result = new ClassifyResult(null, uri, UriFlags.Other);
                }
                catch (NotSupportedException)
                {
                    result = new ClassifyResult(null, ClassificationError.ConnectionFailed);
                }
                result2 = null;
            }
            return(result2);
        }
Example #4
0
        private static ClassifyResult ClassifySharepointLink(Uri uri, WindowsIdentity authenticatedUser)
        {
            WindowsImpersonationContext windowsImpersonationContext = null;
            ClassifyResult classifyResult = null;
            ClassifyResult result;

            try
            {
                windowsImpersonationContext = Utils.ImpersonateUser(authenticatedUser);
                Uri siteAddress = LinkClassifier.GetSiteAddress(uri, out classifyResult);
                if (classifyResult != null)
                {
                    result = classifyResult;
                }
                else
                {
                    SharepointSession session       = SharepointSession.Open(new SharepointSiteId(siteAddress, UriFlags.Sharepoint), new WindowsPrincipal(authenticatedUser));
                    SharepointList    listSpecifics = LinkClassifier.GetListSpecifics(uri, session, out classifyResult);
                    if (classifyResult != null)
                    {
                        result = classifyResult;
                    }
                    else
                    {
                        IList <string> itemHierarchy = LinkClassifier.GetItemHierarchy(uri, listSpecifics);
                        if (itemHierarchy.Count < 2)
                        {
                            Uri  uri2 = listSpecifics.Uri;
                            bool flag = false;
                            if (itemHierarchy.Count == 0 || string.Compare(itemHierarchy[0].TrimEnd(new char[]
                            {
                                '/',
                                '\\'
                            }), Uri.UnescapeDataString(uri2.Segments[siteAddress.Segments.Length].TrimEnd(new char[]
                            {
                                '/',
                                '\\'
                            })), StringComparison.OrdinalIgnoreCase) != 0)
                            {
                                flag = true;
                            }
                            if (!flag)
                            {
                                result = new ClassifyResult(listSpecifics.Id, uri, UriFlags.SharepointDocumentLibrary);
                            }
                            else
                            {
                                result = new ClassifyResult(uri, ClassificationError.ObjectNotFound);
                            }
                        }
                        else
                        {
                            string propertyValue = itemHierarchy[itemHierarchy.Count - 1];
                            itemHierarchy.RemoveAt(itemHierarchy.Count - 1);
                            SharepointListId sharepointListId      = (SharepointListId)listSpecifics.Id;
                            SharepointDocumentLibraryItemId listId = new SharepointDocumentLibraryItemId("-1", sharepointListId.ListName, sharepointListId.SiteUri, listSpecifics.GetRegionalSettings(), UriFlags.SharepointFolder, itemHierarchy);
                            ComparisonFilter     query             = new ComparisonFilter(ComparisonOperator.Equal, SharepointDocumentLibraryItemSchema.Name, propertyValue);
                            PropertyDefinition[] propsToReturn     = new PropertyDefinition[]
                            {
                                SharepointDocumentLibraryItemSchema.ID,
                                SharepointDocumentLibraryItemSchema.FileSystemObjectType
                            };
                            object[][] rows = SharepointDocumentLibraryFolder.InternalGetView(query, null, DocumentLibraryQueryOptions.FoldersAndFiles, propsToReturn, session, listId).GetRows(2);
                            if (rows.Length == 1)
                            {
                                result = new ClassifyResult((DocumentLibraryObjectId)rows[0][0], uri, ((DocumentLibraryObjectId)rows[0][0]).UriFlags);
                            }
                            else
                            {
                                result = new ClassifyResult(uri, ClassificationError.ObjectNotFound);
                            }
                        }
                    }
                }
            }
            catch (SoapException)
            {
                result = new ClassifyResult(uri, ClassificationError.ConnectionFailed);
            }
            catch (ObjectNotFoundException)
            {
                result = new ClassifyResult(uri, ClassificationError.ObjectNotFound);
            }
            catch (AccessDeniedException)
            {
                result = new ClassifyResult(uri, ClassificationError.AccessDenied);
            }
            catch (WebException ex)
            {
                result = LinkClassifier.GetClassificationResultFromWebException(uri, ex);
            }
            catch
            {
                Utils.UndoContext(ref windowsImpersonationContext);
                throw;
            }
            finally
            {
                Utils.UndoContext(ref windowsImpersonationContext);
            }
            return(result);
        }
Example #5
0
        private static SharepointList GetListSpecifics(Uri uri, SharepointSession session, out ClassifyResult result)
        {
            SharepointList sharepointList = null;
            int            num            = 0;

            result = null;
            foreach (object[] array in session.GetView(ListBaseType.Any, new PropertyDefinition[]
            {
                DocumentLibrarySchema.Id
            }).GetRows(int.MaxValue))
            {
                SharepointList sharepointList2 = SharepointList.Read(session, (ObjectId)array[0]);
                Uri            uri2            = sharepointList2.Uri;
                int            num2            = 0;
                int            num3            = session.Uri.Segments.Length;
                while (num3 < uri2.Segments.Length && num3 < uri.Segments.Length && string.Compare(uri.Segments[num3].TrimEnd(new char[]
                {
                    '/',
                    '\\'
                }), uri2.Segments[num3].TrimEnd(new char[]
                {
                    '/',
                    '\\'
                }), StringComparison.CurrentCultureIgnoreCase) == 0)
                {
                    num3++;
                    num2++;
                }
                if (num2 > num)
                {
                    sharepointList = sharepointList2;
                    num            = num2;
                }
                else if (num2 == num)
                {
                    sharepointList = null;
                }
            }
            if (sharepointList == null)
            {
                result = new ClassifyResult(uri, ClassificationError.ObjectNotFound);
            }
            else if (sharepointList.ItemType == SharepointItemType.List)
            {
                result = new ClassifyResult(sharepointList.Id, uri, UriFlags.SharepointList);
            }
            else if (!uri.Query.Contains("&RootFolder=") && !uri.Query.Contains("?RootFolder="))
            {
                Uri uri3 = sharepointList.Uri;
                if (string.Compare(uri.AbsolutePath, uri3.AbsolutePath, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    result = new ClassifyResult(sharepointList.Id, uri, UriFlags.SharepointDocumentLibrary);
                }
                else if (uri.Segments.Length == uri3.Segments.Length)
                {
                    for (int j = 0; j < uri.Segments.Length - 1; j++)
                    {
                        if (string.Compare(uri3.Segments[j], uri.Segments[j], StringComparison.OrdinalIgnoreCase) != 0)
                        {
                            return(sharepointList);
                        }
                    }
                    if (LinkClassifier.CheckIfLinkExists(uri, null))
                    {
                        result = new ClassifyResult(sharepointList.Id, uri, UriFlags.SharepointDocumentLibrary);
                    }
                    else
                    {
                        result = new ClassifyResult(uri, ClassificationError.ObjectNotFound);
                    }
                }
            }
            return(sharepointList);
        }