コード例 #1
0
        public async Task <bool> AddToTeamAsync(Guid teamId, Guid userId, CancellationToken ct)
        {
            var teamQuery  = _context.Teams.Where(t => t.Id == teamId).Future();
            var userExists = _context.Users.Where(u => u.Id == userId).DeferredAny().FutureValue();

            var exerciseIdQuery = _context.Teams.Where(t => t.Id == teamId).Select(t => t.ExerciseId);

            var exerciseMembershipQuery = _context.ExerciseMemberships
                                          .Where(x => x.UserId == userId && exerciseIdQuery.Contains(x.ExerciseId))
                                          .Future();

            var team = (await teamQuery.ToListAsync()).SingleOrDefault();

            if (team == null)
            {
                throw new EntityNotFoundException <Team>();
            }

            if (!(await userExists.ValueAsync()))
            {
                throw new EntityNotFoundException <User>();
            }

            if (!(await _authorizationService.AuthorizeAsync(_user, null, new ExerciseAdminRequirement(team.ExerciseId))).Succeeded)
            {
                throw new ForbiddenException();
            }

            var exerciseMembership = (await exerciseMembershipQuery.ToListAsync()).FirstOrDefault();

            bool setPrimary = false;

            if (exerciseMembership == null)
            {
                exerciseMembership = new ExerciseMembershipEntity {
                    ExerciseId = team.ExerciseId, UserId = userId
                };
                _context.ExerciseMemberships.Add(exerciseMembership);
                await _context.SaveChangesAsync(ct);

                setPrimary = true;
            }

            var teamMembership = new TeamMembershipEntity {
                ExerciseMembershipId = exerciseMembership.Id, UserId = userId, TeamId = teamId
            };

            if (setPrimary)
            {
                exerciseMembership.PrimaryTeamMembership = teamMembership;
            }

            _context.TeamMemberships.Add(teamMembership);

            await _context.SaveChangesAsync(ct);

            await _userClaimsService.RefreshClaims(userId);

            return(true);
        }
コード例 #2
0
        private async Task <IEnumerable <Permission> > GetPermissions(Guid exerciseId, UserEntity user)
        {
            var exerciseMembershipQuery = _context.ExerciseMemberships
                                          .Include(x => x.PrimaryTeamMembership)
                                          .ThenInclude(m => m.Role)
                                          .ThenInclude(r => r.Permissions)
                                          .ThenInclude(p => p.Permission)
                                          .Include(x => x.PrimaryTeamMembership)
                                          .ThenInclude(m => m.Team)
                                          .ThenInclude(t => t.Role)
                                          .ThenInclude(r => r.Permissions)
                                          .ThenInclude(p => p.Permission)
                                          .Include(x => x.PrimaryTeamMembership)
                                          .ThenInclude(m => m.Team.Permissions)
                                          .ThenInclude(p => p.Permission)
                                          .Where(x => x.ExerciseId == exerciseId && x.UserId == user.Id);
            //.Future() // TODO: Doesn't load all includes - bug in library?

            ExerciseMembershipEntity membership = (await exerciseMembershipQuery.ToListAsync()).FirstOrDefault();

            List <PermissionEntity> permissions = new List <PermissionEntity>();

            if (membership != null)
            {
                if (membership.PrimaryTeamMembership != null)
                {
                    permissions.Add(new PermissionEntity {
                        Key = "TeamMember", Value = membership.PrimaryTeamMembership.TeamId.ToString()
                    });

                    if (membership.PrimaryTeamMembership.Role != null)
                    {
                        permissions.AddRange(membership.PrimaryTeamMembership.Role.Permissions.Select(x => x.Permission));
                    }

                    if (membership.PrimaryTeamMembership.Team != null)
                    {
                        if (membership.PrimaryTeamMembership.Team.Role != null)
                        {
                            permissions.AddRange(membership.PrimaryTeamMembership.Team.Role.Permissions.Select(x => x.Permission));
                        }

                        if (membership.PrimaryTeamMembership.Team.Permissions.Any())
                        {
                            permissions.AddRange(membership.PrimaryTeamMembership.Team.Permissions.Select(x => x.Permission));
                        }
                    }
                }
            }
            else
            {
                if (user.Role != null)
                {
                    permissions.AddRange(user.Role.Permissions.Select(x => x.Permission));
                }
            }

            return(Mapper.Map <IEnumerable <Permission> >(permissions));
        }
