[1729] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.Linq;
|
---|
| 4 | using System.Text;
|
---|
| 5 | using HeuristicLab.PluginInfrastructure;
|
---|
| 6 | using HeuristicLab.Security.Contracts.BusinessObjects;
|
---|
[1765] | 7 | using HeuristicLab.Hive.Server.Core;
|
---|
[1729] | 8 |
|
---|
| 9 | namespace HeuristicLab.Security.Core {
|
---|
| 10 | [ClassInfo(Name = "Security Test App",
|
---|
| 11 | Description = "Test Application for the Security Service",
|
---|
| 12 | AutoRestart = true)]
|
---|
| 13 | class SecurityCoreTest : ApplicationBase {
|
---|
[1765] | 14 |
|
---|
| 15 | SecurityManager manager = new SecurityManager();
|
---|
| 16 | PermissionManager permManager = new PermissionManager();
|
---|
| 17 |
|
---|
| 18 |
|
---|
[1729] | 19 | private void testGroups() {
|
---|
| 20 |
|
---|
| 21 | User user = new User();
|
---|
| 22 | user.Login = "anna";
|
---|
[1738] | 23 | user.SetHashedPassword("blubb");
|
---|
[1729] | 24 | user.Name = "Anna";
|
---|
| 25 | user = manager.AddNewUser(user);
|
---|
| 26 |
|
---|
| 27 | User user2 = new User();
|
---|
| 28 | user2.Login = "stefan";
|
---|
| 29 | user2.Name = "Stefan";
|
---|
| 30 |
|
---|
| 31 | UserGroup group = new UserGroup();
|
---|
| 32 | group.Name = "Students";
|
---|
| 33 |
|
---|
| 34 | UserGroup group2 = new UserGroup();
|
---|
| 35 | group2.Name = "Lazy Students";
|
---|
| 36 |
|
---|
| 37 | group.Members.Add(user);
|
---|
| 38 | group.Members.Add(group2);
|
---|
| 39 |
|
---|
| 40 | group2.Members.Add(user2);
|
---|
| 41 |
|
---|
| 42 | manager.AddNewUserGroup(group);
|
---|
| 43 |
|
---|
| 44 | group = manager.GetUserGroupByName("Students");
|
---|
| 45 | group2 = manager.GetUserGroupByName("Lazy Students");
|
---|
| 46 |
|
---|
| 47 | manager.RemoveUserGroup(group2.Id);
|
---|
| 48 |
|
---|
| 49 | group = manager.GetUserGroupByName("Students");
|
---|
| 50 | group2 = manager.GetUserGroupByName("Lazy Students");
|
---|
| 51 |
|
---|
| 52 | manager.RemoveUser(user.Id);
|
---|
| 53 |
|
---|
| 54 | group = manager.GetUserGroupByName("Students");
|
---|
| 55 | manager.RemoveUserGroup(group.Id);
|
---|
| 56 |
|
---|
| 57 | group = manager.GetUserGroupByName("Students");
|
---|
| 58 | manager.RemoveUser(user2.Id);
|
---|
| 59 | }
|
---|
| 60 |
|
---|
| 61 | private void testPermissions() {
|
---|
| 62 |
|
---|
| 63 | Permission permission = new Permission();
|
---|
| 64 | permission.Name = "ADD_JOBS";
|
---|
| 65 | permission.Description = "Add jobs";
|
---|
| 66 | permission.Plugin = "TestPlugin";
|
---|
| 67 |
|
---|
| 68 | manager.AddPermission(permission);
|
---|
| 69 |
|
---|
| 70 | permission = manager.GetPermissionById(permission.Id);
|
---|
| 71 |
|
---|
| 72 | User user = new User();
|
---|
| 73 | user.Login = "anna";
|
---|
[1738] | 74 | user.SetHashedPassword("blubb");
|
---|
[1729] | 75 | user.Name = "Anna";
|
---|
| 76 | user = manager.AddNewUser(user);
|
---|
| 77 |
|
---|
| 78 | manager.GrantPermission(user.Id, permission.Id, Guid.Empty);
|
---|
| 79 |
|
---|
| 80 | Guid sessionId = permManager.Authenticate("anna", "blubb");
|
---|
| 81 |
|
---|
| 82 | bool hasPermission =
|
---|
| 83 | permManager.CheckPermission(sessionId, permission.Id, Guid.Empty);
|
---|
| 84 |
|
---|
| 85 | manager.RevokePermission(user.Id, permission.Id, Guid.Empty);
|
---|
| 86 |
|
---|
| 87 | hasPermission =
|
---|
| 88 | permManager.CheckPermission(sessionId, permission.Id, Guid.Empty);
|
---|
| 89 |
|
---|
| 90 | permManager.EndSession(sessionId);
|
---|
| 91 |
|
---|
| 92 | manager.RemoveUser(user.Id);
|
---|
| 93 |
|
---|
| 94 | manager.RemovePermission(permission.Id);
|
---|
| 95 |
|
---|
| 96 | permission = manager.GetPermissionById(permission.Id);
|
---|
| 97 | }
|
---|
| 98 |
|
---|
| 99 | private void testPermissionsGroup() {
|
---|
| 100 |
|
---|
| 101 | User user = new User();
|
---|
| 102 | user.Login = "anna";
|
---|
[1738] | 103 | user.SetHashedPassword("blubb");
|
---|
[1729] | 104 | user.Name = "Anna";
|
---|
| 105 | user = manager.AddNewUser(user);
|
---|
| 106 |
|
---|
| 107 | User user2 = new User();
|
---|
| 108 | user2.Login = "stefan";
|
---|
[1738] | 109 | user2.SetHashedPassword("foo");
|
---|
[1729] | 110 | user2.Name = "Stefan";
|
---|
| 111 |
|
---|
| 112 | UserGroup group = new UserGroup();
|
---|
| 113 | group.Name = "Students";
|
---|
| 114 |
|
---|
| 115 | UserGroup group2 = new UserGroup();
|
---|
| 116 | group2.Name = "Lazy Students";
|
---|
| 117 |
|
---|
| 118 | group.Members.Add(user);
|
---|
| 119 | group.Members.Add(group2);
|
---|
| 120 |
|
---|
| 121 | group2.Members.Add(user2);
|
---|
| 122 |
|
---|
| 123 | manager.AddNewUserGroup(group);
|
---|
| 124 |
|
---|
| 125 | Permission permission = new Permission();
|
---|
| 126 | permission.Name = "ADD_JOBS";
|
---|
| 127 | permission.Description = "Add jobs";
|
---|
| 128 | permission.Plugin = "TestPlugin";
|
---|
| 129 |
|
---|
| 130 | manager.AddPermission(permission);
|
---|
| 131 |
|
---|
| 132 | manager.GrantPermission(group.Id, permission.Id, Guid.Empty);
|
---|
| 133 | manager.GrantPermission(group2.Id, permission.Id, Guid.Empty);
|
---|
| 134 |
|
---|
| 135 | Guid sessionId = permManager.Authenticate("anna", "blubb");
|
---|
| 136 |
|
---|
| 137 | bool hasPermission =
|
---|
| 138 | permManager.CheckPermission(sessionId, permission.Id, Guid.Empty);
|
---|
| 139 |
|
---|
| 140 | Guid sessionId2 = permManager.Authenticate("stefan", "foo");
|
---|
| 141 |
|
---|
| 142 | hasPermission =
|
---|
| 143 | permManager.CheckPermission(sessionId2, permission.Id, Guid.Empty);
|
---|
| 144 |
|
---|
| 145 | manager.RevokePermission(group.Id, permission.Id, Guid.Empty);
|
---|
| 146 |
|
---|
| 147 | hasPermission =
|
---|
| 148 | permManager.CheckPermission(sessionId, permission.Id, Guid.Empty);
|
---|
| 149 |
|
---|
| 150 | hasPermission =
|
---|
| 151 | permManager.CheckPermission(sessionId2, permission.Id, Guid.Empty);
|
---|
| 152 |
|
---|
| 153 | manager.RevokePermission(group2.Id, permission.Id, Guid.Empty);
|
---|
| 154 |
|
---|
| 155 | hasPermission =
|
---|
| 156 | permManager.CheckPermission(sessionId2, permission.Id, Guid.Empty);
|
---|
| 157 |
|
---|
| 158 | permManager.EndSession(sessionId);
|
---|
| 159 | permManager.EndSession(sessionId2);
|
---|
| 160 |
|
---|
| 161 | manager.RemoveUser(user.Id);
|
---|
| 162 | manager.RemoveUser(user2.Id);
|
---|
| 163 | manager.RemoveUserGroup(group.Id);
|
---|
| 164 | manager.RemoveUserGroup(group2.Id);
|
---|
| 165 |
|
---|
[1765] | 166 | manager.RemovePermission(permission.Id);
|
---|
[1729] | 167 | }
|
---|
[1765] | 168 | #region TEST DATA INSERT SECTION for MB
|
---|
| 169 |
|
---|
| 170 | private void InsertTestDataForPermissionCheck() {
|
---|
| 171 | int numberOfUsers = 10;
|
---|
| 172 |
|
---|
| 173 | List<User> users = new List<User>();
|
---|
| 174 | for (int i = 0; i < numberOfUsers; i++) {
|
---|
| 175 | users.Add(MB_InsertTestUser());
|
---|
| 176 | }
|
---|
| 177 | MB_AssignGroups(users);
|
---|
| 178 |
|
---|
| 179 | }
|
---|
| 180 |
|
---|
| 181 | private User MB_InsertTestUser() {
|
---|
| 182 | Random rand = new Random(DateTime.Now.Millisecond);
|
---|
| 183 | int usr = rand.Next(1000);
|
---|
| 184 | User user = new User();
|
---|
| 185 | user.Login = "test" + usr.ToString();
|
---|
| 186 | user.SetHashedPassword("test");
|
---|
| 187 | user.Name = "test" + usr.ToString();
|
---|
| 188 | return manager.AddNewUser(user);
|
---|
| 189 | }
|
---|
| 190 |
|
---|
| 191 | /// <summary>
|
---|
| 192 | /// Splits the given users into two groups and assigns them. Some will be not assigned.
|
---|
| 193 | /// </summary>
|
---|
| 194 | /// <param name="users"></param>
|
---|
| 195 | private void MB_AssignGroups(List<User> users) {
|
---|
| 196 | UserGroup group01 = new UserGroup();
|
---|
| 197 | group01.Name = "Test Group 01";
|
---|
| 198 |
|
---|
| 199 | UserGroup group02 = new UserGroup();
|
---|
| 200 | group02.Name = "Test Group 02";
|
---|
| 201 |
|
---|
| 202 | //three-way split users into group1, group2 and none
|
---|
| 203 | int idx = users.Count / 3;
|
---|
| 204 | for (int i = 0; i < idx; i++) {
|
---|
| 205 | group01.Members.Add(users[i]);
|
---|
| 206 | }
|
---|
| 207 | for (int i = idx; i < users.Count / 2; i++) {
|
---|
| 208 | group02.Members.Add(users[i]);
|
---|
| 209 | }
|
---|
| 210 | manager.AddNewUserGroup(group01);
|
---|
| 211 | manager.AddNewUserGroup(group02);
|
---|
| 212 |
|
---|
| 213 | }
|
---|
| 214 |
|
---|
| 215 | private void MB_AddPermission(List<User> users) {
|
---|
| 216 | if (users.Count < 2) return;
|
---|
| 217 | Permission permission = new Permission();
|
---|
| 218 | //permission.Id = PermissiveSecurityAction.Add_Job;
|
---|
| 219 | permission.Name = "ADD_JOB";
|
---|
| 220 | permission.Description = "Add new jobs";
|
---|
| 221 | permission.Plugin = "HeuristicLab.Hive.Server";
|
---|
| 222 |
|
---|
| 223 | manager.AddPermission(permission);
|
---|
| 224 | //grant permission to random users
|
---|
| 225 | Random rand = new Random(DateTime.Now.Millisecond);
|
---|
| 226 | for (int i = 0; i < users.Count/2; i++) {
|
---|
| 227 | int idx = rand.Next(users.Count);
|
---|
| 228 | manager.GrantPermission(users[i].Id, permission.Id, Guid.Empty);
|
---|
| 229 | }
|
---|
| 230 | }
|
---|
| 231 |
|
---|
| 232 | #endregion
|
---|
[1729] | 233 | public override void Run() {
|
---|
[1765] | 234 | //testPermissionsGroup();
|
---|
| 235 | InsertTestDataForPermissionCheck();
|
---|
[1729] | 236 | }
|
---|
| 237 | }
|
---|
| 238 | }
|
---|