Beispiel #1
0
        public void GetAllActiveSanctions_GetRightList()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            var user1 = _accountFacade.RegUser("not admin", Credentials.FromRawData("*****@*****.**", "password"),
                                               false);
            var user2 = _accountFacade.RegUser("not admin", Credentials.FromRawData("*****@*****.**", "password"),
                                               false);
            var user3 = _accountFacade.RegUser("not admin", Credentials.FromRawData("*****@*****.**", "password"),
                                               false);

            sanctionFacade.AddSanction("some rule", user1, _adminId, SanctionType.NotAllowToJoinGroup);
            sanctionFacade.AddSanction("some rule", user2, _adminId, SanctionType.NotAllowToEditProfile);
            var canceledSanctionId =
                sanctionFacade.AddSanction("some rule", user3, _adminId, SanctionType.NotAllowToTeach);

            sanctionFacade.CancelSanction(canceledSanctionId);

            //Act
            var actual = sanctionFacade.GetAllActive().ToList();

            //Assert
            Assert.AreEqual(user1, actual[0].UserId);
            Assert.AreEqual(user2, actual[1].UserId);
        }
Beispiel #2
0
        public void CancelNotExistingSanction_GetException()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            //Act
            sanctionFacade.CancelSanction(IntIterator.GetNextId());
        }
Beispiel #3
0
        public void TryToAddSanctionToNotExistingUser_GetException()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            //Act
            sanctionFacade.AddSanction("some rule", IntIterator.GetNextId(), _adminId,
                                       SanctionType.NotAllowToEditProfile);
        }
Beispiel #4
0
        public void TryToAddSanctionWithInvalidExpirationDate_GetException()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            //Act
            sanctionFacade.AddSanction("Some rule", _testUserId, _adminId,
                                       SanctionType.NotAllowToEditProfile, DateTimeOffset.Now);
        }
Beispiel #5
0
        public void TryToBecomeTeacherWithSanctions_GetException()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            sanctionFacade.AddSanction("some rule", _testUserId, _adminId, SanctionType.NotAllowToTeach);

            //Act
            _userEditFacade.BecomeTeacher(_testUserId);
        }
Beispiel #6
0
        public void TryToEditBirthYearWithSanctions_GetException()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            sanctionFacade.AddSanction("some rule", _testUserId, _adminId, SanctionType.NotAllowToEditProfile);

            //Act
            _userEditFacade.EditBirthYear(_testUserId, DateTimeOffset.UtcNow);
        }
Beispiel #7
0
        public void TryToEditAvatarLinkWithSanctions_GetException()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            sanctionFacade.AddSanction("some rule", _testUserId, _adminId, SanctionType.NotAllowToEditProfile);

            //Act
            _userEditFacade.EditAvatarLink(_testUserId, "new");
        }
Beispiel #8
0
        public void TryToAddSanctionByNotModerator_GetException()
        {
            //Arrange
            var sanctionFacade  = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);
            var pseudoModerator = _accountFacade.RegUser("not admin",
                                                         Credentials.FromRawData("*****@*****.**", "password"), false);

            //Act
            sanctionFacade.AddSanction("some rule", _testUserId, pseudoModerator, SanctionType.NotAllowToEditProfile);
        }
Beispiel #9
0
        public void AddSanction_GetAddedSanction()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            //Act
            sanctionFacade.AddSanction("Some rule", _testUserId, _adminId, SanctionType.NotAllowToEditProfile);

            //Assert
            Assert.AreEqual(1, sanctionFacade.GetAll().ToList().Count);
        }
Beispiel #10
0
        public void TryToEditContactsWithSanctions_GetException()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            sanctionFacade.AddSanction("some rule", _testUserId, _adminId, SanctionType.NotAllowToEditProfile);

            //Act
            _userEditFacade.EditContacts(_testUserId, new List <string> {
                "new"
            });
        }
Beispiel #11
0
        public void CheckActivityOfExpiredSanction_GetInactiveSanction()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);
            var sanctionId     = sanctionFacade.AddSanction("Some rule", _testUserId, _adminId,
                                                            SanctionType.NotAllowToEditProfile, DateTimeOffset.Now.AddMilliseconds(1));

            //Act
            Thread.Sleep(4);

            //Assert
            Assert.AreEqual(false, sanctionFacade.GetAll().ToList()[0].IsActive);
        }
