Пример #1
0
        public void InvokeUserUnban(Authentication authentication, User user)
        {
            this.CremaHost.DebugMethod(authentication, this, nameof(InvokeUserUnban), user);

            try
            {
                var userInfo = user.SerializationInfo;
                userInfo.BanInfo = (BanSerializationInfo)BanInfo.Empty;

                var categories = from UserCategory item in this.Context.Categories
                                 select item.Path;

                var users = from User item in this.Context.Users
                            select userInfo.ID == item.ID ? userInfo : item.SerializationInfo;

                var serializationInfo = new UserContextSerializationInfo()
                {
                    Version    = CremaSchema.VersionValue,
                    Categories = categories.ToArray(),
                    Users      = users.ToArray(),
                };

                var xml = DataContractSerializerUtility.GetString(serializationInfo, true);
                this.Repository.Modify(this.Context.UserFilePath, xml);
            }
            catch (Exception e)
            {
                this.CremaHost.Error(e);
                this.Repository.Revert();
                throw e;
            }
        }
Пример #2
0
        public void InvokeUserCreate(Authentication authentication, UserSerializationInfo userInfo)
        {
            this.CremaHost.DebugMethod(authentication, this, nameof(InvokeUserCreate), userInfo.ID, userInfo.Authority, userInfo.CategoryPath);
            try
            {
                var categories = from UserCategory item in this.Context.Categories
                                 select item.Path;

                var users    = from User item in this.Context.Users select item.SerializationInfo;
                var userList = users.ToList();
                userList.Add(userInfo);

                var serializationInfo = new UserContextSerializationInfo()
                {
                    Version    = CremaSchema.VersionValue,
                    Categories = categories.ToArray(),
                    Users      = userList.ToArray(),
                };

                var xml = DataContractSerializerUtility.GetString(serializationInfo, true);

                this.Repository.Modify(this.Context.UserFilePath, xml);
            }
            catch (Exception e)
            {
                this.CremaHost.Error(e);
                this.Repository.Revert();
                throw e;
            }
        }
Пример #3
0
        public void InvokeCategoryCreate(Authentication authentication, string name, string parentPath)
        {
            this.CremaHost.DebugMethod(authentication, this, nameof(InvokeCategoryCreate), name, parentPath);

            try
            {
                var categories = from UserCategory item in this.Context.Categories
                                 where item != this.Root
                                 select item.Path;

                var categoryList = categories.ToList();
                categoryList.Add(new CategoryName(parentPath, name));

                var users = from User item in this.Context.Users
                            select item.SerializationInfo;

                var serializationInfo = new UserContextSerializationInfo()
                {
                    Version    = CremaSchema.VersionValue,
                    Categories = categoryList.OrderBy(item => item).ToArray(),
                    Users      = users.ToArray(),
                };

                var xml = DataContractSerializerUtility.GetString(serializationInfo, true);
                this.Repository.Modify(this.Context.UserFilePath, xml);
            }
            catch (Exception e)
            {
                this.CremaHost.Error(e);
                this.Repository.Revert();
                throw e;
            }
        }
Пример #4
0
        public void Post(DomainActionBase action)
        {
            if (this.isEnabled == false)
            {
                return;
            }

            var message = string.Empty;

            this.current = action;
            action.ID    = this.id++;

            var s = XmlSerializerUtility.GetSerializer(action.GetType());

            var ns = new XmlSerializerNamespaces();

            ns.Add(string.Empty, string.Empty);
            ns.Add("fn", action.GetType().AssemblyQualifiedName);

            using (var sw = new Utf8StringWriter())
                using (var writer = XmlWriter.Create(sw, writerSettings))
                {
                    DataContractSerializerUtility.Write(writer, action);
                    writer.Close();
                    message = sw.ToString();
                }

            this.postedWriter.WriteLine(message);
        }
Пример #5
0
        public void InvokeCategoryDelete(Authentication authentication, UserCategory category)
        {
            this.CremaHost.DebugMethod(authentication, this, nameof(InvokeCategoryDelete), category);

            try
            {
                var categories = from UserCategory item in this.Context.Categories
                                 where item != this.Root || item.Path.StartsWith(category.Path) == false
                                 select item.Path;

                var users = from User item in this.Context.Users
                            select item.SerializationInfo;

                var serializationInfo = new UserContextSerializationInfo()
                {
                    Version    = CremaSchema.VersionValue,
                    Categories = categories.ToArray(),
                    Users      = users.ToArray(),
                };

                var xml = DataContractSerializerUtility.GetString(serializationInfo, true);
                this.Repository.Modify(this.Context.UserFilePath, xml);
            }
            catch (Exception e)
            {
                this.CremaHost.Error(e);
                this.Repository.Revert();
                throw e;
            }
        }
