Example #1
0
 public ToolService(IHttpClientFactory httpClient,
                    IHttpContextAccessor httpContextAccessor,
                    IOptions <TencentCloudOptions> tencentCloudOptions,
                    IOptions <FtqqOptions> ftqqOptions
                    )
 {
     _httpClient          = httpClient;
     _httpContextAccessor = httpContextAccessor;
     _tencentCloudOptions = tencentCloudOptions.Value;
     _ftqqOptions         = ftqqOptions.Value;
 }
        public override void PreConfigureServices(ServiceConfigurationContext context)
        {
            var configuration = context.Services.GetConfiguration();

            var swagger      = new SwaggerOptions();
            var storage      = new StorageOptions();
            var cors         = new CorsOptions();
            var jwt          = new JwtOptions();
            var worker       = new WorkerOptions();
            var signature    = new SignatureOptions();
            var tencentCloud = new TencentCloudOptions();
            var authorize    = new AuthorizeOptions();
            var ftqq         = new FtqqOptions();

            PreConfigure <SwaggerOptions>(options =>
            {
                var swaggerOption = configuration.GetSection("swagger");
                Configure <SwaggerOptions>(swaggerOption);

                options.Version       = swaggerOption.GetValue <string>(nameof(options.Version));
                options.Name          = swaggerOption.GetValue <string>(nameof(options.Name));
                options.Title         = swaggerOption.GetValue <string>(nameof(options.Title));
                options.Description   = swaggerOption.GetValue <string>(nameof(options.Description));
                options.RoutePrefix   = swaggerOption.GetValue <string>(nameof(options.RoutePrefix));
                options.DocumentTitle = swaggerOption.GetValue <string>(nameof(options.DocumentTitle));

                swagger = options;
            });
            PreConfigure <StorageOptions>(options =>
            {
                var storageOption = configuration.GetSection("storage");
                Configure <StorageOptions>(storageOption);

                options.EnableDb         = storageOption.GetValue <string>(nameof(options.EnableDb));
                options.ConnectionString = storageOption.GetValue <string>(options.EnableDb);
                options.RedisStatus      = storageOption.GetValue <bool>(nameof(options.RedisStatus));
                options.RedisConnection  = storageOption.GetValue <string>(nameof(options.RedisConnection));

                storage = options;
            });
            PreConfigure <CorsOptions>(options =>
            {
                var corsOption = configuration.GetSection("cors");
                Configure <CorsOptions>(corsOption);

                options.PolicyName = corsOption.GetValue <string>(nameof(options.PolicyName));
                options.Origins    = corsOption.GetValue <string>(nameof(options.Origins));

                cors = options;
            });
            PreConfigure <JwtOptions>(options =>
            {
                var jwtOption = configuration.GetSection("jwt");
                Configure <JwtOptions>(jwtOption);

                options.Issuer     = jwtOption.GetValue <string>(nameof(options.Issuer));
                options.Audience   = jwtOption.GetValue <string>(nameof(options.Audience));
                options.SigningKey = jwtOption.GetValue <string>(nameof(options.SigningKey));

                jwt = options;
            });
            PreConfigure <WorkerOptions>(options =>
            {
                var workerOption = configuration.GetSection("worker");
                Configure <WorkerOptions>(workerOption);

                options.IsEnabled = workerOption.GetValue <bool>(nameof(options.IsEnabled));
                options.Cron      = workerOption.GetValue <string>(nameof(options.Cron));

                worker = options;
            });
            //PreConfigure<TencentCloudOptions>(options =>
            //{
            //    var tencentCloudOption = configuration.GetSection("tencentCloud");
            //    Configure<TencentCloudOptions>(tencentCloudOption);

            //    options.SecretId = tencentCloudOption.GetValue<string>(nameof(options.SecretId));
            //    options.SecretKey = tencentCloudOption.GetValue<string>(nameof(options.SecretKey));

            //    tencentCloud = options;
            //});
            PreConfigure <SignatureOptions>(options =>
            {
                var signatureOption = configuration.GetSection("signature");

                options.Path = signatureOption.GetValue <string>(nameof(options.Path));

                foreach (var item in signatureOption.GetSection(nameof(options.Urls)).GetChildren())
                {
                    options.Urls.Add(item.GetValue <string>("url"), item.GetValue <string>("param"));
                }

                signature = options;
                Configure <SignatureOptions>(item =>
                {
                    item.Path = signature.Path;
                    item.Urls = signature.Urls;
                });
            });
            PreConfigure <AuthorizeOptions>(options =>
            {
                var authorizeOption = configuration.GetSection("authorize");
                var githubOption    = authorizeOption.GetSection("github");
                var giteeOption     = authorizeOption.GetSection("gitee");
                var alipayOption    = authorizeOption.GetSection("alipay");
                var dingtalkOption  = authorizeOption.GetSection("dingtalk");
                var microsoftOption = authorizeOption.GetSection("microsoft");
                var weiboOptions    = authorizeOption.GetSection("weibo");
                var qqOptions       = authorizeOption.GetSection("qq");

                Configure <AuthorizeOptions>(authorizeOption);
                Configure <GithubOptions>(githubOption);
                //Configure<GiteeOptions>(giteeOption);
                //Configure<AlipayOptions>(alipayOption);
                //Configure<DingtalkOptions>(dingtalkOption);
                //Configure<MicrosoftOptions>(microsoftOption);
                //Configure<WeiboOptions>(weiboOptions);
                //Configure<QQOptions>(qqOptions);

                options.Github = new GithubOptions
                {
                    ClientId     = githubOption.GetValue <string>(nameof(options.Github.ClientId)),
                    ClientSecret = githubOption.GetValue <string>(nameof(options.Github.ClientSecret)),
                    RedirectUrl  = githubOption.GetValue <string>(nameof(options.Github.RedirectUrl)),
                    Scope        = githubOption.GetValue <string>(nameof(options.Github.Scope))
                };
                //options.Gitee = new GiteeOptions
                //{
                //    ClientId = giteeOption.GetValue<string>(nameof(options.Gitee.ClientId)),
                //    ClientSecret = giteeOption.GetValue<string>(nameof(options.Gitee.ClientSecret)),
                //    RedirectUrl = giteeOption.GetValue<string>(nameof(options.Gitee.RedirectUrl)),
                //    Scope = giteeOption.GetValue<string>(nameof(options.Gitee.Scope))
                //};
                //options.Alipay = new AlipayOptions
                //{
                //    AppId = alipayOption.GetValue<string>(nameof(options.Alipay.AppId)),
                //    RedirectUrl = alipayOption.GetValue<string>(nameof(options.Alipay.RedirectUrl)),
                //    Scope = alipayOption.GetValue<string>(nameof(options.Alipay.Scope)),
                //    PrivateKey = alipayOption.GetValue<string>(nameof(options.Alipay.PrivateKey)),
                //    PublicKey = alipayOption.GetValue<string>(nameof(options.Alipay.PublicKey))
                //};
                //options.Dingtalk = new DingtalkOptions
                //{
                //    AppId = dingtalkOption.GetValue<string>(nameof(options.Dingtalk.AppId)),
                //    AppSecret = dingtalkOption.GetValue<string>(nameof(options.Dingtalk.AppSecret)),
                //    RedirectUrl = dingtalkOption.GetValue<string>(nameof(options.Dingtalk.RedirectUrl)),
                //    Scope = dingtalkOption.GetValue<string>(nameof(options.Dingtalk.Scope))
                //};
                //options.Microsoft = new MicrosoftOptions
                //{
                //    ClientId = microsoftOption.GetValue<string>(nameof(options.Microsoft.ClientId)),
                //    ClientSecret = microsoftOption.GetValue<string>(nameof(options.Microsoft.ClientSecret)),
                //    RedirectUrl = microsoftOption.GetValue<string>(nameof(options.Microsoft.RedirectUrl)),
                //    Scope = microsoftOption.GetValue<string>(nameof(options.Microsoft.Scope))
                //};
                //options.Weibo = new WeiboOptions
                //{
                //    ClientId = weiboOptions.GetValue<string>(nameof(options.Weibo.ClientId)),
                //    ClientSecret = weiboOptions.GetValue<string>(nameof(options.Weibo.ClientSecret)),
                //    RedirectUrl = weiboOptions.GetValue<string>(nameof(options.Weibo.RedirectUrl)),
                //    Scope = weiboOptions.GetValue<string>(nameof(options.Weibo.Scope))
                //};
                //options.QQ = new QQOptions
                //{
                //    ClientId = qqOptions.GetValue<string>(nameof(options.QQ.ClientId)),
                //    ClientSecret = qqOptions.GetValue<string>(nameof(options.QQ.ClientSecret)),
                //    RedirectUrl = qqOptions.GetValue<string>(nameof(options.QQ.RedirectUrl)),
                //    Scope = qqOptions.GetValue<string>(nameof(options.QQ.Scope))
                //};
                authorize = options;
            });
            PreConfigure <FtqqOptions>(options =>
            {
                var ftqqOptions = configuration.GetSection("ftqq");
                Configure <FtqqOptions>(ftqqOptions);

                options.ApiUrl = ftqqOptions.GetValue <string>(nameof(options.ApiUrl));
                options.Token  = ftqqOptions.GetValue <string>(nameof(options.Token));

                ftqq = options;
            });

            PreConfigure <AppOptions>(options =>
            {
                options.Swagger      = swagger;
                options.Storage      = storage;
                options.Cors         = cors;
                options.Jwt          = jwt;
                options.Worker       = worker;
                options.Signature    = signature;
                options.TencentCloud = tencentCloud;
                options.Authorize    = authorize;
                options.Ftqq         = ftqq;

                Configure <AppOptions>(item =>
                {
                    item.Swagger      = swagger;
                    item.Storage      = storage;
                    item.Cors         = cors;
                    item.Jwt          = jwt;
                    item.Worker       = worker;
                    item.Signature    = signature;
                    item.TencentCloud = tencentCloud;
                    item.Authorize    = authorize;
                    item.Ftqq         = ftqq;
                });
            });
        }