Exemple #1
0
        public PermissionsImporter(UserGroupImporter userGroupImporter) : base("permissions", userGroupImporter.ImportContext)
        {
            this.UserGroupImporter = userGroupImporter;
            Dictionary <string, AccessControlList> acls = new Dictionary <string, AccessControlList>();

            using (XmlReader aclsXml = this.ImportContext.LoadIndex("acls"))
            {
                while (aclsXml.ReadToFollowing("acl"))
                {
                    using (XmlReader aclXml = aclsXml.ReadSubtree())
                    {
                        AccessControlList a = new AccessControlList(XElement.Load(aclXml), userGroupImporter);
                        acls[a.Id] = a;
                    }
                }
            }
            this.Acls = acls;
        }
Exemple #2
0
            public void Grant(ListItem item, UserGroupImporter userGroupImporter)
            {
                if (this.Name == UserGroupImporter.DM_OWNER)
                {
                    return;
                }
                if (this.RoleType == RoleType.None)
                {
                    return;
                }
                ClientContext clientContext = item.Context as ClientContext;
                Principal     principal     = ResolvePrincipal(clientContext, userGroupImporter);

                if (principal == null)
                {
                    return;
                }
                RoleDefinitionBindingCollection roles = new RoleDefinitionBindingCollection(clientContext);

                roles.Add(clientContext.Web.RoleDefinitions.GetByType(this.RoleType));
                item.RoleAssignments.Add(principal, roles);
            }
Exemple #3
0
        public AccessControlList(XElement aclXml, UserGroupImporter userGroupImporter)
        {
            this.UserGroupImporter = userGroupImporter;
            XNamespace ns = aclXml.GetDefaultNamespace();

            this.Id          = (string)aclXml.Element(ns + "id");
            this.Description = (string)aclXml.Element(ns + "description");
            this.Users       = new Dictionary <string, UserPermission>();
            XElement users = aclXml.Element(ns + "users");

            if (users != null)
            {
                foreach (XElement p in users.Elements(ns + "permit"))
                {
                    string name     = p.Attribute("name").Value;
                    string resolved = (name == UserGroupImporter.DM_OWNER ? name : this.UserGroupImporter.ResolveUserName(name));
                    if ((resolved != null) && !this.Users.ContainsKey(resolved))
                    {
                        this.Users[resolved] = new UserPermission(resolved, p.Attribute("type").Value, p.Attribute("level").Value, p.Attribute("extended").Value);
                    }
                }
            }
            this.Groups = new Dictionary <string, GroupPermission>();
            XElement groups = aclXml.Element(ns + "groups");

            if (groups != null)
            {
                foreach (XElement p in groups.Elements(ns + "permit"))
                {
                    string name     = p.Attribute("name").Value;
                    string resolved = this.UserGroupImporter.ResolveGroupName(name);
                    if ((resolved != null) && !this.Groups.ContainsKey(resolved))
                    {
                        this.Groups[resolved] = new GroupPermission(resolved, p.Attribute("type").Value, p.Attribute("level").Value, p.Attribute("extended").Value);
                    }
                }
            }
        }
Exemple #4
0
 protected FSObjectImporter(string label, ImportContext importContext, ContentTypeImporter contentTypeImporter, PermissionsImporter permissionsImporter) : base(label, importContext)
 {
     this.ContentTypeImporter = contentTypeImporter;
     this.PermissionsImporter = permissionsImporter;
     this.UserGroupImporter   = permissionsImporter?.UserGroupImporter;
 }