Beispiel #12
0
        public void CancelSanction_GetCanceledSanction()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);
            var sanctionId     =
                sanctionFacade.AddSanction("some rule", _testUserId, _adminId, SanctionType.NotAllowToEditProfile);

            //Act
            sanctionFacade.CancelSanction(sanctionId);

            //Assert
            Assert.AreEqual(false, _sanctionRepository.Get(sanctionId).IsActive);
        }
Beispiel #13
0
        public void GetAllActiveSanctionsOfUser_GetRightResult()
        {
            //Arrange
            var sanctionFacade = new SanctionFacade(_sanctionRepository, _userRepository, _publisher.Object);

            var sanctionId1 =
                sanctionFacade.AddSanction("Some rule", _testUserId, _adminId, SanctionType.NotAllowToEditProfile);
            var sanctionId2 =
                sanctionFacade.AddSanction("Some rule", _testUserId, _adminId, SanctionType.NotAllowToEditProfile);
            var sanctionId3 =
                sanctionFacade.AddSanction("Some rule", _testUserId, _adminId, SanctionType.NotAllowToEditProfile);

            sanctionFacade.CancelSanction(sanctionId3);

            //Act
            var result = sanctionFacade.GetAllActiveOfUser(_testUserId).ToList();

            //Assert
            Assert.AreEqual(2, result.Count);
            Assert.AreEqual(sanctionId1, result[0].Id);
            Assert.AreEqual(sanctionId2, result[1].Id);
        }
