Commit 5968301d1f8b49d5fffaa98fe36eca9a0343f60f

Authored by Schwirg László
1 parent e0544dd6

v1.13.0.0

- user kezelés funkcióinak bővítése (init action blokkok)
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - CommandLineParser.cs
... ... @@ -198,6 +198,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.CommandLineParserNS
198 198 public static class CreateSuperuser { public const string KEY = "CSU"; }
199 199 public static class CreateAdminusers { public const string KEY = "CAU"; }
200 200 public static class DeleteUsers { public const string KEY = "DEU"; }
  201 + public static class ExecuteInitAction{ public const string KEY = "EIA"; }
201 202 }
202 203 }
203 204 public static class WebApplicationManager
... ...
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools - Membership.cs
... ... @@ -136,33 +136,41 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
136 136 {
137 137 string rgnamelist = string.Join(",", MembershipDBContext.RoleGroups.Select(rg => rg.Name).ToArray());
138 138 if (!string.IsNullOrWhiteSpace(rgnamelist)) { Assign.RoleGroupsToUsers(rgnamelist, username); }
139   - foreach (var rn in Roles.GetAllRoles())
  139 + foreach (var rn in System.Web.Security.Roles.GetAllRoles())
140 140 {
141   - if (!Users.IsInRole(username, rn)) { Roles.AddUserToRole(username, rn); }
  141 + if (!Users.IsInRole(username, rn)) { System.Web.Security.Roles.AddUserToRole(username, rn); }
142 142 }
143 143 }
144 144 else if (administrator)
145 145 {
146   - if (!Roles.IsUserInRole(username, Constants.ROLENAME_ADMINISTRATOR)) { Roles.AddUserToRole(username, Constants.ROLENAME_ADMINISTRATOR); }
147   - if (!Roles.IsUserInRole(username, Constants.ROLENAME_ADMIN)) { Roles.AddUserToRole(username, Constants.ROLENAME_ADMIN); }
  146 + if (!System.Web.Security.Roles.IsUserInRole(username, Constants.ROLENAME_ADMINISTRATOR)) { System.Web.Security.Roles.AddUserToRole(username, Constants.ROLENAME_ADMINISTRATOR); }
  147 + if (!System.Web.Security.Roles.IsUserInRole(username, Constants.ROLENAME_ADMIN)) { System.Web.Security.Roles.AddUserToRole(username, Constants.ROLENAME_ADMIN); }
148 148 }
149 149  
150 150 string[] selectedrolenames;
151   - if (rolenames != null)
  151 + if (rolenames != null && rolenames.Any())
152 152 {
153   - selectedrolenames = rolenames.Contains("*") ? Roles.GetAllRoles() : rolenames;
  153 + selectedrolenames = rolenames.Contains("*") ? System.Web.Security.Roles.GetAllRoles() : rolenames;
154 154 if (selectedrolenames != null && selectedrolenames.Any())
155 155 {
156   - foreach (var rname in selectedrolenames) { if (!Roles.IsUserInRole(username, rname)) { Roles.AddUserToRole(username, rname); } }
  156 + foreach (var rname in selectedrolenames)
  157 + {
  158 + if (string.IsNullOrWhiteSpace(rname)) { continue; }
  159 + if (!System.Web.Security.Roles.IsUserInRole(username, rname)) { System.Web.Security.Roles.AddUserToRole(username, rname); }
  160 + }
157 161 }
158 162 }
159 163 string[] selectedrolegroupnames;
160   - if (rolegroupnames != null)
  164 + if (rolegroupnames != null && rolegroupnames.Any())
