Beispiel #1
0
        /// <summary>
        /// Зарегистрировать логику
        /// </summary>
        /// <param name="appBuilder"></param>
        /// <param name="settings"></param>
        public static void RegisterLogic(CrocoApplicationBuilder appBuilder, EccSettings settings)
        {
            Check(appBuilder);

            var services = appBuilder.Services;

            services.AddHttpClient <OneSignalClient>();
            RegisterServices <CltUserMasterStorage>(services, settings);

            services.AddScoped <IFileMasterStorage, CrocoFileMasterStorage>();

            RegisterEccWorkerTypes(services);
            AddMessageHandlers(appBuilder);

            var descriptionBuilder = appBuilder.IntegrationMessagesDescriptorBuilder;

            descriptionBuilder
            .AddMessageDescription <CreateUserCommand>("Команда для создания пользователя", IntegrationMessageType.Command)
            .AddMessageDescription <UpdateUserCommand>("Команда для обновления данных пользователя", IntegrationMessageType.Command)
            .AddMessageDescription <AppendEmailsFromFileToGroup>("Команда для добавления эмейлов в групу из файла", IntegrationMessageType.Command)
            .AddMessageDescription <SendMailsForEmailGroup>("Команда для отправки эмейлов для групы", IntegrationMessageType.Command);

            descriptionBuilder
            .AddMessageDescription <ChatCreatedEvent>("Событие о том, что чат создался", IntegrationMessageType.Event)
            .AddMessageDescription <ChatRelationUpdatedEvent>("Событие о том, что пользователь посетил чат или зашёл в него", IntegrationMessageType.Event);
        }
Beispiel #2
0
        /// <summary>
        /// Зарегистрировать клиентскую логику
        /// </summary>
        /// <param name="applicationBuilder"></param>
        /// <param name="setupAction"></param>
        public static void Register(CrocoApplicationBuilder applicationBuilder, Action <IdentityOptions> setupAction = null)
        {
            Check(applicationBuilder);

            var services = applicationBuilder.Services;

            services.AddScoped <IApplicationAuthenticationManager, ApplicationAuthenticationManager>();
            services.AddScoped <IClientDataRefresher, ClientDataRefresher>();

            setupAction ??= config =>
            {
                config.SignIn.RequireConfirmedEmail = false;
                config.Password.RequiredLength      = 8;
            };

            services.AddIdentity <ApplicationUser, ApplicationRole>(setupAction)
            .AddEntityFrameworkStores <CltDbContext>()
            .AddDefaultTokenProviders();

            RegisterCltWorkerTypes(services);
            services.AddSingleton <CltPasswordValidator>();

            applicationBuilder
            .RegisterHealthCheck <CltSettingsHealthCheck>()
            .RegisterHealthCheck <RootHealthCheck>();

            applicationBuilder.IntegrationMessagesDescriptorBuilder
            .AddMessageDescription <ClientStartedRestoringPasswordEvent>("Выбрасывается в систему, когда клиент начинает процедуру сброса пароля", IntegrationMessageType.Event)
            .AddMessageDescription <ClientChangedPassword>("Выбрасывыется в систему, когда клиент закончил процедуру изменения пароля", IntegrationMessageType.Event)
            .AddMessageDescription <ClientDataUpdatedEvent>("Выбрасывается в систему, когда данные клиента обновляются либо администратором либо самим клиентом", IntegrationMessageType.Event)
            .AddMessageDescription <ClientRegisteredEvent>("Выбрасывается в систему, когда клиент прошёл регистрацию", IntegrationMessageType.Event);
        }
Beispiel #3
0
        private static void RegisterInner <TClientStorage>(CrocoApplicationBuilder appBuilder, Func <IPrincipal, bool> isAdminChecker, Action registerClientStorageFunc)
            where TClientStorage : class, IUsersStorage
        {
            Check(appBuilder);

            var services = appBuilder.Services;

            services.AddSingleton(new PrincipalCheker(isAdminChecker));
            registerClientStorageFunc();
            services.AddScoped <DayTasksService>();
            services.AddScoped <DayTaskCommentService>();
        }