Beispiel #14
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            StartLoggly();

            services.AddWebSocketManager();

            IFileRepository     fileRepository;
            IGroupRepository    groupRepository;
            IKeysRepository     keysRepository;
            ITagRepository      tagRepository;
            IUserRepository     userRepository;
            ISanctionRepository sanctionRepository;
            IEventRepository    eventRepository;

            if (bool.Parse(Configuration.GetValue <string>("UseDB")))
            {
                var dbContext = Configuration.GetValue <string>("MysqlConnectionString");
                using (var context = new EduhubContext(dbContext))
                {
                    if (bool.Parse(Configuration.GetValue <string>("DeleteDB")))
                    {
                        context.Database.EnsureDeleted();
                    }
                    if (context.Database.EnsureCreated())
                    {
                        var dbName = dbContext.Split("database=")[1].Split(";")[0];
                        context.Database.ExecuteSqlCommand(
                            "ALTER DATABASE " + dbName + " CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;");
                        var modelNames = context.Model.GetEntityTypes();
                        foreach (var modelname in modelNames)
                        {
                            var mapping   = context.Model.FindEntityType(modelname.Name).Relational();
                            var tableName = mapping.TableName;
                            context.Database.ExecuteSqlCommand(
                                "alter table " + tableName.ToLower()
                                + " convert to character set utf8mb4 collate utf8mb4_bin;");
                        }
                    }

                    context.Database.Migrate();
                }

                fileRepository     = new InMysqlFileRepository(dbContext);
                groupRepository    = new InMysqlGroupRepository(dbContext);
                keysRepository     = new InMysqlKeyRepository(dbContext);
                tagRepository      = new InMysqlTagRepository(dbContext);
                userRepository     = new InMysqlUserRepository(dbContext);
                sanctionRepository = new InMysqlSanctionRepository(dbContext);
                eventRepository    = new InMemoryEventRepository();
            }
            else
            {
                fileRepository     = new InMemoryFileRepository();
                groupRepository    = new InMemoryGroupRepository();
                keysRepository     = new InMemoryKeysRepository();
                tagRepository      = new InMemoryTagRepository();
                sanctionRepository = new InMemorySanctionRepository();
                userRepository     = new InMemoryUserRepository();
                eventRepository    = new InMemoryEventRepository();
            }

            var emailSettings = new EmailSettings(Configuration.GetValue <string>("EmailLogin"),
                                                  Configuration.GetValue <string>("Email"),
                                                  Configuration.GetValue <string>("EmailPassword"),
                                                  Configuration.GetValue <string>("SmtpAddress"),
                                                  Configuration.GetValue <string>("ConfirmAddress"),
                                                  int.Parse(Configuration.GetValue <string>("SmtpPort")));


            var defaultAvatarFilename    = Configuration.GetValue <string>("DefaultAvatarFilename");
            var defaultAvatarContentType = Configuration.GetValue <string>("DefaultAvatarContentType");
            var userSettings             = new UserSettings(defaultAvatarFilename);

            if (!fileRepository.DoesFileExists(defaultAvatarFilename))
            {
                fileRepository.AddFile(new UserFile(defaultAvatarFilename, defaultAvatarContentType));
            }

            var tagFacade   = new TagFacade(tagRepository);
            var emailSender = new EmailSender(emailSettings);
            var notificationsDistributor = new NotificationsDistributor(groupRepository, userRepository, emailSender);

            var groupSettings = new GroupSettings(Configuration.GetValue <int>("MinGroupSize"),
                                                  Configuration.GetValue <int>("MaxGroupSize"),
                                                  Configuration.GetValue <double>("MinGroupValue"),
                                                  Configuration.GetValue <double>("MaxGroupValue"));

            var eventBusSettings = new EventBusSettings(Configuration.GetValue <string>("RabbitMqServerHostName"),
                                                        Configuration.GetValue <string>("RabbitMqServerVirtualHost"),
                                                        Configuration.GetValue <string>("RabbitMqAdminUserName"),
                                                        Configuration.GetValue <string>("RabbitMqAdminPassword"));
            var eventBus = new EventBus(eventBusSettings);

            eventBus.StartListening();

            var adminsEventConsumer     = new AdminsEventConsumer(notificationsDistributor, eventRepository);
            var courseEventConsumer     = new CourseEventConsumer(notificationsDistributor, eventRepository);
            var curriculumEventConsumer = new CurriculumEventConsumer(notificationsDistributor, eventRepository);
            var groupEventsConsumer     = new GroupEventsConsumer(notificationsDistributor, eventRepository);
            var invitationConsumer      = new InvitationConsumer(notificationsDistributor, eventRepository);
            var memberActionsConsumer   = new MemberActionsConsumer(notificationsDistributor, eventRepository);

            eventBus.RegisterConsumer(new TagPopularityConsumer(tagFacade));
            eventBus.RegisterConsumer <ReportMessageEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <SanctionsAppliedEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <SanctionCancelledEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <TeacherFoundEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <CourseFinishedEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <ReviewReceivedEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <CurriculumAcceptedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <CurriculumDeclinedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <CurriculumSuggestedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <NewCreatorEvent>(groupEventsConsumer);
            eventBus.RegisterConsumer <GroupIsFormedEvent>(groupEventsConsumer);
            eventBus.RegisterConsumer <InvitationAcceptedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <InvitationDeclinedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <InvitationReceivedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <NewMemberEvent>(memberActionsConsumer);
            eventBus.RegisterConsumer <MemberLeftEvent>(memberActionsConsumer);

            var publisher = eventBus.GetEventPublisher();

            var userFacade      = new UserFacade(userRepository, groupRepository, eventRepository, publisher);
            var groupEditFacade = new GroupEditFacade(groupRepository, groupSettings, publisher);
            var userEditFacade  = new UserEditFacade(userRepository, fileRepository, sanctionRepository);
            var groupFacade     = new GroupFacade(groupRepository, userRepository, sanctionRepository, groupSettings,
                                                  publisher);
            var fileFacade        = new FileFacade(fileRepository);
            var chatFacade        = new ChatFacade(groupRepository, userRepository);
            var sanctionsFacade   = new SanctionFacade(sanctionRepository, userRepository, publisher);
            var userAccountFacade = new AccountFacade(keysRepository, userRepository, emailSender, userSettings);
            var reportFacade      = new ReportFacade(userRepository, eventRepository, publisher);

            services.AddSingleton <IUserFacade>(userFacade);
            services.AddSingleton <IGroupFacade>(groupFacade);
            services.AddSingleton <IFileFacade>(fileFacade);
            services.AddSingleton <IChatFacade>(chatFacade);
            services.AddSingleton <IGroupEditFacade>(groupEditFacade);
            services.AddSingleton <IUserEditFacade>(userEditFacade);
            services.AddSingleton <ITagFacade>(tagFacade);
            services.AddSingleton <ISanctionFacade>(sanctionsFacade);
            services.AddSingleton <IAccountFacade>(userAccountFacade);
            services.AddSingleton <IReportFacade>(reportFacade);
            services.AddSingleton(Env);

            userAccountFacade.CheckAdminExistence(Configuration.GetValue <string>("AdminEmail"));

            services.AddSwaggerGen(current =>
            {
                current.SwaggerDoc("v1", new Info
                {
                    Title   = "EduHub API",
                    Version = "v1"
                });
                current.AddSecurityDefinition("Bearer", new ApiKeyScheme
                {
                    Description =
                        "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name = "Authorization",
                    In   = "header",
                    Type = "apiKey"
                });
                current.OperationFilter <ExamplesOperationFilter>();
                current.DescribeAllEnumsAsStrings();
                var a = string.Format(@"{0}\EduHub.xml", AppDomain.CurrentDomain.BaseDirectory);
                current.IncludeXmlComments(string.Format(@"{0}/EduHub.xml", AppDomain.CurrentDomain.BaseDirectory));
            });
            ConfigureSecurity(services);
            if (Configuration.GetValue <bool>("Authorization"))
            {
                services.AddMvc(o =>
                {
                    o.Filters.Add(new ExceptionFilter());
                    o.Filters.Add(new ActionFilter());
                });
            }
            else
            {
                services.AddMvc(o =>
                {
                    o.Filters.Add(new AllowAnonymousFilter());
                    o.Filters.Add(new ExceptionFilter());
                    o.Filters.Add(new ActionFilter());
                });
            }
            services.AddCors(options =>
            {
                options.AddPolicy("AllowAnyOrigin",
                                  builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            });
        }