161 165 {
162 166 selectedrolegroupnames = rolegroupnames.Contains("*") ? RoleGroups.GetAllNames().ToArray() : rolegroupnames;
163 167 if (selectedrolegroupnames != null && selectedrolegroupnames.Any())
164 168 {
165   - foreach (var rgname in selectedrolegroupnames) { if (!RoleGroups.IsUserInRoleGroup(username, rgname)) { Assign.RoleGroupsToUsers(rgname, username); } }
  169 + foreach (var rgname in selectedrolegroupnames)
  170 + {
  171 + if (string.IsNullOrWhiteSpace(rgname)) { continue; }
  172 + if (!RoleGroups.IsUserInRoleGroup(username, rgname)) { Assign.RoleGroupsToUsers(rgname, username); }
  173 + }
166 174 }
167 175 }
168 176 return user;
... ... @@ -172,24 +180,24 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
172 180 public static void CreateAdminRolesAndUsers()
173 181 {
174 182 MembershipUser user;
175   - if (!Roles.RoleExists(Constants.ROLENAME_ADMINISTRATOR)) { Roles.CreateRole(Constants.ROLENAME_ADMINISTRATOR); }
176   - if (!Roles.RoleExists(Constants.ROLENAME_ADMIN)) { Roles.CreateRole(Constants.ROLENAME_ADMIN); }
  183 + if (!System.Web.Security.Roles.RoleExists(Constants.ROLENAME_ADMINISTRATOR)) { System.Web.Security.Roles.CreateRole(Constants.ROLENAME_ADMINISTRATOR); }
  184 + if (!System.Web.Security.Roles.RoleExists(Constants.ROLENAME_ADMIN)) { System.Web.Security.Roles.CreateRole(Constants.ROLENAME_ADMIN); }
177 185  
178 186 user = Membership.GetUser(Constants.USERNAME_ADMIN);
179 187 if (user == null)
180 188 {
181 189 user = Membership.CreateUser(Constants.USERNAME_ADMIN, Constants.PASSWORD_ADMIN);
182 190 }
183   - if (!Roles.IsUserInRole(Constants.USERNAME_ADMIN, Constants.ROLENAME_ADMINISTRATOR)) { Roles.AddUserToRole(Constants.USERNAME_ADMIN, Constants.ROLENAME_ADMINISTRATOR); }
184   - if (!Roles.IsUserInRole(Constants.USERNAME_ADMIN, Constants.ROLENAME_ADMIN)) { Roles.AddUserToRole(Constants.USERNAME_ADMIN, Constants.ROLENAME_ADMIN); }
  191 + if (!System.Web.Security.Roles.IsUserInRole(Constants.USERNAME_ADMIN, Constants.ROLENAME_ADMINISTRATOR)) { System.Web.Security.Roles.AddUserToRole(Constants.USERNAME_ADMIN, Constants.ROLENAME_ADMINISTRATOR); }
  192 + if (!System.Web.Security.Roles.IsUserInRole(Constants.USERNAME_ADMIN, Constants.ROLENAME_ADMIN)) { System.Web.Security.Roles.AddUserToRole(Constants.USERNAME_ADMIN, Constants.ROLENAME_ADMIN); }
185 193  
186 194 user = Membership.GetUser(Constants.USERNAME_ADMINISTRATOR);
187 195 if (user == null)
188 196 {
189 197 user = Membership.CreateUser(Constants.USERNAME_ADMINISTRATOR, Constants.PASSWORD_ADMINISTRATOR);
190 198 }
191   - if (!Roles.IsUserInRole(Constants.USERNAME_ADMINISTRATOR, Constants.ROLENAME_ADMINISTRATOR)) { Roles.AddUserToRole(Constants.USERNAME_ADMINISTRATOR, Constants.ROLENAME_ADMINISTRATOR); }
192   - if (!Roles.IsUserInRole(Constants.USERNAME_ADMINISTRATOR, Constants.ROLENAME_ADMIN)) { Roles.AddUserToRole(Constants.USERNAME_ADMINISTRATOR, Constants.ROLENAME_ADMIN); }
  199 + if (!System.Web.Security.Roles.IsUserInRole(Constants.USERNAME_ADMINISTRATOR, Constants.ROLENAME_ADMINISTRATOR)) { System.Web.Security.Roles.AddUserToRole(Constants.USERNAME_ADMINISTRATOR, Constants.ROLENAME_ADMINISTRATOR); }
  200 + if (!System.Web.Security.Roles.IsUserInRole(Constants.USERNAME_ADMINISTRATOR, Constants.ROLENAME_ADMIN)) { System.Web.Security.Roles.AddUserToRole(Constants.USERNAME_ADMINISTRATOR, Constants.ROLENAME_ADMIN); }
193 201 }
194 202 #endregion CreateAdminRolesAndUsers
195 203 #region IsInRole public method
... ... @@ -397,6 +405,109 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
397 405 #endregion Remove methods
398 406 }
399 407 #endregion RoleGroups
  408 + #region Roles
  409 + public static class Roles
  410 + {
  411 + #region Get methods
  412 + /// <summary>
  413 + /// Szerep lekérése az egyedi azonosítója alapján.
  414 + /// </summary>
  415 + /// <param name="id">A keresett funkció azonosítója.</param>
  416 + /// <returns>A kért szerepkör, egyébként null.</returns>
  417 + public static DAL.Role Get(Guid id)
  418 + {
  419 + return MembershipDBContext.Roles.FirstOrDefault(x => x.RoleId == id);
  420 + }
  421 + /// <summary>
  422 + /// Szerep lekérése az egyedi neve alapján.
  423 + /// </summary>
  424 + /// <param name="name">A keresett szerep egyedi neve.</param>
  425 + /// <returns>A kért szerep, egyébként null.</returns>
  426 + public static DAL.Role Get(string name)
  427 + {
  428 + return MembershipDBContext.Roles.FirstOrDefault(x => x.RoleName== name);
  429 + }
  430 + /// <summary>
  431 + /// Szerepek neveinek lekérése.
  432 + /// </summary>
  433 + /// <returns>A szerepek neveinek listája.</returns>
  434 + public static List<string> GetAllNames()
  435 + {
  436 + return MembershipDBContext.Roles.Select(r => r.RoleName).ToList();
  437 + }
  438 + /// <summary>
  439 + /// A megadott nevű szerep benne van-e a megadott szerepkörben tartozik-e.
  440 + /// </summary>
  441 + /// <param name="rolename"></param>
  442 + /// <param name="rolegroupname"></param>
  443 + /// <returns>true, ha igen</returns>
  444 + public static bool IsRoleInRoleGroup(string rolename, string rolegroupname)
  445 + {
  446 + return MembershipDBContext.RoleGroupRoles.Select(rtorg => rtorg.Role.RoleName == rolename && rtorg.RoleGroup.Name == rolegroupname).ToList().Any();
  447 + }
  448 + #endregion Get methods
  449 +
  450 + #region Create method
  451 + /// <summary>
  452 + /// Szerep létrehozása.
  453 + /// </summary>
  454 + /// <param name="rolename">A létrehozandó szerep neve.</param>
  455 + /// <exception cref="ApplicationException">
  456 + /// Ha üres vagy null a szerep neve.
  457 + /// Ha már létezik a megadott név.
  458 + /// </exception>
  459 + public static void Create(string rolename, string appname=null)
  460 + {
  461 + if (String.IsNullOrWhiteSpace(rolename)) { throw new ApplicationException("Role név megadása kötelező!"); }
  462 + if (appname==null) { appname = MembershipDBContext.Applications.FirstOrDefault(a => a.ApplicationName == "/")?.ApplicationName; }
  463 + if (appname == null) { appname = MembershipDBContext.Applications.First()?.ApplicationName; }
  464 + if (appname==null) { throw new ApplicationException("Application nem létezik!"); }
  465 + var app = MembershipDBContext.Applications.FirstOrDefault(a => a.ApplicationName == appname);
  466 +
  467 + if (MembershipDBContext.Roles.Any(x => x.RoleName == rolename)) { throw new ApplicationException($"Role {rolename} already exist!"); }
  468 +
  469 + System.Web.Security.Roles.CreateRole(rolename);
  470 + var rolecreated = MembershipDBContext.Roles.First(x => x.RoleName == rolename);
  471 + if (rolecreated==null) { throw new ApplicationException($"Creating role failed. Role name:{rolename}!"); }
  472 + //MembershipDBContext.Roles.Add(new DAL.Role() { RoleName = rolename, ApplicationId=app.ApplicationId,Description=null, });
  473 + rolecreated.ApplicationId = app.ApplicationId;
  474 + MembershipDBContext.SaveChanges();
  475 + }
  476 + #endregion Create method
  477 +
  478 + #region Remove methods
  479 + /// <summary>
  480 + /// Szerep törlése az egyedi azonosítója megadásával.
  481 + /// A szerephez tartozó összerendelések is megszűnnek!
  482 + /// </summary>
  483 + /// <param name="id">Törlendő szerep egyedi azonosítója.</param>
  484 + /// <exception cref="ApplicationException">Ha nem található a törlendő szerep.</exception>
  485 + public static void Remove(int id)
  486 + {
  487 + var row = MembershipDBContext.Roles.Find(id);
  488 + if (row == null) { throw new ApplicationException("Role does not exist!!"); }
  489 + else { MembershipDBContext.Roles.Remove(row); MembershipDBContext.SaveChanges(); }
  490 + }
  491 + /// <summary>
  492 + /// Szerep törlése az egyedi neve megadásával.
  493 + /// A szerephez tartozó összerendelések is megszűnnek!
  494 + /// </summary>
  495 + /// <param name="name">Törlendő szerep egyedi neve.</param>
  496 + /// <exception cref="ApplicationException">Ha nem található a törlendő szerep.</exception>
  497 + public static void Remove(string name)
  498 + {
  499 + var row = MembershipDBContext.Roles.FirstOrDefault(x => x.RoleName == name);
  500 + if (row == null) { throw new ApplicationException("Role does not exist!!"); }
  501 + else
  502 + {
  503 + System.Web.Security.Roles.DeleteRole(name);
  504 + MembershipDBContext.Roles.Remove(row);
  505 + MembershipDBContext.SaveChanges();
  506 + }
  507 + }
  508 + #endregion Remove methods
  509 + }
  510 + #endregion Roles
