public static MultiTenantBuilder AddPerTenantSocialLogins(this MultiTenantBuilder authBuilder)
        {
            foreach (var socialLogin in SocialLoginProvider.Instance.Get)
            {
                authBuilder = socialLogin.AddSocialLoginTenantOptions(authBuilder);
            }

            return(authBuilder);
        }
Exemple #2
0
 /// <summary>
 /// 启用制定路由策略
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="tenantParam"></param>
 /// <returns></returns>
 public static MultiTenantBuilder WithRouteStrategy(
     this MultiTenantBuilder builder,
     string tenantParam)
 {
     if (string.IsNullOrWhiteSpace(tenantParam))
     {
         throw new ArgumentException("\"tenantParam\" 不能为空", nameof(tenantParam));
     }
     return(builder.WithStrategy <RouteStrategy>(ServiceLifetime.Singleton, new object[] { tenantParam }));
 }
Exemple #3
0
        public static MultiTenantBuilder WithRemoteAuthentication(this MultiTenantBuilder builder)
        {
            // 替换验证的实现实例
            builder.Services.Replace(ServiceDescriptor.Singleton <IAuthenticationSchemeProvider, MultiTenantAuthenticationSchemeProvider>());
            // builder.Services.Replace(ServiceDescriptor.Scoped<IAuthenticationService, MultiTenantAuthenticationService>());
            builder.Services.DecorateService <IAuthenticationService, MultiTenantAuthenticationService>();
            builder.Services.TryAddSingleton <RemoteAuthenticationStrategy>();

            return(builder);
        }
Exemple #4
0
 /// <summary>
 /// 委托策略
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="doStrategy">委托函数</param>
 /// <returns></returns>
 public static MultiTenantBuilder WithDelegateStrategy(
     this MultiTenantBuilder builder,
     Func <object, Task <string> > doStrategy)
 {
     if (doStrategy == null)
     {
         throw new ArgumentNullException(nameof(doStrategy));
     }
     return(builder.WithStrategy <DelegateStrategy>(ServiceLifetime.Singleton, new object[] { doStrategy }));
 }
Exemple #5
0
        /// <summary>
        /// Adds and configures a HostStrategy to the application.
        /// </summary>
        /// <param name="template">The template for determining the tenant identifier in the host.</param>
        /// <returns>The same MultiTenantBuilder passed into the method.</returns>
        public static MultiTenantBuilder WithHostStrategy(
            this MultiTenantBuilder builder,
            string template)
        {
            if (string.IsNullOrWhiteSpace(template))
            {
                throw new ArgumentException("Invalid value for \"template\"", nameof(template));
            }

            return(builder.WithStrategy <HostStrategy>(ServiceLifetime.Singleton, new object[] { template }));
        }
Exemple #6
0
        /// <summary>
        /// 静态策略
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="identifier">策略标识</param>
        /// <returns></returns>
        public static MultiTenantBuilder WithStaticStrategy(
            this MultiTenantBuilder builder,
            string identifier)
        {
            if (string.IsNullOrWhiteSpace(identifier))
            {
                throw new ArgumentException("Invalid value for \"identifier\"", nameof(identifier));
            }

            return(builder.WithStrategy <StaticStrategy>(ServiceLifetime.Singleton, new object[] { identifier }));;
        }
        private MultiTenantBuilder AddGoogleTenant(MultiTenantBuilder arg)
        {
            return(arg.WithPerTenantOptions <GoogleOptions>((options, tenantContext) => {
                var socialLogins = tenantContext.Items[Tenant.Constants.SOCIALLOGINS] as Dictionary <string, Dictionary <string, string> >;
                if (socialLogins == null || !socialLogins.TryGetValue("google", out Dictionary <string, string> settings))
                {
                    return;
                }

                options.ClientId = settings["ClientId"];
                options.ClientSecret = settings["ClientSecret"];
            }));
        }
        private MultiTenantBuilder AddFacebookTenant(MultiTenantBuilder arg)
        {
            return(arg.WithPerTenantOptions <FacebookOptions>((options, tenantContext) => {
                var socialLogins = tenantContext.Items[Tenant.Constants.SOCIALLOGINS] as Dictionary <string, Dictionary <string, string> >;
                if (socialLogins == null || !socialLogins.TryGetValue("facebook", out Dictionary <string, string> settings))
                {
                    return;
                }

                options.AppId = settings["AppId"];
                options.AppSecret = settings["AppSecret"];
            }));
        }
        private MultiTenantBuilder AddTwitterTenant(MultiTenantBuilder arg)
        {
            return(arg.WithPerTenantOptions <TwitterOptions>((options, tenantContext) => {
                var socialLogins = tenantContext.Items[Tenant.Constants.SOCIALLOGINS] as Dictionary <string, Dictionary <string, string> >;
                if (socialLogins == null || !socialLogins.TryGetValue("twitter", out Dictionary <string, string> settings))
                {
                    return;
                }

                options.ConsumerKey = settings["ConsumerKey"];
                options.ConsumerSecret = settings["ConsumerSecret"];
            }));
        }
