public AnabasisConfiguration(IConfigurationRoot configurationRoot, AnabasisEnvironment anabasisEnvironment, AppConfigurationOptions appConfigurationOptions, GroupConfigurationOptions groupConfigurationOptions)
 {
     ConfigurationRoot         = configurationRoot;
     AnabasisEnvironment       = anabasisEnvironment;
     AppConfigurationOptions   = appConfigurationOptions;
     GroupConfigurationOptions = groupConfigurationOptions;
 }
示例#2
0
 public TokenFactory(IConnectionMultiplexer cache, IJwtTokenValidator jwtTokenValidator,
                     AppConfigurationOptions configOptions)
 {
     _cache             = cache;
     _jwtTokenValidator = jwtTokenValidator;
     _configOptions     = configOptions;
 }
        private static IServiceCollection AddAdditional(this IServiceCollection services,
                                                        Action <AppConfigurationOptions> config)
        {
            var options = new AppConfigurationOptions();

            config.Invoke(options);

            // registers health check
            services.AddHealthChecks().AddSqlServer(options.DefaultConnection);

            // registers redis
            services.AddSingleton <IConnectionMultiplexer>(ConnectionMultiplexer.Connect(options.Redis));

            // configures JwtIssuerOptions
            services.Configure <JwtIssuerOptions>(jwtOptions =>
            {
                jwtOptions.Issuer = options.Issuer;
                //jwtOptions.Audience = options.Audience;
                jwtOptions.SecretKey = options.SecretKey;
                jwtOptions.ValidFor  = TimeSpan.FromMinutes(options.JwtTimeout);
            });

            // configures ExceptionEmailOptions
            services.Configure <ExceptionEmailOptions>(eOptions =>
            {
                eOptions.EmailSubject     = $"{options.Subject} {options.InstallEnvironment}";
                eOptions.EmailTo          = options.ErrorTo;
                eOptions.FromAddress      = options.ErrorFrom;
                eOptions.MicroServiceName = options.MicroServiceName;
            });

            // registers EmailHelper
            services.AddTransient <IEmailHelper>(provider =>
            {
                var emailHelper = new EmailHelper(options.SmtpHost);

                return(emailHelper);
            });

            // registers jwt libraries
            services.AddJwtAuthLibrary();

            // registers api version
            services.AddApiVersioning(o =>
            {
                o.ReportApiVersions = true;
                o.AssumeDefaultVersionWhenUnspecified = true;
                o.DefaultApiVersion = new ApiVersion(1, 0);
                o.ApiVersionReader  = new HeaderApiVersionReader("api-version");
            });

            // registers authentication
            services.AddServiceAuth(config);

            return(services);
        }
        /// <summary>
        /// Injecting authentication services for service connect
        /// </summary>
        /// <param name="services"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static IServiceCollection AddServiceAuth(this IServiceCollection services,
                                                        Action <AppConfigurationOptions> config)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            // getting configuration
            var options = new AppConfigurationOptions();

            config.Invoke(options);

            // Jwt token parameters
            var tokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer   = true,
                ValidIssuer      = options.Issuer,
                ValidateAudience = false,
                //ValidAudience = options.Audience,
                ValidateIssuerSigningKey = true,
                IssuerSigningKey         =
                    new SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.SecretKey)),
                RequireExpirationTime = false,
                ValidateLifetime      = true,
                ClockSkew             = TimeSpan.Zero
            };

            // registers jwt authentication
            services.AddAuthentication(authOptions =>
            {
                authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                authOptions.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(configureOptions =>
            {
                configureOptions.ClaimsIssuer = options.Issuer;
                configureOptions.TokenValidationParameters = tokenValidationParameters;
                configureOptions.SaveToken = true;

                configureOptions.EventsType = typeof(CustomJwtBearerEvents);
            });

            // registers authorization
            services.AddAuthorizationCore(authOptions =>
            {
                authOptions.AddPolicy(options.Issuer,
                                      policy => policy.RequireClaim("rol", "sc_ms_api_access"));
            });

            return(services);
        }
示例#5
0
 public ServerController(
     ILogger <ServerController> logger,
     IOptions <AppConfigurationOptions> appConfiguration,
     IHubContext <EventMessageHub> kafkaHubContext,
     IHubContext <LogHub> logHubContext
     )
 {
     this._kafkaHubContext  = kafkaHubContext;
     this._logHubContext    = logHubContext;
     this._appConfiguration = appConfiguration.Value;
     this._logger           = logger;
 }
        public static AnabasisConfiguration GetConfigurations(Action <ConfigurationBuilder>?configureConfigurationBuilder = null, DirectoryInfo?rootDirectory = null)
        {
            rootDirectory ??= new DirectoryInfo(Directory.GetCurrentDirectory());

            var environment = Environment.GetEnvironmentVariable(AspNetCoreEnvironment);

            var anabasisEnvironment = AnabasisEnvironment.Development;

            if (null != environment && Enum.TryParse <AnabasisEnvironment>(environment, out var result))
            {
                anabasisEnvironment = result;
            }

            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddEnvironmentVariables();

            configurationBuilder.AddJsonFile(Path.Combine(rootDirectory.FullName, BaseAppConfigurationFile), false, false);
            configurationBuilder.AddJsonFile(Path.Combine(rootDirectory.FullName, GetAppConfigurationOverrideFile(anabasisEnvironment)), true, false);

            configurationBuilder.AddJsonFile(Path.Combine(rootDirectory.FullName, BaseGroupConfigurationFileTemplate), true, false);
            configurationBuilder.AddJsonFile(Path.Combine(rootDirectory.FullName, GetGroupConfigurationOverrideFile(anabasisEnvironment)), true, false);

            configureConfigurationBuilder?.Invoke(configurationBuilder);

            var configurationRoot = configurationBuilder.Build();

            var appConfigurationOptions = new AppConfigurationOptions();

            configurationRoot.GetSection(nameof(AppConfigurationOptions)).Bind(appConfigurationOptions);

            appConfigurationOptions.Validate();

            var groupConfigurationOptions = new GroupConfigurationOptions();

            configurationRoot.GetSection(nameof(GroupConfigurationOptions)).Bind(groupConfigurationOptions);

            groupConfigurationOptions.Validate();

            var anabasisConfiguration = new AnabasisConfiguration(
                configurationRoot,
                anabasisEnvironment,
                appConfigurationOptions,
                groupConfigurationOptions);

            return(anabasisConfiguration);
        }
        /// <summary>
        /// Adding service connect related services into service collection
        /// </summary>
        /// <param name="services"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static IServiceCollection AddServiceServices(this IServiceCollection services,
                                                            Action <AppConfigurationOptions> config)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            // getting configuration
            var options = new AppConfigurationOptions();

            config.Invoke(options);

            services.AddSingleton(provider => options);

            ////keeps the casing to that of the model when serializing to json (default is converting to camelCase)
            //services.AddMvc().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);

            // add cors
            //services.AddCors();

            services.AddCors(s =>
            {
                s.AddDefaultPolicy(c =>
                {
                    c.AllowAnyOrigin();
                    c.AllowAnyHeader();
                    c.AllowAnyMethod();
                });
            });



            // registers swagger
            services.AddSwagger(config);

            return(services);
        }