400 511 #region Assign
401 512 public static class Assign
402 513 {
... ... @@ -433,7 +544,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
433 544 foreach (var username in usernamelist)
434 545 {
435 546 CheckUsersExists(username);
436   - if (!Users.IsInRole(username, rolename)) { Roles.AddUserToRole(username, rolename); }
  547 + if (!Users.IsInRole(username, rolename)) { System.Web.Security.Roles.AddUserToRole(username, rolename); }
437 548 }
438 549 }
439 550 }
... ... @@ -571,17 +682,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
571 682 if (user != null)
572 683 {
573 684 // eltávolítjuk az összes szerepkörét a felhasználónak, majd a felhasználóhoz tartozó UserRoleGroup-okban lévő Roles-okat adjuk hozzá a felhasználóhoz
574   - if (Roles.GetRolesForUser(user.UserName).Any())
  685 + if (System.Web.Security.Roles.GetRolesForUser(user.UserName).Any())
575 686 {
576   - Roles.RemoveUserFromRoles(user.UserName, Roles.GetRolesForUser(user.UserName));
  687 + System.Web.Security.Roles.RemoveUserFromRoles(user.UserName, System.Web.Security.Roles.GetRolesForUser(user.UserName));
577 688 }
578 689 foreach (DAL.RoleGroup urg in MembershipDBContext.RoleGroups.Where(x => x.Users.Any(y => y.UserId == userId)))
579 690 {
580 691 foreach (string roleName in urg.Roles.Select(x => x.Role.RoleName))
581 692 {
582   - if (!Roles.IsUserInRole(user.UserName, roleName))
  693 + if (!System.Web.Security.Roles.IsUserInRole(user.UserName, roleName))
583 694 {
584   - Roles.AddUserToRole(user.UserName, roleName);
  695 + System.Web.Security.Roles.AddUserToRole(user.UserName, roleName);
585 696 }
586 697 }
587 698 }
... ... @@ -794,6 +905,32 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
794 905 public string Description { get; set; }
795 906 }
796 907 #endregion table-Role
  908 + #region table-Application
  909 + /// <summary>
  910 + /// DefaultMembershipProvider által létrehozott User tábla.
  911 + /// </summary>
  912 + [Table("Applications", Schema = "dbo")]
  913 + public partial class Application
  914 + {
  915 + /// <summary>
  916 + /// Alkalmazás egyedi azonosítója.
  917 + /// </summary>
  918 + [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
  919 + public Guid ApplicationId { get; set; }
  920 +
  921 + /// <summary>
  922 + /// Szerep neve.
  923 + /// </summary>
  924 + [Required, MaxLength(256)]
  925 + public string ApplicationName { get; set; }
  926 +
  927 + /// <summary>
  928 + /// Alkalmazás rövid leírása.
  929 + /// </summary>
  930 + [MaxLength(256)]
  931 + public string Description { get; set; }
  932 + }
  933 + #endregion table-Application
797 934 #region table-SecondaryFunction
798 935 /// <summary>
799 936 /// Lehetséges funkciókat tartalmazó táblázat, mely funkciókhoz
... ... @@ -1044,7 +1181,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
1044 1181  
1045 1182 #region DbSets
1046 1183  
1047   - #region !!! A migrációból kivett két tábla. Ezeket a DefaultMembershipProvider kezeli és hozza létre. !!!
  1184 + #region !!! A migrációból kivett táblák. Ezeket a DefaultMembershipProvider kezeli és hozza létre. !!!
  1185 + public virtual DbSet<Application> Applications { get; set; }
1048 1186 public virtual DbSet<Role> Roles { get; set; }
1049 1187 public virtual DbSet<User> Users { get; set; }
1050 1188 #endregion !!! A migrációból kivett két tábla. Ezeket a DefaultMembershipProvider kezeli és hozza létre. !!!
... ...
Vrh.Log4Pro.MaintenanceConsole/Manager - UserManager.cs
... ... @@ -23,7 +23,7 @@ using System.Text.RegularExpressions;
23 23  
24 24 namespace Vrh.Log4Pro.MaintenanceConsole.UserManagerNS
25 25 {
26   - #region MaintenanceTools class
  26 + #region UserManager class
27 27 public static class UserManager
28 28 {
29 29 private static Log4ProUserManagerXmlProcessor Config;
... ... @@ -44,6 +44,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.UserManagerNS
44 44 .AddMenuItem(new Menu.Item(CLP.Module.Log4ProUserManager.Functions.CreateSuperuser.KEY, "Create superuser", CreateSuperuser, new Menu.ExecutorParameter(cfg: config)))
45 45 .AddMenuItem(new Menu.Item(CLP.Module.Log4ProUserManager.Functions.CreateAdminusers.KEY, "Create Admin and Administrator roles and users", CreateAdminusers, new Menu.ExecutorParameter(cfg: config, null)))
46 46 .AddMenuItem(new Menu.Item(CLP.Module.Log4ProUserManager.Functions.DeleteUsers.KEY, "Remove user", DeleteUsers, new Menu.ExecutorParameter(cfg: config, null)))
  47 + .AddMenuItem(new Menu.Item(CLP.Module.Log4ProUserManager.Functions.ExecuteInitAction.KEY, "Execute init actionblock", ExecuteInitActionBlock, new Menu.ExecutorParameter(cfg: config, null)))
47 48 .SetMenuHeaderDisplayer(UserListDisplayer)
48 49 .SetSelectionMode(Menu.SelectionMode.Single);
49 50 menufunctions.ExecuteMenu();
... ... @@ -70,6 +71,65 @@ namespace Vrh.Log4Pro.MaintenanceConsole.UserManagerNS
70 71 #endregion private UserListDisplayer
71 72  
72 73 #region First level Executors with UI
  74 + #region ExecuteInitActionBlock
  75 + private static object ExecuteInitActionBlock(object parameter, object o)
  76 + {
  77 + var config = (parameter as Menu.ExecutorParameter).GetConfig<Log4ProUserManagerXmlProcessor>();
  78 + if (config.InitActionBlockList == null || !config.InitActionBlockList.Any()) return o;
  79 +
  80 + var initactionblocknamelist = string.Join(",", config.InitActionBlockList.Select(iab => iab.Name).ToArray());
  81 + ColorConsole.WriteLine($"Select one init action block from this list: {initactionblocknamelist}", ConsoleColor.Yellow);
  82 + var iabname = ColorConsole.ReadLine($"Enter init action block name:", ConsoleColor.Yellow).ToLower();
  83 + if (iabname == "EX") { return null; }
  84 + var stepbystep = ColorConsole.ReadLine($"Do You want to execute step-by-step (true/false/yes/no/?:", ConsoleColor.Yellow).ToLower().Replace("yes","true")==bool.TrueString.ToLower();
  85 + if (iabname == "EX") { return null; }
  86 + try
  87 + {
  88 + var iab = config.InitActionBlockList.FirstOrDefault(_iab => _iab.Name.ToLower() == iabname);
  89 + if (iab == null) { throw new ApplicationException($"InitActionBlock with name '{iabname}' does not exist!"); }
  90 + foreach (var cr in iab.GetCreateRoleActions())
  91 + {
  92 + if (stepbystep)
  93 + {
  94 + ColorConsole.WriteLine($"Action:{cr.Type}, role names: {cr.Roles}.", ConsoleColor.Yellow);
  95 + var sel = ColorConsole.ReadLine($"Press enter to continue.", ConsoleColor.Gray); if (sel.ToLower() == "ex") return o;
  96 + }
  97 + foreach (var rn in cr.RoleArray) { try { MembershipTools.Roles.Create(rn); } catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }; }
  98 + }
  99 + foreach (var cr in iab.GetCreateRoleGroupActions())
  100 + {
  101 + if (stepbystep)
  102 + {
  103 + ColorConsole.WriteLine($"Action:{cr.Type}, rolegroup name: {cr.Name}, roles: {cr.Roles}.", ConsoleColor.Yellow);
  104 + var sel = ColorConsole.ReadLine($"Press enter to continue.", ConsoleColor.Gray); if (sel.ToLower() == "ex") return o;
  105 + }
  106 + try
  107 + {
  108 + MembershipTools.RoleGroups.Create(cr.Name);
  109 + MembershipTools.Assign.RolesToRoleGroups(cr.Roles, cr.Name);
  110 + } catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); };
  111 +
  112 + }
  113 + foreach (var cr in iab.GetCreateUserActions())
  114 + {
  115 + if (stepbystep)
  116 + {
  117 + var crtext = cr.Superuser ? $"superuser" : $"rolegroups: {cr.RoleGroups}, roles: {cr.Roles}";
  118 + ColorConsole.WriteLine($"Action:{cr.Type}, username: {cr.Name}[{cr.Password}], {crtext}.", ConsoleColor.Yellow);
  119 + var sel = ColorConsole.ReadLine($"Press enter to continue.", ConsoleColor.Gray); if (sel.ToLower() == "ex") return o;
  120 + }
  121 + try
  122 + {
  123 + MembershipTools.Users.Create(cr.Name, cr.Password, administrator: false, superuser: cr.Superuser, rolenames: cr.RoleArray, rolegroupnames: cr.RoleGroupArray);
  124 + }
  125 + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); };
  126 + }
  127 + ColorConsole.WriteLine($"Executing init action block '{iabname}' was successful!", ConsoleColor.Green);
  128 + }
  129 + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
  130 + return o;
  131 + }
  132 + #endregion ExecuteInitActionBlock