Пример #6
0
        private void CollectPostedActions()
        {
            var postedPath = Path.Combine(this.workingPath, DomainLogger.PostedFileName);

            using (var reader = XmlReader.Create(postedPath, readerSettings))
            {
                reader.Read();
                while (reader.EOF != true)
                {
                    DomainActionBase actionObject = null;
                    if (reader.Name == typeof(NewRowAction).Name)
                    {
                        actionObject = DataContractSerializerUtility.Read <NewRowAction>(reader);
                    }
                    else if (reader.Name == typeof(RemoveRowAction).Name)
                    {
                        actionObject = DataContractSerializerUtility.Read <RemoveRowAction>(reader);
                    }
                    else if (reader.Name == typeof(SetRowAction).Name)
                    {
                        actionObject = DataContractSerializerUtility.Read <SetRowAction>(reader);
                    }
                    else if (reader.Name == typeof(SetPropertyAction).Name)
                    {
                        actionObject = DataContractSerializerUtility.Read <SetPropertyAction>(reader);
                    }
                    else if (reader.Name == typeof(JoinAction).Name)
                    {
                        actionObject = DataContractSerializerUtility.Read <JoinAction>(reader);
                    }
                    else if (reader.Name == typeof(DisjoinAction).Name)
                    {
                        actionObject = DataContractSerializerUtility.Read <DisjoinAction>(reader);
                    }
                    else if (reader.Name == typeof(KickAction).Name)
                    {
                        actionObject = DataContractSerializerUtility.Read <KickAction>(reader);
                    }
                    else if (reader.Name == typeof(SetOwnerAction).Name)
                    {
                        actionObject = DataContractSerializerUtility.Read <SetOwnerAction>(reader);
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }

                    this.lastID = actionObject.ID;

                    if (this.completedActions.Contains(actionObject.ID) == false)
                    {
                        continue;
                    }

                    this.postedActions.Add(actionObject);
                }
            }
        }
Пример #7
0
        private void WriteUsers()
        {
            var categories = from UserCategory item in this.Categories
                             where item != this.Root
                             select item.Path;
            var users = from User item in this.Users
                        select item.SerializationInfo;

            var serializationInfo = new UserContextSerializationInfo()
            {
                Version    = CremaSchema.VersionValue,
                Categories = categories.ToArray(),
                Users      = users.ToArray(),
            };

            var xml = DataContractSerializerUtility.GetString(serializationInfo, true);
        }
Пример #8
0
        public void Initialize()
        {
            this.cremaHost.Debug("Load user data...");

            if (File.Exists(this.userFilePath) == true)
            {
                var serializationInfo = DataContractSerializerUtility.Read <UserContextSerializationInfo>(this.userFilePath);

                foreach (var item in serializationInfo.Categories)
                {
                    if (item == this.Root.Path)
                    {
                        continue;
                    }
                    this.Categories.Prepare(item);
                }

                for (var i = 0; i < serializationInfo.Users.Length; i++)
                {
                    var item = serializationInfo.Users[i];
                    if (serializationInfo.Version == null)
                    {
                        item.BanInfo = (BanSerializationInfo)BanInfo.Empty;
                    }
                    var user = this.Users.AddNew(item.ID, item.CategoryPath);
                    user.Initialize((UserInfo)item, (BanInfo)item.BanInfo);
                    user.Password = UserContext.StringToSecureString(item.Password);
                }
            }
            else
            {
                var user     = this.Users.AddNew(Authentication.AdminID, PathUtility.Separator);
                var userInfo = new UserInfo()
                {
                    ID           = Authentication.AdminID,
                    Name         = Authentication.AdminName,
                    CategoryPath = PathUtility.Separator,
                    Authority    = Authority.Admin,
                };
                user.Initialize(userInfo, BanInfo.Empty);
                user.Password = UserContext.StringToSecureString(Authentication.AdminID.Encrypt());
            }

            this.cremaHost.Debug("Loading complete!");
        }
Пример #9
0
        public void InvokeCategoryMove(Authentication authentication, UserCategory category, string parentPath)
        {
            this.CremaHost.DebugMethod(authentication, this, nameof(InvokeCategoryMove), category, parentPath);

            try
            {
                var categoryPath = (string)new CategoryName(parentPath, category.Name);

                var categories = from UserCategory item in this.Context.Categories
                                 where item != this.Root
                                 select item.Path;

                var users = from User item in this.Context.Users
                            select item.SerializationInfo;

                var categoryArray = categories.ToArray();
                var userArray     = users.ToArray();

                for (var i = 0; i < categoryArray.Length; i++)
                {
                    categoryArray[i] = Regex.Replace(categoryArray[i], "^" + category.Path, categoryPath);
                }

                for (var i = 0; i < userArray.Length; i++)
                {
                    userArray[i].CategoryPath = Regex.Replace(userArray[i].CategoryPath, "^" + category.Path, categoryPath);
                }

                var serializationInfo = new UserContextSerializationInfo()
                {
                    Version    = CremaSchema.VersionValue,
                    Categories = categoryArray,
                    Users      = userArray,
                };

                var xml = DataContractSerializerUtility.GetString(serializationInfo, true);
                this.Repository.Modify(this.Context.UserFilePath, xml);
            }
            catch (Exception e)
            {
                this.CremaHost.Error(e);
                this.Repository.Revert();
                throw e;
            }
        }
