public static Core.BioEngine AddS3Storage(this Core.BioEngine bioEngine)
        {
            return(bioEngine.AddModule <S3StorageModule, S3StorageModuleConfig>((configuration, env) =>
            {
                var uri = configuration["BE_STORAGE_PUBLIC_URI"];
                var success = Uri.TryCreate(uri, UriKind.Absolute, out var publicUri);
                if (!success)
                {
                    throw new ArgumentException($"URI {uri} is not proper URI");
                }

                var serverUriStr = configuration["BE_STORAGE_S3_SERVER_URI"];
                success = Uri.TryCreate(serverUriStr, UriKind.Absolute, out var serverUri);
                if (!success)
                {
                    throw new ArgumentException($"S3 server URI {serverUriStr} is not proper URI");
                }

                return new S3StorageModuleConfig(publicUri, serverUri, configuration["BE_STORAGE_S3_BUCKET"],
                                                 configuration["BE_STORAGE_S3_ACCESS_KEY"], configuration["BE_STORAGE_S3_SECRET_KEY"])
                {
                    LargeThumbnailHeight = 578, LargeThumbnailWidth = 800
                };
            }));
        }
        public static Core.BioEngine AddS3Client(this Core.BioEngine bioEngine)
        {
            return(bioEngine.AddModule <S3ClientModule, S3ClientModuleConfig>((configuration, env) =>
            {
                var serverUriStr = configuration["BE_STORAGE_S3_SERVER_URI"];
                var success = Uri.TryCreate(serverUriStr, UriKind.Absolute, out var serverUri);
                if (!success)
                {
                    throw new ArgumentException($"S3 server URI {serverUri} is not proper URI");
                }

                return new S3ClientModuleConfig(serverUri, configuration["BE_STORAGE_S3_BUCKET"],
                                                configuration["BE_STORAGE_S3_ACCESS_KEY"], configuration["BE_STORAGE_S3_SECRET_KEY"]);
            }));
        }
 public static Core.BioEngine AddPostgresDb(this Core.BioEngine bioEngine, bool enablePooling = true)
 {
     return(bioEngine
            .AddEntities()
            .AddModule <PostgresDatabaseModule <BioContext>, PostgresDatabaseModuleConfig>(
                (configuration, env) => new PostgresDatabaseModuleConfig(configuration["BE_POSTGRES_HOST"],
                                                                         configuration["BE_POSTGRES_USERNAME"], configuration["BE_POSTGRES_DATABASE"],
                                                                         configuration["BE_POSTGRES_PASSWORD"], int.Parse(configuration["BE_POSTGRES_PORT"]),
                                                                         typeof(MigrationsManager).Assembly)
     {
         EnableNpgsqlPooling = env.IsDevelopment()
     })
            .ConfigureServices(
                collection =>
     {
         collection.AddHealthChecks().AddDbContextCheck <BioContext>();
     }));
 }
        public static Core.BioEngine AddBrcSite(this Core.BioEngine bioEngine)
        {
            bioEngine
            .AddPostgresDb()
            .AddBrcDomain()
            .AddModule <PagesSiteModule>()
            .AddModule <PostsSiteModule <string> >()
            .AddModule <BrcSiteModule, BrcSiteModuleConfig>(
                (configuration, env) =>
                new BrcSiteModuleConfig(configuration["BE_PATREON_SERVICE_URL"]))
            .AddElasticSearch()
            .AddS3Storage()
            .AddModule <SeoModule>()
            .AddModule <IPBSiteModule, IPBSiteModuleConfig>((configuration, env) =>
            {
                if (!Uri.TryCreate(configuration["BE_IPB_URL"], UriKind.Absolute, out var ipbUrl))
                {
                    throw new ArgumentException($"Can't parse IPB url; {configuration["BE_IPB_URL"]}");
                }

                return(new IPBSiteModuleConfig(ipbUrl)
                {
                    ApiReadonlyKey = configuration["BE_IPB_API_READONLY_KEY"]
                });
            })
            .AddIpbUsers <IPBSiteUsersModule, IPBSiteUsersModuleConfig, IPBSiteCurrentUserProvider>()
            .AddModule <SiteModule, SiteModuleConfig>((configuration, env) =>
                                                      new SiteModuleConfig(
                                                          Guid.Parse(configuration["BE_SITE_ID"])))
            .AddModule <AdsSiteModule>();

            bioEngine.ConfigureServices((context, collection) =>
            {
                if (context.HostingEnvironment.IsDevelopment())
                {
                    collection.AddScoped <IUserDataProvider <string>, TestUserDataProvider>();
                }
            });

            return(bioEngine);
        }
 protected override Core.BioEngine ConfigureBioEngine(Core.BioEngine bioEngine)
 {
     return(base.ConfigureBioEngine(bioEngine).ConfigureServices(collection =>
     {
         collection.AddScoped <FilesUploader>();
         collection.AddHttpClient();
         collection.AddScoped <HtmlParser>();
     }).AddBrcDomain().AddModule <FileStorageModule, FileStorageModuleConfig>((configuration, environment) =>
     {
         var tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
         Directory.CreateDirectory(tempDirectory);
         return new FileStorageModuleConfig(new Uri("https://test.bioware.ru"), tempDirectory);
     }).AddModule <SeoModule>()
            .AddModule <TwitterModule>()
            .AddElasticSearch()
            .AddModule <PagesApiModule>()
            .AddModule <FacebookModule>().ConfigureAppConfiguration(builder =>
     {
         builder.AddUserSecrets <Importer>();
         builder.AddEnvironmentVariables();
     }).Run <ImporterStartup>());
 }