73 133 #region CreateSuperuser
74 134 private static object CreateSuperuser(object parameter, object o)
75 135 {
... ... @@ -123,7 +183,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.UserManagerNS
123 183 #endregion DeleteUsers
124 184 #endregion First level Executors with UI
125 185 }
126   - #endregion MaintenanceTools class
  186 + #endregion UserManager class
127 187 #region MaintenanceToolsXmlProcessor class
128 188 public class Log4ProUserManagerXmlProcessor : XmlParser
129 189 {
... ... @@ -131,6 +191,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.UserManagerNS
131 191 public string Xml_SQLConnectionString;
132 192 public string Xml_ProtectedUserNameCommaList;
133 193 public List<UserGroup> UserGroupList;
  194 + public List<InitActionBlock> InitActionBlockList;
134 195 public List<string> ProtectedUserNameList;
135 196 #endregion fields
136 197 #region constructor
... ... @@ -143,13 +204,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.UserManagerNS
143 204 if (string.IsNullOrEmpty(Xml_ProtectedUserNameCommaList)) { Xml_ProtectedUserNameCommaList = XmlStructure.Attributes.ProtectedUsernameList.Values.DEFAULT; }
144 205 ProtectedUserNameList = Xml_ProtectedUserNameCommaList.Split(',').ToList();
145 206 UserGroupList = new List<UserGroup>();
146   - var ugxmllist = RootElement.Element(XName.Get(nameof(XmlStructure.UserGroups))).Elements(XName.Get(nameof(XmlStructure.UserGroups.UserGroup)));
  207 + var ugxmllist = RootElement.Element(XName.Get(nameof(XmlStructure.UserGroups)))?.Elements(XName.Get(nameof(XmlStructure.UserGroups.UserGroup)));
147 208 if (ugxmllist!=null && ugxmllist.Any())
148 209 {
149   - foreach (var ugxml in ugxmllist)
150   - {
151   - UserGroupList.Add(new UserGroup(ugxml));
152   - };
  210 + foreach (var ugxml in ugxmllist) { UserGroupList.Add(new UserGroup(ugxml)); };
  211 + }
  212 + InitActionBlockList = new List<InitActionBlock>();
  213 + var iabxmllist = RootElement.Element(XName.Get(nameof(XmlStructure.InitActionBlocks)))?.Elements(XName.Get(nameof(XmlStructure.InitActionBlocks.InitActionBlock)));
  214 + if (iabxmllist != null && iabxmllist.Any())
  215 + {
  216 + foreach (var iabxml in iabxmllist) { InitActionBlockList.Add(new InitActionBlock(iabxml)); };
153 217 }
154 218 }
155 219 #region ProtectedUser
... ... @@ -173,6 +237,54 @@ namespace Vrh.Log4Pro.MaintenanceConsole.UserManagerNS
173 237 public static class ProtectedUsernameList { public static class Values { public const string DEFAULT = "Admin,Administrator"; } }
174 238  
175 239 }
  240 + public static class InitActionBlocks
  241 + {
  242 + public static class InitActionBlock
  243 + {
  244 + public static class Attributes
  245 + {
  246 + public static class Name { }
  247 + }
  248 + public static class CreateRoles
  249 + {
  250 + public static class Attributes
  251 + {
  252 + public static class Roles
  253 + {
  254 + public static class Values
  255 + {
  256 + public const string DEFAULT = "Admin,Administrator";
  257 + }
  258 + }
  259 + }
  260 + }
  261 + public static class CreateRoleGroup
  262 + {
  263 + public static class Attributes
  264 + {
  265 + public static class Name { }
  266 + public static class Roles { }
  267 + }
  268 + }
  269 + public static class CreateUser
  270 + {
  271 + public static class Attributes
  272 + {
  273 + public static class Name { }
  274 + public static class Password { }
  275 + public static class RoleGroups { }
  276 + public static class Roles { }
  277 + public static class Superuser
  278 + {
  279 + public static class Values
  280 + {
  281 + public const bool DEFAULT = false;
  282 + }
  283 + }
  284 + }
  285 + }
  286 + }
  287 + }