Exemple #5
0
        public static int MainLoop(string[] args)
        {
            ILog   log     = null;
            string baseDir = Directory.GetCurrentDirectory();
            // Initialize log4j
            Configuration options = new Configuration(baseDir, args);

            if (options.help)
            {
                Console.Error.WriteLine(options.GetUsage());
                return(1);
            }
            List <string> errors = options.ValidateConfiguration();

            if (errors.Count > 0)
            {
                Console.Error.WriteLine(string.Format("{0} Configuration Errors detected:", errors.Count));
                foreach (string e in errors)
                {
                    Console.Error.WriteLine(string.Format("\t* {0}", e));
                }
                return(2);
            }

            System.IO.Directory.CreateDirectory(options.caches);

            string logDir = string.Format("{0}\\logs", baseDir);

            System.IO.Directory.CreateDirectory(logDir);

            Environment.SetEnvironmentVariable("CMF_LOGDATE", string.Format("{0:yyyyMMdd-HHmmss}", DateTime.Now));
            Environment.SetEnvironmentVariable("CMF_LOGDIR", logDir);

            XmlConfigurator.Configure(new FileInfo(string.Format("{0}\\log4net.xml", baseDir)));
            LOG = log = LogManager.GetLogger(typeof(Launcher));
            log.Info("Initializing Application");

            if (options.indexOnly)
            {
                ImportContext  importContext  = new ImportContext(null, options.content, options.metadata, options.caches);
                FormatResolver formatResolver = new FormatResolver(importContext);
                new DocumentImporter(new FolderImporter(importContext), formatResolver, options.locationMode, options.fixExtensions).StoreLocationIndex();
                return(0);
            }

            ServicePointManager.MaxServicePointIdleTime = (int)SharePointSession.TIME_OUT.TotalMilliseconds;
            ServicePointManager.SetTcpKeepAlive(true, (int)SharePointSession.TIME_OUT.TotalMilliseconds, 60000);
            ServicePointManager.DefaultConnectionLimit = options.threads * 10;

            using (DirectoryEntry ldapDirectory = BindToLDAP(options))
            {
                log.Info(string.Format("Using SharePoint at [{0}]", options.siteUrl));

                string userString = options.user;
                if (!string.IsNullOrWhiteSpace(options.domain))
                {
                    userString = string.Format("{0}@{1}", userString, options.domain);
                }

                SecureString userPassword = null;
                if (!string.IsNullOrWhiteSpace(options.user))
                {
                    if (options.password == null)
                    {
                        Console.Write(string.Format("Enter The Sharepoint Password for [{0}]: ", userString));
                        userPassword = Tools.ReadPassword();
                    }
                    else
                    {
                        String pass = CRYPT.Decrypt(options.password);
                        pass = CRYPT.Encrypt(pass);
                        log.Info(string.Format("Using stored credentials for [{0}] = [{1}]", userString, pass));
                        userPassword = new SecureString();
                        foreach (char c in CRYPT.Decrypt(pass))
                        {
                            userPassword.AppendChar(c);
                        }
                    }
                }

                using (SharePointSessionFactory sessionFactory = new SharePointSessionFactory(new SharePointSessionInfo(options.siteUrl, options.user, userPassword, options.domain, options.applicationId, options.certificateKey, options.certificatePass, options.library, options.reuseCount)))
                {
                    ImportContext importContext = new ImportContext(sessionFactory, options.content, options.metadata, options.caches);
                    using (ObjectPool <SharePointSession> .Ref sessionRef = sessionFactory.GetSession())
                    {
                        SharePointSession session       = sessionRef.Target;
                        ClientContext     clientContext = session.ClientContext;
                        List documentLibrary            = sessionRef.Target.DocumentLibrary;
                        // We configure the document library as required
                        documentLibrary.EnableVersioning    = true;
                        documentLibrary.EnableMinorVersions = true;
                        documentLibrary.ForceCheckout       = false;
                        documentLibrary.ContentTypesEnabled = true;
                        // documentLibrary.MajorVersionLimit = 50000;
                        // documentLibrary.MajorWithMinorVersionsLimit = 50000;
                        documentLibrary.Update();
                        session.ExecuteQuery();
                    }

                    FormatResolver formatResolver = new FormatResolver(importContext);

                    ContentTypeImporter contentTypeImporter = null;
                    for (int i = 0; i <= options.retries; i++)
                    {
                        try
                        {
                            contentTypeImporter = new ContentTypeImporter(importContext, options.library, options.cleanTypes);
                            break;
                        }
                        catch (Exception e)
                        {
                            contentTypeImporter = null;
                            log.Warn("WARNING: ContentTypeImporter failed to initialize due to an exception", e);
                        }
                    }
                    if (contentTypeImporter == null)
                    {
                        log.Error(string.Format("ContentTypeImporter failed to initialize after {0} attempts", options.retries + 1));
                        return(3);
                    }

                    UserGroupImporter userGroupImporter = null;
                    for (int i = 0; i <= options.retries; i++)
                    {
                        try
                        {
                            userGroupImporter = new UserGroupImporter(importContext, ldapDirectory, options.ldapSyncDomain, options.fallbackUser, options.internalUser, options.fallbackGroup, options.internalGroup);
                            break;
                        }
                        catch (Exception e)
                        {
                            userGroupImporter = null;
                            log.Warn("WARNING: UserGroupImporter failed to initialize due to an exception", e);
                        }
                    }
                    if (userGroupImporter == null)
                    {
                        log.Error(string.Format("UserGroupImporter failed to initialize after {0} attempts", options.retries + 1));
                        return(4);
                    }

                    PermissionsImporter permissionsImporter = new PermissionsImporter(userGroupImporter);
                    FolderImporter      folderImporter      = new FolderImporter(contentTypeImporter, permissionsImporter);
                    DocumentImporter    documentImporter    = new DocumentImporter(folderImporter, formatResolver, options.locationMode, options.fixExtensions);
                    bool aborted = false;

                    Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e)
                    {
                        if (aborted)
                        {
                            return;
                        }
                        aborted  = true;
                        e.Cancel = true;
                        documentImporter.Abort = true;
                        folderImporter.Abort   = true;
                        string msg = "Program Interrupted (hit Ctrl-C again to terminate immediately)";
                        if (log == null)
                        {
                            Console.WriteLine(msg);
                        }
                        else
                        {
                            log.Warn(msg);
                        }
                    };

                    try
                    {
                        documentImporter.StoreDocuments(options.threads, options.simulationMode, options.locationMode, options.autoPublish, options.retries);
                        folderImporter.FinalizeFolders(options.threads, options.retries);
                        documentImporter.StoreLocationIndex();
                    }
                    finally
                    {
                        log.Info(documentImporter.ProcessingReport);
                        log.Info(folderImporter.ProcessingReport);
                    }
                    return(aborted ? 1 : 0);
                }
            }
        }
Exemple #6
0
 protected override Principal ResolvePrincipal(ClientContext clientContext, UserGroupImporter userGroupImporter)
 {
     return(userGroupImporter.ResolveUser(clientContext, this.Name));
 }
Exemple #7
0
 protected abstract Principal ResolvePrincipal(ClientContext clientContext, UserGroupImporter userGroupImporter);