Beispiel #4
0
        private static void AddMessageHandlers(CrocoApplicationBuilder appBuilder)
        {
            var eventSourceOptions = appBuilder.EventSourceOptions;

            eventSourceOptions
            .AddMessageHandler <CreateUserCommand, CreateUserCommandHandler>()
            .AddMessageHandler <UpdateUserCommand, UpdateUserCommandHandler>()
            .AddMessageHandler <AppendEmailsFromFileToGroup, AppendEmailsFromFileToGroupMessageHandler>()
            .AddMessageHandler <SendMailsForEmailGroup, SendMailsForEmailGroupMessageHandler>()
            .AddMessageHandler <ClientRegisteredEvent, ClientRegisteredEventHandler>(true)
            .AddMessageHandler <ClientDataUpdatedEvent, ClientDataUpdatedEventHandler>(true)
            .AddMessageHandler <FilesUploadedEvent, FilesUploadedEventHandler>(true);
        }
Beispiel #5
0
        public static async Task <IServiceProvider> BuildCltAppAndGetServiceProvider()
        {
            var services = new ServiceCollection();

            services.AddLogging();
            services.AddScoped(srv => MySqLiteFileDatabaseExtensions.Create <CrocoInternalDbContext>(opts => new CrocoInternalDbContext(opts), "croco"));
            services.AddScoped(srv => MySqLiteFileDatabaseExtensions.Create <CltDbContext>(opts => new CltDbContext(opts), "clt"));
            var appBuilder = new CrocoApplicationBuilder(services);

            appBuilder.RegisterVirtualPathMapper(Directory.GetCurrentDirectory());
            appBuilder.RegisterFileStorage(new CrocoFileOptions
            {
                SourceDirectory       = Directory.GetCurrentDirectory(),
                ImgFileResizeSettings = new Dictionary <string, ImgFileResizeSetting>()
            });

            DbFileManagerServiceCollectionExtensions.RegisterDbFileManager(appBuilder);

            CltLogicRegistrator.Register(appBuilder);

            appBuilder.CheckAndRegisterApplication <CrocoApplication>();

            var srvProvider = services.BuildServiceProvider();

            appBuilder.SetAppAndActivator(srvProvider);

            var scope = srvProvider.CreateScope();

            InitializeDatabasesAsEmpty(scope);

            scope.ServiceProvider
            .GetRequiredService <ICrocoRequestContextAccessor>()
            .SetRequestContext(SystemCrocoExtensions.GetRequestContext());

            var accountInitiator = scope.ServiceProvider
                                   .GetRequiredService <AccountInitiator>();

            await accountInitiator.CreateRootUserAsync();

            return(srvProvider);
        }
Beispiel #6
0
 private static void Check(CrocoApplicationBuilder appBuilder)
 {
     new EFCrocoApplicationRegistrator(appBuilder).RegiterIfNeedEFDataCoonection <EccDbContext>();
     DbFileManagerServiceCollectionExtensions.CheckForDbFileManager(appBuilder.Services);
 }
Beispiel #7
0
 /// <summary>
 /// Зарегистрировать контекст
 /// </summary>
 /// <typeparam name="TUsersStorage"></typeparam>
 /// <param name="appBuilder"></param>
 /// <param name="regiteringStorage"></param>
 /// <param name="isAdminChecker"></param>
 public static void Register <TUsersStorage>(CrocoApplicationBuilder appBuilder, Func <IServiceProvider, TUsersStorage> regiteringStorage, Func <IPrincipal, bool> isAdminChecker)
     where TUsersStorage : class, IUsersStorage
 {
     RegisterInner <TUsersStorage>(appBuilder, isAdminChecker, () => appBuilder.Services.AddScoped <IUsersStorage, TUsersStorage>(regiteringStorage));
 }