Exemple #10
0
        /// <summary>
        /// 获取远程租户参数
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="endpointTemplate"></param>
        /// <param name="clientConfig"></param>
        /// <returns></returns>
        public static MultiTenantBuilder WithHttpRemoteStore(
            this MultiTenantBuilder builder,
            string endpointTemplate,
            Action <IHttpClientBuilder> clientConfig)
        {
            var httpClientBuilder = builder.Services.AddHttpClient(typeof(HttpRemoteStoreClient).FullName);

            if (clientConfig != null)
            {
                clientConfig(httpClientBuilder);
            }

            builder.Services.TryAddSingleton <HttpRemoteStoreClient>();
            return(builder.WithStore <HttpRemoteStore>(ServiceLifetime.Singleton, endpointTemplate));
        }
Exemple #11
0
 /// <summary>
 /// 获取远程租户参数
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="endpointTemplate"></param>
 /// <returns></returns>
 public static MultiTenantBuilder WithHttpRemoteStore(
     this MultiTenantBuilder builder,
     string endpointTemplate)
 => builder.WithHttpRemoteStore(endpointTemplate, null);
Exemple #12
0
 /// <summary>
 /// 启用默认路由策略 "__tenant__.*"
 /// </summary>
 /// <returns>The same MultiTenantBuilder passed into the method.</returns>
 public static MultiTenantBuilder WithHostStrategy(this MultiTenantBuilder builder)
 => builder.WithHostStrategy("__tenant__.*");
Exemple #13
0
 /// <summary>
 /// 启用默认路由策略  route parameter 默认为 "__tenant__"
 /// </summary>
 /// <returns>The same MultiTenantBuilder passed into the method.</returns>
 public static MultiTenantBuilder WithRouteStrategy(this MultiTenantBuilder builder)
 => builder.WithRouteStrategy("__tenant__");
Exemple #14
0
 public static MultiTenantBuilder WithBasePathStrategy(this MultiTenantBuilder builder)
 => builder.WithStrategy <BasePathStrategy>(ServiceLifetime.Singleton);
Exemple #15
0
 /// <summary>
 /// 配置文件参数存储
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="configuration"></param>
 /// <param name="sectionName">节点名称</param>
 /// <returns></returns>
 public static MultiTenantBuilder WithConfigurationStore(
     this MultiTenantBuilder builder,
     IConfiguration configuration,
     string sectionName)
 => builder.WithStore <ConfigurationStore>(ServiceLifetime.Singleton, configuration, sectionName);
Exemple #16
0
 /// <summary>
 /// 配置文件参数存储
 /// </summary>
 /// <param name="builder"></param>
 /// <returns></returns>
 public static MultiTenantBuilder WithConfigurationStore(this MultiTenantBuilder builder)
 => builder.WithStore <ConfigurationStore>(ServiceLifetime.Singleton);