Пример #6
0
        public static async Task Main(string[] args)
        {
            var bioEngine = new Core.BioEngine(args)
                            .AddPostgresDb()
                            .AddBrcDomain()
                            .AddS3Storage()
                            .AddModule <IPBSiteModule, IPBSiteModuleConfig>((configuration, env) =>
            {
                if (!Uri.TryCreate(configuration["BE_IPB_URL"], UriKind.Absolute, out var ipbUrl))
                {
                    throw new ArgumentException($"Can't parse IPB url; {configuration["BE_IPB_URL"]}");
                }

                return(new IPBSiteModuleConfig(ipbUrl)
                {
                    ApiReadonlyKey = configuration["BE_IPB_API_READONLY_KEY"]
                });
            })
                            .AddIpbUsers <IPBSiteUsersModule, IPBSiteUsersModuleConfig, IPBSiteCurrentUserProvider>()
                            .AddModule <PostsSiteModule <string> >()
                            .AddModule <JobsModule>();

            await bioEngine.RunAsync <Startup>();
        }
 public static Core.BioEngine AddBrcDomain(this Core.BioEngine bioEngine)
 {
     return(bioEngine.AddModule <BrcDomainModule>());
 }
 public static Core.BioEngine AddElasticSearch(this Core.BioEngine bioEngine)
 {
     return(bioEngine.AddModule <ElasticSearchModule, ElasticSearchModuleConfig>((configuration, env) =>
                                                                                 new ElasticSearchModuleConfig(configuration["BE_ELASTICSEARCH_PREFIX"],
                                                                                                               configuration["BE_ELASTICSEARCH_URI"], enableClientLogging: env.IsDevelopment())));
 }
        AddIpbUsers <TUsersModule, TConfig, TCurrentUserProvider>(this Core.BioEngine bioEngine)
            where TUsersModule : IPBUsersModule <TConfig, TCurrentUserProvider>, new()
            where TConfig : IPBUsersModuleConfig, new()
            where TCurrentUserProvider : class, ICurrentUserProvider <string>
        {
            return(bioEngine.AddModule <TUsersModule, TConfig>((configuration, env) =>
            {
                bool.TryParse(configuration["BE_IPB_API_DEV_MODE"] ?? "", out var devMode);
                int.TryParse(configuration["BE_IPB_API_ADMIN_GROUP_ID"], out var adminGroupId);
                int.TryParse(configuration["BE_IPB_API_SITE_TEAM_GROUP_ID"], out var siteTeamGroupId);

                var additionalGroupIds = new List <int> {
                    siteTeamGroupId
                };
                if (!string.IsNullOrEmpty(configuration["BE_IPB_API_ADDITIONAL_GROUP_IDS"]))
                {
                    var ids = configuration["BE_IPB_API_ADDITIONAL_GROUP_IDS"].Split(',');
                    foreach (var id in ids)
                    {
                        if (int.TryParse(id, out var parsedId))
                        {
                            additionalGroupIds.Add(parsedId);
                        }
                    }
                }

                var adminPolicy = new AuthorizationPolicyBuilder().RequireClaim(ClaimTypes.Role, "admin").Build();
                var siteTeamPolicy = new AuthorizationPolicyBuilder()
                                     .RequireClaim(ClaimTypes.GroupSid, siteTeamGroupId.ToString(), adminGroupId.ToString())
                                     .Build();
                var policies = new Dictionary <string, AuthorizationPolicy>
                {
                    { BioPolicies.Admin, adminPolicy },
                    { BrcPolicies.SiteTeam, siteTeamPolicy },
                    // sections
                    { BioPolicies.Sections, siteTeamPolicy },
                    { BioPolicies.SectionsAdd, adminPolicy },
                    { BioPolicies.SectionsEdit, adminPolicy },
                    { BioPolicies.SectionsPublish, adminPolicy },
                    { BioPolicies.SectionsDelete, adminPolicy },
                    // posts
                    { PostsPolicies.Posts, siteTeamPolicy },
                    { PostsPolicies.PostsAdd, siteTeamPolicy },
                    { PostsPolicies.PostsEdit, siteTeamPolicy },
                    { PostsPolicies.PostsDelete, siteTeamPolicy },
                    { PostsPolicies.PostsPublish, siteTeamPolicy },
                    // pages
                    { PagesPolicies.Pages, adminPolicy },
                    { PagesPolicies.PagesAdd, adminPolicy },
                    { PagesPolicies.PagesEdit, adminPolicy },
                    { PagesPolicies.PagesDelete, adminPolicy },
                    { PagesPolicies.PagesPublish, adminPolicy },
                    // ads
                    { AdsPolicies.Ads, adminPolicy },
                    { AdsPolicies.AdsAdd, adminPolicy },
                    { AdsPolicies.AdsEdit, adminPolicy },
                    { AdsPolicies.AdsDelete, adminPolicy },
                    { AdsPolicies.AdsPublish, adminPolicy }
                };

                var config = new TConfig
                {
                    DevMode = devMode,
                    AdminGroupId = adminGroupId,
                    AdditionalGroupIds = additionalGroupIds.Distinct().ToArray(),
                    CallbackPath = "/login/ipb",
                    ApiClientId = configuration["BE_IPB_OAUTH_CLIENT_ID"],
                    ApiClientSecret = configuration["BE_IPB_OAUTH_CLIENT_SECRET"],
                    AuthorizationEndpoint = configuration["BE_IPB_AUTHORIZATION_ENDPOINT"],
                    TokenEndpoint = configuration["BE_IPB_TOKEN_ENDPOINT"],
                    DataProtectionPath = configuration["BE_IPB_DATA_PROTECTION_PATH"]
                };

                foreach (var policy in policies)
                {
                    config.Policies.Add(policy.Key, policy.Value);
                }

                return config;
            }));
        }
Пример #10
0
        public static async Task Main(string[] args)
        {
            var bioEngine = new Core.BioEngine(args).AddBrcSite();

            await bioEngine.RunAsync <Startup>();
        }