コード例 #3
0
        public async Task <ViewModels.Exercise> CreateAsync(ViewModels.Exercise exercise, CancellationToken ct)
        {
            if (!(await _authorizationService.AuthorizeAsync(_user, null, new ExerciseCreationRequirement())).Succeeded)
            {
                throw new ForbiddenException();
            }

            var exerciseEntity = Mapper.Map <ExerciseEntity>(exercise);

            var exerciseAdminPermission = await _context.Permissions
                                          .Where(p => p.Key == PlayerClaimTypes.ExerciseAdmin.ToString())
                                          .FirstOrDefaultAsync(ct);

            if (exerciseAdminPermission == null)
            {
                throw new EntityNotFoundException <Permission>($"{PlayerClaimTypes.ExerciseAdmin.ToString()} Permission not found.");
            }

            var userId = _user.GetId();

            // Create an Admin team with the caller as a member
            var teamEntity = new TeamEntity()
            {
                Name = "Admin"
            };

            teamEntity.Permissions.Add(new TeamPermissionEntity()
            {
                Permission = exerciseAdminPermission
            });

            var exerciseMembershipEntity = new ExerciseMembershipEntity {
                Exercise = exerciseEntity, UserId = userId
            };

            exerciseEntity.Teams.Add(teamEntity);
            exerciseEntity.Memberships.Add(exerciseMembershipEntity);

            _context.Exercises.Add(exerciseEntity);
            await _context.SaveChangesAsync(ct);

            var teamMembershipEntity = new TeamMembershipEntity {
                Team = teamEntity, UserId = userId, ExerciseMembership = exerciseMembershipEntity
            };

            exerciseMembershipEntity.PrimaryTeamMembership = teamMembershipEntity;
            _context.TeamMemberships.Add(teamMembershipEntity);
            _context.ExerciseMemberships.Update(exerciseMembershipEntity);
            await _context.SaveChangesAsync(ct);

            return(await GetAsync(exerciseEntity.Id, ct));
        }