Пример #10
0
        public object Deserialize(string itemPath, Type type, ObjectSerializerSettings settings)
        {
            if (type == typeof(CremaDataTable))
            {
                throw new NotImplementedException();
            }
            else if (type == typeof(CremaDataType))
            {
                var extension = settings.Extension != string.Empty ? settings.Extension : CremaSchema.SchemaExtension;
                var filename  = itemPath + extension;
                var dataSet   = new CremaDataSet();
                var dataType  = CremaDataType.ReadSchema(filename);
                dataSet.Types.Add(dataType);
                return(dataType);
            }
            else if (type == typeof(CremaDataSet))
            {
                if (settings is CremaDataSetSerializerSettings props)
                {
                    var dataSet    = CremaDataSet.Create(props.SignatureDateProvider);
                    var typePaths  = props.TypePaths.Select(item => item + CremaSchema.SchemaExtension).ToArray();
                    var tablePaths = props.TablePaths.Select(item => item + CremaSchema.XmlExtension).ToArray();

                    dataSet.ReadMany(typePaths, tablePaths, props.SchemaOnly);
                    dataSet.AcceptChanges();

                    return(dataSet);
                }
                else
                {
                    return(CremaDataSet.ReadFromDirectory(itemPath));
                }
            }
            else
            {
                var extension = settings.Extension != string.Empty ? settings.Extension : CremaSchema.XmlExtension;
                var filename  = itemPath + extension;
                return(DataContractSerializerUtility.Read(filename, type));
            }
        }
Пример #11
0
        public static void GenerateDefaultUserInfos(string repositoryPath)
        {
            var filename      = UserContext.GenerateUsersFilePath(repositoryPath);
            var designedInfo  = new SignatureDate(Authentication.SystemID, DateTime.UtcNow);
            var administrator = new UserSerializationInfo()
            {
                ID               = Authentication.AdminID,
                Name             = Authentication.AdminName,
                CategoryName     = string.Empty,
                Authority        = Authority.Admin,
                Password         = Authentication.AdminID.Encrypt(),
                CreationInfo     = designedInfo,
                ModificationInfo = designedInfo,
                BanInfo          = (BanSerializationInfo)BanInfo.Empty,
            };

#if DEBUG
            var users = new List <UserSerializationInfo>
            {
                administrator
            };
            for (var i = 0; i < 0; i++)
            {
                var admin = new UserSerializationInfo()
                {
                    ID               = "admin" + i,
                    Name             = "관리자" + i,
                    CategoryName     = "Administrators",
                    Authority        = Authority.Admin,
                    Password         = "******".Encrypt(),
                    CreationInfo     = designedInfo,
                    ModificationInfo = designedInfo,
                    BanInfo          = (BanSerializationInfo)BanInfo.Empty,
                };

                var member = new UserSerializationInfo()
                {
                    ID               = "member" + i,
                    Name             = "구성원" + i,
                    CategoryName     = "Members",
                    Authority        = Authority.Member,
                    Password         = "******".Encrypt(),
                    CreationInfo     = designedInfo,
                    ModificationInfo = designedInfo,
                    BanInfo          = (BanSerializationInfo)BanInfo.Empty,
                };

                var guest = new UserSerializationInfo()
                {
                    ID               = "guest" + i,
                    Name             = "손님" + i,
                    CategoryName     = "Guests",
                    Authority        = Authority.Guest,
                    Password         = "******".Encrypt(),
                    CreationInfo     = designedInfo,
                    ModificationInfo = designedInfo,
                    BanInfo          = (BanSerializationInfo)BanInfo.Empty,
                };

                users.Add(admin);
                users.Add(member);
                users.Add(guest);
            }

            var serializationInfo = new UserContextSerializationInfo()
            {
                Version    = CremaSchema.VersionValue,
                Categories = new string[] { "/Administrators/", "/Members/", "/Guests/" },
                Users      = users.ToArray(),
            };
#else
            var serializationInfo = new UserContextSerializationInfo()
            {
                Version    = CremaSchema.VersionValue,
                Categories = new string[] { },
                Users      = new UserSerializationInfo[] { administrator },
            };
#endif
            //foreach (var item in serializationInfo.Categories)
            //{
            //    var basePath = Path.Combine(Path.GetDirectoryName(filename), "users");
            //    var localPath = PathUtility.ConvertFromUri(basePath + item);
            //    DirectoryUtility.Prepare(localPath);
            //}

            //foreach (var item in serializationInfo.Users)
            //{
            //    var basePath = Path.Combine(Path.GetDirectoryName(filename), "users");
            //    var localPath = PathUtility.ConvertFromUri(basePath + item.CategoryPath + item.ID + ".xml");
            //    FileUtility.WriteAllText(DataContractSerializerUtility.GetString(item), localPath);
            //}

            DataContractSerializerUtility.Write(filename, serializationInfo, true);
        }