176 288 public static class UserGroups
177 289 {
178 290 public static class UserGroup
... ... @@ -199,6 +311,75 @@ namespace Vrh.Log4Pro.MaintenanceConsole.UserManagerNS
199 311 }
200 312 }
201 313 #endregion XmlStructure
  314 + #region InitActionParameters
  315 + public class InitActionBlock : XmlLinqBase
  316 + {
  317 + public InitActionBlock() { }
  318 + public InitActionBlock(XElement iabxml)
  319 + {
  320 + Name = iabxml.Attribute(XName.Get(nameof(XmlStructure.InitActionBlocks.InitActionBlock.Attributes.Name)))?.Value;
  321 + if (string.IsNullOrEmpty(Name)) { throw new Exception($"Attribute is mandatory! Name {nameof(XmlStructure.InitActionBlocks.InitActionBlock.Attributes.Name)}."); }
  322 +
  323 + InitActionList = new List<InitAction>();
  324 + var crlist = iabxml.Elements(XName.Get(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateRoles)));
  325 + if (crlist != null && crlist.Any()) { foreach (var cr in crlist) { InitActionList.Add(new CreateRoleAction(cr)); } }
  326 +
  327 + var crglist = iabxml.Elements(XName.Get(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateRoleGroup)));
  328 + if (crglist != null && crglist.Any()) { foreach (var crg in crglist) { InitActionList.Add(new CreateRoleGroupAction(crg)); } }
  329 +
  330 + var culist = iabxml.Elements(XName.Get(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateUser)));
  331 + if (culist != null && culist.Any()) { foreach (var cu in culist) { InitActionList.Add(new CreateUserAction(cu)); } }
  332 + }
  333 + public enum ActionType { CreateRole, CreateRoleGroup, CreateUser, }
  334 + public string Name;
  335 + public List<InitAction> InitActionList;
  336 + public List<InitAction> GetCreateRoleActions() { return InitActionList.Where(ia => ia.Type == Log4ProUserManagerXmlProcessor.InitActionBlock.ActionType.CreateRole).ToList(); }
  337 + public List<InitAction> GetCreateRoleGroupActions() { return InitActionList.Where(ia => ia.Type == Log4ProUserManagerXmlProcessor.InitActionBlock.ActionType.CreateRoleGroup).ToList(); }
  338 + public List<InitAction> GetCreateUserActions() { return InitActionList.Where(ia => ia.Type == Log4ProUserManagerXmlProcessor.InitActionBlock.ActionType.CreateUser).ToList(); }
  339 + }
  340 + public class CreateRoleAction : InitAction
  341 + {
  342 + public CreateRoleAction(XElement cr){ Type = InitActionBlock.ActionType.CreateRole; Roles = GetValue(cr.Attribute(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateRoles.Attributes.Roles)), nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateRoles.Attributes.Roles.Values.DEFAULT)); }
  343 + }
  344 + public class CreateRoleGroupAction : InitAction
  345 + {
  346 + public CreateRoleGroupAction(XElement crg)
  347 + {
  348 + Type = InitActionBlock.ActionType.CreateRoleGroup;
  349 + Name = crg.Attribute(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateRoleGroup.Attributes.Name)).Value;
  350 + Roles = crg.Attribute(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateRoleGroup.Attributes.Roles)).Value;
  351 + }
  352 + }
  353 + public class CreateUserAction : InitAction
  354 + {
  355 + public CreateUserAction(XElement cu)
  356 + {
  357 + Type = InitActionBlock.ActionType.CreateUser;
  358 + Name = cu.Attribute(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateUser.Attributes.Name)).Value;
  359 + if (string.IsNullOrWhiteSpace(Name)) { Name = "DEFAULT"; }
  360 + Password = cu.Attribute(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateUser.Attributes.Password))?.Value;
  361 + if (string.IsNullOrWhiteSpace(Password)) { Password = Name; }
  362 + RoleGroups = cu.Attribute(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateUser.Attributes.RoleGroups))?.Value;
  363 + if (string.IsNullOrWhiteSpace(RoleGroups)) { RoleGroups = ""; }
  364 + Roles = cu.Attribute(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateUser.Attributes.Roles))?.Value;
  365 + if (string.IsNullOrWhiteSpace(Roles)) { Roles = ""; }
  366 + var superuservaluestring = cu.Attribute(nameof(XmlStructure.InitActionBlocks.InitActionBlock.CreateUser.Attributes.Superuser))?.Value;
  367 + Superuser = !string.IsNullOrWhiteSpace(superuservaluestring) && (superuservaluestring.ToLower() == bool.TrueString.ToLower());
  368 + }
  369 + }
  370 + public class InitAction: XmlLinqBase
  371 + {
  372 + public InitActionBlock.ActionType Type;
  373 + public string Name;
  374 + public string Password;
  375 + public string Roles;
  376 + public string RoleGroups;
  377 + public string[] RoleArray { get { return Roles.Split(',', ';'); } }
  378 + public string[] RoleGroupArray { get { return RoleGroups.Split(',', ';'); } }
  379 + public bool Superuser;
  380 + }
  381 +
  382 + #endregion InitActionParameters
202 383 #region UserGroup
203 384 public class UserGroup:XmlLinqBase
204 385 {
... ...
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
... ... @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 32 // You can specify all the values or you can default the Build and Revision Numbers
33 33 // by using the '*' as shown below:
34 34 // [assembly: AssemblyVersion("1.0.*")]
35   -[assembly: AssemblyVersion("1.12.0.0")]
36   -[assembly: AssemblyFileVersion("1.12.0.0")]
  35 +[assembly: AssemblyVersion("1.13.0.0")]
  36 +[assembly: AssemblyFileVersion("1.13.0.0")]
... ...