コード例 #4
0
ファイル: Seed.cs プロジェクト: sei-rreeder/crucible
        public static void Run(PlayerContext context)
        {
            // Permissions
            var systemAdminPermission   = context.Permissions.Where(x => x.Key == "SystemAdmin").FirstOrDefault();
            var exerciseAdminPermission = context.Permissions.Where(x => x.Key == "ExerciseAdmin").FirstOrDefault();
            var ostAdminPermission      = new PermissionEntity {
                Id = Guid.NewGuid(), Key = "OsTicketAdmin", Description = "Admin in OsTicket"
            };
            var ostAgentPermission = new PermissionEntity {
                Id = Guid.NewGuid(), Key = "OsTicketAgent", Description = "Agent in OsTicket"
            };
            var viewAllVmsPermission = new PermissionEntity {
                Id = Guid.NewGuid(), Key = "ViewAllMachines", Description = "View all Virtual Machines"
            };

            context.Permissions.Add(ostAdminPermission);
            context.Permissions.Add(ostAgentPermission);
            context.Permissions.Add(viewAllVmsPermission);

            // Roles
            var superUserRole = new RoleEntity {
                Id = Guid.Parse("f16d7689-4c22-498f-b975-021348b19120"), Name = "Super User"
            };

            superUserRole.Permissions.Add(new RolePermissionEntity {
                Id = Guid.NewGuid(), Permission = systemAdminPermission
            });

            var exerciseAdminRole = new RoleEntity {
                Id = Guid.Parse("b8f2c55b-f47d-4ec9-8fce-606753c4af72"), Name = "Exercise Administrator"
            };

            exerciseAdminRole.Permissions.Add(new RolePermissionEntity {
                Id = Guid.NewGuid(), Permission = exerciseAdminPermission
            });
            exerciseAdminRole.Permissions.Add(new RolePermissionEntity {
                Id = Guid.NewGuid(), Permission = ostAdminPermission
            });
            exerciseAdminRole.Permissions.Add(new RolePermissionEntity {
                Id = Guid.NewGuid(), Permission = ostAgentPermission
            });
            exerciseAdminRole.Permissions.Add(new RolePermissionEntity {
                Id = Guid.NewGuid(), Permission = viewAllVmsPermission
            });

            context.Roles.Add(superUserRole);
            context.Roles.Add(exerciseAdminRole);

            // sketch users
            var uEnder = new UserEntity {
                Id = Guid.Parse("3269cb19-1d39-40d3-a55e-e3e9779b6e0b"), Name = "Ender"
            };
            var uBean = new UserEntity {
                Id = Guid.Parse("ac4d3e32-c2d6-4f99-9aef-0fcd62a568a6"), Name = "Bean"
            };
            var uGraff = new UserEntity {
                Id = Guid.Parse("b7977ce5-0a17-45e1-aa2e-55c57bfffeb6"), Name = "Graff"
            };
            var uBonzo = new UserEntity {
                Id = Guid.Parse("1db2856b-7a3c-4b82-95d4-e41fb18de516"), Name = "Bonzo"
            };
            var uBob = new UserEntity {
                Id = Guid.Parse("9149f2ec-2e55-44f6-b92d-988ede6ca1f9"), Name = "Bob"
            };
            var uAdministrator = new UserEntity {
                Id = Guid.Parse("9fd3c38e-58b0-4af1-80d1-1895af91f1f9"), Name = "admin user", Role = superUserRole
            };

            context.Users.Add(uEnder);
            context.Users.Add(uBean);
            context.Users.Add(uGraff);
            context.Users.Add(uBonzo);
            context.Users.Add(uBob);
            context.Users.Add(uAdministrator);

            // exercise 1
            var exercise1 = new ExerciseEntity
            {
                Id          = Guid.Parse("453d394e-bf18-499b-9786-149b0f8d69ec"),
                Name        = "RCC -E EM 2018",
                Description = "Cyber exercises for evaluating the team.",
                Status      = ExerciseStatus.Active
            };

            var tBlue = new TeamEntity {
                Id = Guid.Parse("df7b7157-1727-48b5-803d-cfdb208767c0"), Name = "Blue"
            };

            tBlue.Permissions.Add(new TeamPermissionEntity(tBlue.Id, ostAdminPermission.Id));

            var tAdmin = new TeamEntity {
                Id = Guid.Parse("453e0508-0515-402d-85e9-24e567096f7a"), Name = "Admin", Role = exerciseAdminRole
            };

            //exercise1.ExerciseUsers.Add(new ExerciseUserEntity { ExerciseId = exercise1.Id, UserId = uEnder.Id, PrimaryTeamId = tBlue.Id });
            //exercise1.ExerciseUsers.Add(new ExerciseUserEntity { ExerciseId = exercise1.Id, UserId = uBean.Id, PrimaryTeamId = tRed.Id });
            //exercise1.ExerciseUsers.Add(new ExerciseUserEntity { ExerciseId = exercise1.Id, UserId = uGraff.Id, PrimaryTeamId = tWhite.Id });
            //exercise1.ExerciseUsers.Add(new ExerciseUserEntity { ExerciseId = exercise1.Id, UserId = uBonzo.Id, PrimaryTeamId = tSupport.Id });
            //exercise1.ExerciseUsers.Add(new ExerciseUserEntity { ExerciseId = exercise1.Id, UserId = uBob.Id, PrimaryTeamId = tBlue.Id });
            //exercise1.ExerciseUsers.Add(new ExerciseUserEntity { ExerciseId = exercise1.Id, UserId = uAdministrator.Id, PrimaryTeamId = tAdmin.Id });



            //tBlue.Memberships.Add(new TeamMembershipEntity { Team = tBlue, User = uAdministrator,  });

            //tBlue.TeamUsers.Add(new TeamUserEntity { TeamId = tBlue.Id, UserId = uEnder.Id });
            //tBlue.TeamUsers.Add(new TeamUserEntity { TeamId = tBlue.Id, UserId = uBob.Id });
            //tBlue.TeamUsers.Add(new TeamUserEntity { TeamId = tBlue.Id, UserId = uBonzo.Id });

            var tRed = new TeamEntity {
                Id = Guid.Parse("51484d68-8ad9-487e-98d6-30db812fa355"), Name = "Red"
            };
            //tRed.TeamUsers.Add(new TeamUserEntity { TeamId = tRed.Id, UserId = uBean.Id });

            var tWhite = new TeamEntity {
                Id = Guid.Parse("66925bea-68fd-40dd-9b19-d3c1fb5fa1bf"), Name = "White"
            };
            //tWhite.TeamUsers.Add(new TeamUserEntity { TeamId = tWhite.Id, UserId = uGraff.Id });

            var tSupport = new TeamEntity {
                Id = Guid.Parse("b7ca71d3-330c-4ae4-aab5-21fdcf8ee775"), Name = "Support"
            };

            //tSupport.TeamUsers.Add(new TeamUserEntity { TeamId = tSupport.Id, UserId = uBonzo.Id });
            //tSupport.TeamUsers.Add(new TeamUserEntity { TeamId = tSupport.Id, UserId = uAdministrator.Id });


            //tAdmin.TeamUsers.Add(new TeamUserEntity { TeamId = tAdmin.Id, UserId = uAdministrator.Id });

            exercise1.Teams.Add(tBlue);
            exercise1.Teams.Add(tRed);
            exercise1.Teams.Add(tWhite);
            exercise1.Teams.Add(tSupport);
            exercise1.Teams.Add(tAdmin);

            //// exercise 2
            //var exercise2 = new ExerciseEntity
            //{
            //    Id = Guid.Parse("fc41c788-063b-4018-9f28-5f68a52f4e76"),
            //    Name = "Exercise 2",
            //    Description = "Another Exercise",
            //    Status = ExerciseStatus.Active
            //};

            var a = new ApplicationEntity
            {
                Name       = "Virtual Machines",
                Url        = "http://localhost:4303/exercises/{exerciseId}",
                Embeddable = true,
            };

            a.Icon = "/assets/img/SP_Icon_Virtual.png";

            var b = new ApplicationEntity
            {
                Name       = "Intel Doc",
                Url        = "https://www3.epa.gov/ttn/naaqs/standards/co/data/2009_04_COScopeandMethodsPlan.pdf",
                Embeddable = true,
            };

            b.Icon = "/assets/img/SP_Icon_Intel.png";

            var c = new ApplicationEntity
            {
                Name       = "Chat",
                Url        = "https://INTERNAL_CHAT_SERVER?geid={exerciseId}",
                Embeddable = false,
            };

            c.Icon = "/assets/img/SP_Icon_Chat.png";


            var d = new ApplicationEntity
            {
                Name       = "Exercise Hub",
                Url        = "https://hub.com?geid={exerciseId}",
                Embeddable = true,
            };

            d.Icon = "/assets/img/SP_Icon_Hub.png";

            var e = new ApplicationEntity
            {
                Name             = "Help Desk",
                Url              = "http://localhost/osticket/login.php?do=ext&bk=identity.client",
                Embeddable       = true,
                LoadInBackground = true
            };

            e.Icon = "/assets/img/SP_Icon_Help.png";

            exercise1.Applications.Add(a);
            exercise1.Applications.Add(b);
            exercise1.Applications.Add(c);
            exercise1.Applications.Add(d);
            exercise1.Applications.Add(e);

            ApplicationInstanceEntity blueVmAppInstance = new ApplicationInstanceEntity {
                Application = a, DisplayOrder = 0
            };
            ApplicationInstanceEntity blueIntelAppInstance = new ApplicationInstanceEntity {
                Application = b, DisplayOrder = 1
            };
            ApplicationInstanceEntity blueChatAppInstance = new ApplicationInstanceEntity {
                Application = c, DisplayOrder = 2
            };
            ApplicationInstanceEntity blueHubAppInstance = new ApplicationInstanceEntity {
                Application = d, DisplayOrder = 3
            };
            ApplicationInstanceEntity blueHelpdeskAppInstance = new ApplicationInstanceEntity {
                Application = e, DisplayOrder = 4
            };

            ApplicationInstanceEntity redVmAppInstance = new ApplicationInstanceEntity {
                Application = a, DisplayOrder = 0
            };
            ApplicationInstanceEntity redHelpdeskAppInstance = new ApplicationInstanceEntity {
                Application = e, DisplayOrder = 1
            };

            ApplicationInstanceEntity whiteVmAppInstance = new ApplicationInstanceEntity {
                Application = a, DisplayOrder = 0
            };
            ApplicationInstanceEntity whiteHelpdeskAppInstance = new ApplicationInstanceEntity {
                Application = e, DisplayOrder = 1
            };

            ApplicationInstanceEntity supportVmAppInstance = new ApplicationInstanceEntity {
                Application = a, DisplayOrder = 0
            };
            ApplicationInstanceEntity supportHelpdeskAppInstance = new ApplicationInstanceEntity {
                Application = e, DisplayOrder = 1
            };

            ApplicationInstanceEntity adminVmAppInstance = new ApplicationInstanceEntity {
                Application = a, DisplayOrder = 0
            };
            ApplicationInstanceEntity adminHelpdeskAppInstance = new ApplicationInstanceEntity {
                Application = e, DisplayOrder = 1
            };

            tBlue.Applications.Add(blueVmAppInstance);
            tBlue.Applications.Add(blueIntelAppInstance);
            tBlue.Applications.Add(blueChatAppInstance);
            tBlue.Applications.Add(blueHubAppInstance);
            tBlue.Applications.Add(blueHelpdeskAppInstance);

            tRed.Applications.Add(redVmAppInstance);
            tRed.Applications.Add(redHelpdeskAppInstance);

            tWhite.Applications.Add(whiteVmAppInstance);
            tWhite.Applications.Add(whiteHelpdeskAppInstance);

            tSupport.Applications.Add(supportVmAppInstance);
            tSupport.Applications.Add(supportHelpdeskAppInstance);

            tAdmin.Applications.Add(adminVmAppInstance);
            tAdmin.Applications.Add(adminHelpdeskAppInstance);

            context.Exercises.Add(exercise1);
            //context.Exercises.Add(exercise2);

            var exMembership1 = new ExerciseMembershipEntity {
                Exercise = exercise1, UserId = uEnder.Id
            };

            exercise1.Memberships.Add(exMembership1);
            context.SaveChanges();

            var enderBlueMembership = new TeamMembershipEntity {
                Team = tBlue, User = uEnder, ExerciseMembership = exMembership1, Role = exerciseAdminRole
            };

            exMembership1.PrimaryTeamMembership = enderBlueMembership;

            context.SaveChanges();

            log.Debug("Seed completed");
        }