Beispiel #15
0
        /// <summary>
        /// 1. Loop through the Excel file that contains all the incident information in Pave and create Incident objects
        /// 2. Connect to Pave and save authentication cookie and use authentication cookie to make new connections to Pave
        /// 3. Use the incident information in order to download the extra files attached to each incident
        ///    Create folders containing the extra files organized by incidents and then by respondent ids
        /// 4. Create the narrative txt file
        /// 5. Download all the sanction reports from Pave
        /// 6. Create the sanctions export file by reading all the sanction reports
        /// </summary>
        static void Main(string[] args)
        {
            List <Incident> incidents         = new List <Incident>();
            List <string>   uniqueIncidentIds = new List <string>();
            CookieContainer cookieJar         = new CookieContainer();

            //SetupFolderToStoreFiles
            System.IO.Directory.CreateDirectory(_path);

            //1. Populate Incident Information
            Console.WriteLine("Loading Incidents...");
            incidents = LoadIncidents();

            //Create Maxient Incident Report
            Console.WriteLine("Creating spread sheet of Incidents...");
            Utilities.CreateSpreadSheet(incidents, _path + _incidentFileName);

            //Select list of distinct incident numbers
            uniqueIncidentIds = incidents.Select(x => x.IncidentNumber).Distinct().ToList();

            //2. Get Authentication Cookie
            Console.WriteLine("Connecting to Pave...");
            cookieJar = Connections.AuthenticateToPave();

            //3. Get document Ids and download the extra documentation
            Console.WriteLine("Getting attachment files...");
            GetAttachedDocuments(uniqueIncidentIds, cookieJar, incidents);

            //4. Populate Narrative text file
            Console.WriteLine("Creating narrative text file...");
            string[] narratives = incidents.Select(x => string.Join("|", x.IncidentNumber, x.IncidentNarrative.Replace("|", "--"))).Distinct().ToArray();
            //Create Narrative Text String
            string narrativeTxt = "IncidentNumber|Narrative" + System.Environment.NewLine;

            narrativeTxt += string.Join(System.Environment.NewLine, narratives);
            //Write Narrative File
            using (StreamWriter sw = File.CreateText(_path + ConfigurationManager.AppSettings["NarrativeExportFileName"]))
            {
                sw.Write(narrativeTxt);
            }

            //5. Populate Sanction report
            Console.WriteLine("Downloading sanction reports...");
            List <Tuple <string, string> > sanctNames = Utilities.ParseSanctionTypeJSON(Connections.GetSanctionTypes(cookieJar));

            System.IO.Directory.CreateDirectory(_sanctionPath);

            //Loop through the sanction names and download files using parallels (multithreading)
            ParallelOptions parallelOptions = new ParallelOptions
            {
                MaxDegreeOfParallelism = 10
            };

            Parallel.ForEach(sanctNames.Take(10), parallelOptions, sanctName =>
            {
                Connections.DownloadSanctionReports(sanctName.Item1, sanctName.Item2, _sanctionPath, cookieJar);
            });

            //6. Loop through the sanctions and create the report
            Console.WriteLine("Creating sanction reports...");
            List <Sanction> sanctions = new SanctionFacade().GetAllSanctions(_sanctionPath);

            Utilities.CreateSpreadSheet(sanctions, _path + _sanctionFileName);

            //Complete
            Console.WriteLine(System.Environment.NewLine + "Press any key to exit...");
            Console.Read();
        }