示例#8
0
 public AppConfigViewModel(AppConfigurationOptions appConfig)
 {
     AppConfig = appConfig ?? new AppConfigurationOptions();
 }
        /// <summary>
        /// Adding swagger related services for service connect
        /// </summary>
        /// <param name="services"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static IServiceCollection AddSwagger(this IServiceCollection services,
                                                    Action <AppConfigurationOptions> config)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            // getting configuration
            var options = new AppConfigurationOptions();

            config.Invoke(options);

            // registers swagger ui configuration
            services.AddSwaggerGen(swaggerOptions =>
            {
                swaggerOptions.SwaggerDoc(options.SwaggerVersion, new OpenApiInfo
                {
                    Version     = options.SwaggerVersion,
                    Title       = options.SwaggerTitle,
                    Description = options.SwaggerDescription,
                    Contact     = new OpenApiContact
                    {
                        Name  = options.SwaggerTeamName,
                        Email = options.SwaggerTeamContact
                    }
                });

                swaggerOptions.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    Name         = "Authorization",
                    Type         = SecuritySchemeType.ApiKey,
                    Scheme       = "Bearer",
                    BearerFormat = "JWT",
                    In           = ParameterLocation.Header,
                    Description  = "JWT Authorization header using the Bearer scheme."
                });

                swaggerOptions.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "Bearer"
                            }
                        },
                        new string[] { }
                    }
                });

                swaggerOptions.OperationFilter <HeaderParameterOperationFilter>();

                swaggerOptions.ResolveConflictingActions(api => api.First());

                swaggerOptions.IgnoreObsoleteActions();

                swaggerOptions.IgnoreObsoleteProperties();

                //swaggerOptions.IncludeXmlComments(options.XmlCommentsFilePath);
            });

            return(services);
        }