public virtual void Init(IAppSettings appSettings = null)
        {
            RequireSecureConnection = true;
            HashAlgorithm           = "RS256";
            ExpireTokensIn          = TimeSpan.FromDays(14);

            if (appSettings != null)
            {
                RequireSecureConnection = appSettings.Get("aadr.RequireSecureConnection", RequireSecureConnection);

                //Issuer = appSettings.GetString("jwt.Issuer");
                Audience = appSettings.GetString("aadr.Audience");
                Tenant   = appSettings.GetString("aadr.Tenant");
                //KeyId = appSettings.GetString("jwt.KeyId");

                //var hashAlg = appSettings.GetString("aadr.HashAlgorithm");
                //if (!string.IsNullOrEmpty(hashAlg))
                //	HashAlgorithm = hashAlg;

                //RequireHashAlgorithm = appSettings.Get("jwt.RequireHashAlgorithm", RequireSecureConnection);

                //PrivateKeyXml = appSettings.GetString("jwt.PrivateKeyXml");

                //PublicKeyXml = appSettings.GetString("jwt.PublicKeyXml");

                //var base64 = appSettings.GetString("jwt.AuthKeyBase64");
                //if (base64 != null)
                //	AuthKeyBase64 = base64;

                var dateStr = appSettings.GetString("aadr.InvalidateTokensIssuedBefore");
                if (!string.IsNullOrEmpty(dateStr))
                {
                    InvalidateTokensIssuedBefore = dateStr.FromJsv <DateTime>();
                }

                ExpireTokensIn = appSettings.Get("aadr.ExpireTokensIn", ExpireTokensIn);

                var intStr = appSettings.GetString("aadr.ExpireTokensInDays");
                if (intStr != null)
                {
                    ExpireTokensInDays = int.Parse(intStr);
                }
            }

            _jwtAuthProviderReader = new JwtAuthProviderReader();
            _jwtAuthProviderReader.RequireSecureConnection = RequireSecureConnection;
            //_jwtAuthProviderReader.Issuer = "ssjwt";
            _jwtAuthProviderReader.ExpireTokensIn = ExpireTokensIn;
            _jwtAuthProviderReader.InvalidateTokensIssuedBefore = InvalidateTokensIssuedBefore;

            _publicKeys = RetrievePublicKeys(Tenant);
        }
예제 #2
0
 public void Register(IAppHost appHost)
 {
     JwtAuthProvider = AuthenticateService.GetJwtAuthProvider();
     if (JwtAuthProvider is JwtAuthProvider)
     {
         appHost.RegisterService(typeof(JwksService));
     }
     else if (JwtAuthProvider != null)
     {
         var keySet = RetrieveKeySet();
         LoadKeySet(keySet);
     }
 }
예제 #3
0
        public override void Configure(Container container)
        {
            LogManager.LogFactory = new ConsoleLogFactory(debugEnabled: true);

            var jwtprovider = new JwtAuthProviderReader
            {
                HashAlgorithm = "RS256",
                PublicKeyXml  = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_JWT_PUBLIC_KEY_XML),
#if (DEBUG)
                RequireSecureConnection = false,
                //EncryptPayload = true,
#endif
            };

            this.Plugins.Add(new CorsFeature(allowedHeaders: "rToken, bToken, Content-Type, Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Credentials"));
            this.Plugins.Add(new ServerEventsFeature());
            this.Plugins.Add(new AuthFeature(() => new CustomUserSession(),
                                             new IAuthProvider[] {
                jwtprovider,
            }));

#if (DEBUG)
            SetConfig(new HostConfig {
                DebugMode = true
            });
#endif
            SetConfig(new HostConfig {
                DefaultContentType = MimeTypes.Json
            });

            string env = Environment.GetEnvironmentVariable(EnvironmentConstants.ASPNETCORE_ENVIRONMENT);

            var redisServer   = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_SERVER);
            var redisPassword = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_PASSWORD);
            var redisPort     = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_PORT);

            //if (env == "Staging")
            //{
            //    container.Register<IRedisClientsManager>(c => new RedisManagerPool(redisServer));
            //}
            //else
            //{
            var redisConnectionString = string.Format("redis://{0}@{1}:{2}", redisPassword, redisServer, redisPort);
            container.Register <IRedisClientsManager>(c => new RedisManagerPool(redisConnectionString));
            //}

            container.Register <IUserAuthRepository>(c => new MyRedisAuthRepository(c.Resolve <IRedisClientsManager>()));
            container.Register <IEbMqClient>(c => new EbMqClient()).ReusedWithin(ReuseScope.Request);

            RabbitMqMessageFactory rabitFactory = new RabbitMqMessageFactory();
            rabitFactory.ConnectionFactory.UserName    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_USER);
            rabitFactory.ConnectionFactory.Password    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_PASSWORD);
            rabitFactory.ConnectionFactory.HostName    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_HOST);
            rabitFactory.ConnectionFactory.Port        = Convert.ToInt32(Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_PORT));
            rabitFactory.ConnectionFactory.VirtualHost = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_VHOST);

            var mqServer = new RabbitMqServer(rabitFactory);

            container.AddScoped <IMessageProducer, RabbitMqProducer>(serviceProvider =>
            {
                return(mqServer.CreateMessageProducer() as RabbitMqProducer);
            });

            container.Register <IServerEvents>(c => new RedisServerEvents(c.Resolve <IRedisClientsManager>()));
            container.Resolve <IServerEvents>().Start();

            //Setting Assembly version in Redis
            RedisClient  client   = (container.Resolve <IRedisClientsManager>() as RedisManagerPool).GetClient() as RedisClient;
            AssemblyName assembly = Assembly.GetExecutingAssembly().GetName();
            String       version  = assembly.Name.ToString() + " - " + assembly.Version.ToString();
            client.Set("ServerEventsAssembly", version);


            this.GlobalRequestFilters.Add((req, res, requestDto) =>
            {
                ILog log = LogManager.GetLogger(GetType());

                log.Info("In GlobalRequestFilters");
                try
                {
                    log.Info("In Try");
                    if (requestDto != null)
                    {
                        log.Info("In Auth Header");
                        var auth = req.Headers[HttpHeaders.Authorization];
                        if (string.IsNullOrEmpty(auth))
                        {
                            res.ReturnAuthRequired();
                        }
                        else
                        {
                            if (req.Headers[CacheConstants.RTOKEN] != null)
                            {
                                log.Info("Req Headers Not Null");
                            }
                            var jwtoken = new JwtSecurityToken(auth.Replace("Bearer", string.Empty).Trim());
                            foreach (var c in jwtoken.Claims)
                            {
                                if (c.Type == "cid" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add(CoreConstants.SOLUTION_ID, c.Value);
                                    if (requestDto is IEbSSRequest)
                                    {
                                        (requestDto as IEbSSRequest).SolnId = c.Value;
                                    }
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).SolnId = c.Value;
                                    }
                                    continue;
                                }
                                if (c.Type == "uid" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("UserId", Convert.ToInt32(c.Value));
                                    if (requestDto is IEbSSRequest)
                                    {
                                        (requestDto as IEbSSRequest).UserId = Convert.ToInt32(c.Value);
                                    }
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).UserId = Convert.ToInt32(c.Value);
                                    }
                                    continue;
                                }
                                if (c.Type == "wc" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("wc", c.Value);
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).WhichConsole = c.Value.ToString();
                                    }
                                    continue;
                                }
                                if (c.Type == "sub" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("sub", c.Value);
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).UserAuthId = c.Value.ToString();
                                    }
                                    continue;
                                }
                            }
                            log.Info("Req Filter Completed");
                        }
                    }
                }
                catch (Exception e)
                {
                    log.Info("ErrorStackTraceNontokenServices..........." + e.StackTrace);
                    log.Info("ErrorMessageNontokenServices..........." + e.Message);
                    log.Info("InnerExceptionNontokenServices..........." + e.InnerException);
                }
            });
        }
예제 #4
0
        public override void Configure(Container container)
        {
            // Settings
            SetConfig(new HostConfig {
                UseCamelCase = true
            });

            RoleNames.Admin = Roles.Admin;

            JsConfig.EmitCamelCaseNames             = true;
            JsConfig.ExcludeTypeInfo                = true;
            JsConfig <UserSession> .IncludeTypeInfo = true;
            JsConfig.DateHandler = DateHandler.ISO8601;

            LogManager.LogFactory = new ConsoleLogFactory(debugEnabled: true);

            var baseSettings = new AppSettings();

            container.Register(baseSettings);
            container.Register(c => new MultiAppSettings(c.Resolve <AppSettings>()));
            var appSettings   = container.Resolve <MultiAppSettings>();
            var configuration =
                container.Resolve <Microsoft.Extensions.Options.IOptions <ApplicationConfiguration> >().Value;

            container.Register(configuration);

            // DB
            container.Register <IDbConnectionFactory>(c =>
            {
                var connectionString =
                    configuration.ConnectionStrings.AzureSql;
                return(new OrmLiteConnectionFactory(connectionString,
                                                    SqlServerDialect.Provider));
            });
            container.Register(c => c.Resolve <IDbConnectionFactory>().Open())
            .ReusedWithin(ReuseScope.None);

            // Redis
            //container.Register<IRedisClientsManager>(c =>
            //                                         {
            //                                             var connectionString =
            //                                                 configuration.ConnectionStrings.AzureRedis;
            //                                             return new RedisManagerPool(connectionString);
            //                                         });

            // Cache
            //container.Register(c => c.Resolve<IRedisClientsManager>().GetCacheClient());
            container.Register <ICacheClient>(new MemoryCacheClient {
                FlushOnDispose = false
            });

            // Validators
            container.RegisterValidators(typeof(IAuditable).GetAssembly());

            // Auth
            container.Register <IUserAuthRepository>(
                c => new OrmLiteAuthRepository(c.Resolve <IDbConnectionFactory>())
            {
                UseDistinctRoleTables = true
            });

            // Db filters
            OrmLiteConfig.InsertFilter = (dbCmd, row) =>
            {
                if (row is IAuditable)
                {
                    var auditRow = row as IAuditable;
                    auditRow.CreateDate = auditRow.ModifyDate = DateTime.UtcNow;
                }

                if (row is Product)
                {
                    var product = row as Product;
                    product.OnInsert();
                }
            };
            OrmLiteConfig.UpdateFilter = (dbCmd, row) =>
            {
                if (row is IAuditable)
                {
                    var auditRow = row as IAuditable;
                    auditRow.ModifyDate = DateTime.UtcNow;

                    if (auditRow.CreateDate == DateTime.MinValue)
                    {
                        auditRow.CreateDate = auditRow.ModifyDate;
                    }
                }

                if (row is Product)
                {
                    var product = row as Product;
                    product.OnUpdate();
                }
            };

            // Schema init
            using (var ctx = container.Resolve <IDbConnectionFactory>().Open())
            {
                ctx.CreateTableIfNotExists <ApiKey>();
                ctx.CreateTableIfNotExists <Category>();
                ctx.CreateTableIfNotExists <Product>();
                ctx.CreateTableIfNotExists <ProductCategory>();
                ctx.CreateTableIfNotExists <ProductImage>();
                ctx.CreateTableIfNotExists <Tag>();
                ctx.CreateTableIfNotExists <ProductTag>();
                ctx.CreateTableIfNotExists <UserPriceOverride>();
                ctx.CreateTableIfNotExists <Vendor>();
                ctx.CreateTableIfNotExists <InventoryTransaction>();
                ctx.CreateTableIfNotExists <Sale>();
                ctx.CreateTableIfNotExists <Warehouse>();
                ctx.CreateTableIfNotExists <Location>();
                ctx.CreateTableIfNotExists <Image>();
                ctx.CreateTableIfNotExists <Customer>();
                ctx.CreateTableIfNotExists <Merchant>();
                ctx.CreateTableIfNotExists <Order>();
                ctx.CreateTableIfNotExists <Offer>();
                ctx.CreateTableIfNotExists <Address>();
            }

            // Mail
            container.Register(c =>
            {
                var host   = configuration.Mail.Host;
                var port   = configuration.Mail.Port;
                var useSsl = configuration.Mail.UseSsl;
                var creds  = new NetworkCredential(configuration.Mail.Username,
                                                   configuration.Mail.Password);

                var client = new SmtpClient();
                client.Connect(host, port, useSsl);
                client.Authenticate(creds);

                return(client);
            });

            // Plugins
            Plugins.Add(new CorsFeature(
                            allowCredentials: true,
                            allowedMethods: "OPTIONS, GET, PUT, POST, PATCH, DELETE, SEARCH",
                            allowedHeaders: "Content-Type, X-Requested-With, Cache-Control, Authorization",
                            allowOriginWhitelist:
                            new List <string>
            {
                "http://localhost:6307",
                "http://localhost:8080",
                "http://0.0.0.0:8080",
                "http://0.0.0.0:3000",
                "http://inventory-web-dev-wb45gu.herokuapp.com",
                "https://inventory-web-dev-wb45gu.herokuapp.com",
                "https://inventory-web-sta-d8w373.herokuapp.com",
                "https://inventory.derprecated.com",
                "https://inventory-web-pro.herokuapp.com"
            },
                            maxAge: 3600));

            var jwk           = JwkFromUri(new Uri(configuration.Auth0.Jwks));
            var rsaPubkey     = RsaPubkeyFromJwk(jwk);
            var managementUri = new Uri($"https://{configuration.Auth0.Domain}/");
            var tokenAuth     = new JwtAuthProviderReader
            {
                RequireHashAlgorithm = true,
                HashAlgorithm        = "RS256",
                PublicKey            = rsaPubkey,
                Audience             = configuration.Auth0.Audience,
                Issuer = configuration.Auth0.Issuer,
                PopulateSessionFilter = (session, json, request) =>
                {
                    /* JSON object looks like:
                     * {
                     *  "app_metadata": {
                     *    "authorization": {
                     *      "roles": ["Admin", "User", "Delegated Admin - Administrator", "Delegated Admin - User"],
                     *      "permissions": ["everything", "login", "manageCategories", "dispatchInventory"]
                     *    }
                     *  },
                     *  "iss": "https://derprecated.auth0.com/",
                     *  "sub": "google-oauth2|108854378958464530522",
                     *  "aud": "HgdpKajxywOUlc52Uv6rASdiABMsnYd4",
                     *  "exp": 1489635158,
                     *  "iat": 1489599158
                     * }
                     *
                     * session props already set:
                     * session.UserAuthId = json.sub.split('|',2)[1]
                     */

                    var authorization = json.Object("app_metadata")
                                        .Object("authorization");
                    session.Permissions = authorization
                                          .GetArray <string>("permissions")
                                          .ToList();
                    session.Roles = authorization
                                    .GetArray <string>("roles")
                                    .ToList();
                },
#if DEBUG
                RequireSecureConnection = false
#endif
            };

            Plugins.Add(new AuthFeature(
                            () => new AuthUserSession(),
                            new IAuthProvider[]
            {
                tokenAuth
            },
                            "/login")
            {
                IncludeAssignRoleServices = false,
                ValidateUniqueEmails      = true
            });
            Plugins.Add(new ValidationFeature());
            Plugins.Add(new AutoQueryFeature {
                MaxLimit = 100
            });
            Plugins.Add(new SwaggerFeature());

            // Restrictions
            typeof(AssignRoles).AddAttributes(new RestrictAttribute {
                VisibleLocalhostOnly = true
            });
            typeof(UnAssignRoles).AddAttributes(new RestrictAttribute {
                VisibleLocalhostOnly = true
            });

            // Handlers
            container.RegisterAs <ImageHandler, IHandler <Image> >()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAs <ProductImageHandler, IHandler <ProductImage> >()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAs <LocationHandler, IHandler <Location> >()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAs <CategoryHandler, IHandler <Category> >()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAs <VendorHandler, IHandler <Vendor> >()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAs <WarehouseHandler, IHandler <Warehouse> >()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAs <ProductHandler, IHandler <Product> >()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <UserHandler>()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAutoWired <Auth0Handler>();
            container.RegisterAs <AddressHandler, IHandler <Address> >()
            .ReusedWithin(ReuseScope.Request);
            container.RegisterAs <OrderHandler, IHandler <Order> >()
            .ReusedWithin(ReuseScope.Request);
            container.Register(new StripeHandler(configuration.Stripe.SecretKey));
            container.RegisterAutoWired <InventoryHandler>()
            .ReusedWithin(ReuseScope.Request);

            // Misc
            container.Register(new AuthenticationApiClient(new Uri($"https://{configuration.Auth0.Domain}/")));
            container.Register(new ShopifyServiceClient($"https://{configuration.Shopify.Domain}")
            {
                UserName = configuration.Shopify.ApiKey,
                Password = configuration.Shopify.Password
            });
            container.Register(c =>
            {
                var connectionString = configuration.ConnectionStrings.AzureStorage;
                return(CloudStorageAccount.Parse(connectionString));
            });
            container.Register(c => c.Resolve <CloudStorageAccount>().CreateCloudBlobClient());
        }
        public override void Configure(Container container)
        {
            LogManager.LogFactory = new ConsoleLogFactory(debugEnabled: true);

            var jwtprovider = new JwtAuthProviderReader
            {
                HashAlgorithm           = "RS256",
                PublicKeyXml            = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_JWT_PUBLIC_KEY_XML),
                RequireSecureConnection = false,
                //EncryptPayload = true,
            };

            this.Plugins.Add(new AuthFeature(() => new CustomUserSession(),
                                             new IAuthProvider[] {
                jwtprovider,
            }));

#if (DEBUG)
            SetConfig(new HostConfig {
                DebugMode = true
            });
#endif
            SetConfig(new HostConfig {
                DefaultContentType = MimeTypes.Json
            });

            string env = Environment.GetEnvironmentVariable(EnvironmentConstants.ASPNETCORE_ENVIRONMENT);

            var redisServer   = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_SERVER);
            var redisPassword = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_PASSWORD);
            var redisPort     = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_PORT);

            RedisClient client = null;

            string redisConnectionString = string.Format("redis://{0}@{1}:{2}", redisPassword, redisServer, redisPort);
            container.Register <IRedisClientsManager>(c => new RedisManagerPool(redisConnectionString));
            client = (container.Resolve <IRedisClientsManager>() as RedisManagerPool).GetClient() as RedisClient;

            AssemblyName assembly = Assembly.GetExecutingAssembly().GetName();
            String       version  = assembly.Name.ToString() + " - " + assembly.Version.ToString();
            client.Set("MQAssembly", version);



            container.Register <IEbServerEventClient>(c => new EbServerEventClient()).ReusedWithin(ReuseScope.Request);
            container.Register <IServiceClient>(c => new JsonServiceClient(Environment.GetEnvironmentVariable(EnvironmentConstants.EB_SERVICESTACK_EXT_URL))).ReusedWithin(ReuseScope.Request);
            container.Register <IEbConnectionFactory>(c => new EbConnectionFactory(c)).ReusedWithin(ReuseScope.Request);
            container.Register <IEbStaticFileClient>(c => new EbStaticFileClient()).ReusedWithin(ReuseScope.Request);


            RabbitMqMessageFactory rabitFactory = new RabbitMqMessageFactory();
            rabitFactory.ConnectionFactory.UserName    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_USER);
            rabitFactory.ConnectionFactory.Password    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_PASSWORD);
            rabitFactory.ConnectionFactory.HostName    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_HOST);
            rabitFactory.ConnectionFactory.Port        = Convert.ToInt32(Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_PORT));
            rabitFactory.ConnectionFactory.VirtualHost = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_VHOST);

            var mqServer = new RabbitMqServer(rabitFactory);

            mqServer.RetryCount = 1;

            mqServer.RegisterHandler <RefreshSolutionConnectionsRequest>(base.ExecuteMessage);

            mqServer.RegisterHandler <UploadFileRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <UploadImageRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <UploadImageInfraMqRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <UploadDpRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <UploadLogoRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <NotificationToDBRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <SaveRoleMqRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <SaveUserMqRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <SuspendUserMqRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <BrowserExceptionRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <SaveUserGroupMqRequest>(base.ExecuteMessage);
            //mqServer.RegisterHandler<GetImageFtpRequest>(base.ExecuteMessage, 3);
            mqServer.RegisterHandler <EmailServicesRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <SMSSentRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <ApiMqRequest>(base.ExecuteMessage);
            //mqServer.RegisterHandler<SMSStatusLogMqRequest>(base.ExecuteMessage);
            //mqServer.RegisterHandler<SlackPostMqRequest>(base.ExecuteMessage);
            //mqServer.RegisterHandler<SlackAuthMqRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <ReportRenderMultipleMQRequest>(base.ExecuteMessage);

            mqServer.Start();

            container.AddScoped <IMessageProducer, RabbitMqProducer>(serviceProvider =>
            {
                return(mqServer.CreateMessageProducer() as RabbitMqProducer);
            });

            container.AddScoped <IMessageQueueClient, RabbitMqQueueClient>(serviceProvider =>
            {
                return(mqServer.CreateMessageQueueClient() as RabbitMqQueueClient);
            });

            //var quartzFeature = new QuartzFeature();

            //// create a simple job trigger to repeat every minute
            //quartzFeature.RegisterJob<MyJob>(
            //    trigger =>
            //        trigger.WithSimpleSchedule(s =>
            //                s.WithInterval(TimeSpan.FromSeconds(30))
            //                    .RepeatForever()
            //            )
            //            .Build()
            //);

            //quartzFeature.RegisterJob<MyJob>(
            //    trigger =>
            //        trigger.WithDailyTimeIntervalSchedule(s => s.WithInterval(1, IntervalUnit.Minute))
            //            .Build()
            //);

            //// register the plugin
            //Plugins.Add(quartzFeature);

            this.GlobalRequestFilters.Add((req, res, requestDto) =>
            {
                ILog log = LogManager.GetLogger(GetType());

                log.Info("In GlobalRequestFilters");
                try
                {
                    log.Info("In Try");
                    if (requestDto != null /*&& requestDto.GetType() != typeof(RefreshSolutionExtRequest)*/)
                    {
                        log.Info("In Auth Header");
                        var auth = req.Headers[HttpHeaders.Authorization];
                        if (string.IsNullOrEmpty(auth))
                        {
                            res.ReturnAuthRequired();
                        }
                        else
                        {
                            if (req.Headers[CacheConstants.RTOKEN] != null)
                            {
                                Resolve <IEbServerEventClient>().AddAuthentication(req);
                            }
                            var jwtoken = new JwtSecurityToken(auth.Replace("Bearer", string.Empty).Trim());
                            foreach (var c in jwtoken.Claims)
                            {
                                if (c.Type == "cid" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add(CoreConstants.SOLUTION_ID, c.Value);
                                    if (requestDto is IEbSSRequest)
                                    {
                                        (requestDto as IEbSSRequest).SolnId = c.Value;
                                    }
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).SolnId = c.Value;
                                    }
                                    continue;
                                }
                                if (c.Type == "uid" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("UserId", Convert.ToInt32(c.Value));
                                    if (requestDto is IEbSSRequest)
                                    {
                                        (requestDto as IEbSSRequest).UserId = Convert.ToInt32(c.Value);
                                    }
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).UserId = Convert.ToInt32(c.Value);
                                    }
                                    continue;
                                }
                                if (c.Type == "wc" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("wc", c.Value);
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).WhichConsole = c.Value.ToString();
                                    }
                                    continue;
                                }
                                if (c.Type == "sub" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("sub", c.Value);
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).UserAuthId = c.Value.ToString();
                                    }
                                    continue;
                                }
                            }
                            log.Info("Req Filter Completed");
                        }
                    }
                }
                catch (Exception e)
                {
                    log.Info("ErrorStackTraceNontokenServices..........." + e.StackTrace);
                    log.Info("ErrorMessageNontokenServices..........." + e.Message);
                    log.Info("InnerExceptionNontokenServices..........." + e.InnerException);
                }
            });
        }
예제 #6
0
        public override void Configure(Container container)
        {
            LogManager.LogFactory = new ConsoleLogFactory(debugEnabled: true);

            var jwtprovider = new JwtAuthProviderReader
            {
                HashAlgorithm = "RS256",
                PublicKeyXml  = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_JWT_PUBLIC_KEY_XML),
#if (DEBUG)
                RequireSecureConnection = false,
                //EncryptPayload = true,
#endif
            };

            this.Plugins.Add(new AuthFeature(() => new CustomUserSession(),
                                             new IAuthProvider[] {
                jwtprovider,
            }));

#if (DEBUG)
            SetConfig(new HostConfig {
                DebugMode = true
            });
#endif
            SetConfig(new HostConfig {
                DefaultContentType = MimeTypes.Json
            });



            RabbitMqMessageFactory rabitFactory = new RabbitMqMessageFactory();
            rabitFactory.ConnectionFactory.UserName    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_USER);
            rabitFactory.ConnectionFactory.Password    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_PASSWORD);
            rabitFactory.ConnectionFactory.HostName    = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_HOST);
            rabitFactory.ConnectionFactory.Port        = Convert.ToInt32(Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_PORT));
            rabitFactory.ConnectionFactory.VirtualHost = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_RABBIT_VHOST);

            var mqServer = new RabbitMqServer(rabitFactory);

            mqServer.RetryCount = 1;

            mqServer.RegisterHandler <ScheduleRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <DeleteJobRequest>(base.ExecuteMessage);
            mqServer.RegisterHandler <RescheduleRequest>(base.ExecuteMessage);

            mqServer.Start();

            container.AddScoped <IMessageProducer, RabbitMqProducer>(serviceProvider =>
            {
                return(mqServer.CreateMessageProducer() as RabbitMqProducer);
            });

            container.AddScoped <IMessageQueueClient, RabbitMqQueueClient>(serviceProvider =>
            {
                return(mqServer.CreateMessageQueueClient() as RabbitMqQueueClient);
            });

            //****************SCHEDULER********************
            string conn = string.Format("Server = {0}; Database = {1}; Uid = {2}; Pwd = {3}; Trust Server Certificate=true; Port= {4}; Use SSL Stream=true; SSL Mode=Require;",
                                        Environment.GetEnvironmentVariable(EnvironmentConstants.EB_INFRA_DB_SERVER),
                                        Environment.GetEnvironmentVariable(EnvironmentConstants.EB_INFRA_DBNAME),
                                        Environment.GetEnvironmentVariable(EnvironmentConstants.EB_INFRA_DB_RW_USER),
                                        Environment.GetEnvironmentVariable(EnvironmentConstants.EB_INFRA_DB_RW_PASSWORD),
                                        Environment.GetEnvironmentVariable(EnvironmentConstants.EB_INFRA_DB_PORT));
            var properties = new NameValueCollection
            {
                ["quartz.serializer.type"]                  = "json",
                ["quartz.scheduler.instanceName"]           = "DotnetCoreScheduler",
                ["quartz.scheduler.instanceId"]             = "instance_one",
                ["quartz.threadPool.type"]                  = "Quartz.Simpl.SimpleThreadPool, Quartz",
                ["quartz.threadPool.threadCount"]           = "5",
                ["quartz.jobStore.misfireThreshold"]        = "60000",
                ["quartz.jobStore.type"]                    = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
                ["quartz.jobStore.useProperties"]           = "true",
                ["quartz.jobStore.dataSource"]              = "myDS",
                ["quartz.jobStore.tablePrefix"]             = "QRTZ_",
                ["quartz.jobStore.driverDelegateType"]      = "Quartz.Impl.AdoJobStore.PostgreSQLDelegate, Quartz",
                ["quartz.dataSource.myDS.provider"]         = "Npgsql ",
                ["quartz.dataSource.myDS.connectionString"] = conn
            };


            StdSchedulerFactory factory   = new Quartz.Impl.StdSchedulerFactory(properties);
            IScheduler          scheduler = factory.GetScheduler().Result;
            scheduler.Start().Wait();

            container.AddScoped <IScheduler>(serviceProvider =>
            {
                return(scheduler);
            });

            string env = Environment.GetEnvironmentVariable(EnvironmentConstants.ASPNETCORE_ENVIRONMENT);

            var redisServer   = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_SERVER);
            var redisPassword = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_PASSWORD);
            var redisPort     = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_REDIS_PORT);

            RedisClient client = null;
            //if (env == "Staging")
            //{
            //    client = new RedisClient(redisServer, Convert.ToInt32(redisPort));
            //}
            //else
            //{
            client = new RedisClient(string.Format("redis://{0}@{1}:{2}", redisPassword, redisServer, redisPort));
            //}
            //Setting Assembly version in Redis
            AssemblyName assembly = Assembly.GetExecutingAssembly().GetName();
            String       version  = assembly.Name.ToString() + " - " + assembly.Version.ToString();
            client.Set("SchedulerAssembly", version);

            this.GlobalRequestFilters.Add((req, res, requestDto) =>
            {
                ILog log = LogManager.GetLogger(GetType());

                log.Info("In GlobalRequestFilters");
                try
                {
                    log.Info("In Try");
                    if (requestDto != null)
                    {
                        log.Info("In Auth Header");
                        var auth = req.Headers[HttpHeaders.Authorization];
                        if (string.IsNullOrEmpty(auth))
                        {
                            res.ReturnAuthRequired();
                        }
                        else
                        {
                            if (req.Headers[CacheConstants.RTOKEN] != null)
                            {
                                Resolve <IEbServerEventClient>().AddAuthentication(req);
                            }
                            var jwtoken = new JwtSecurityToken(auth.Replace("Bearer", string.Empty).Trim());
                            foreach (var c in jwtoken.Claims)
                            {
                                if (c.Type == "cid" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add(CoreConstants.SOLUTION_ID, c.Value);
                                    if (requestDto is IEbSSRequest)
                                    {
                                        (requestDto as IEbSSRequest).SolnId = c.Value;
                                    }
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).SolnId = c.Value;
                                    }
                                    continue;
                                }
                                if (c.Type == "uid" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("UserId", Convert.ToInt32(c.Value));
                                    if (requestDto is IEbSSRequest)
                                    {
                                        (requestDto as IEbSSRequest).UserId = Convert.ToInt32(c.Value);
                                    }
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).UserId = Convert.ToInt32(c.Value);
                                    }
                                    continue;
                                }
                                if (c.Type == "wc" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("wc", c.Value);
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).WhichConsole = c.Value.ToString();
                                    }
                                    continue;
                                }
                                if (c.Type == "sub" && !string.IsNullOrEmpty(c.Value))
                                {
                                    RequestContext.Instance.Items.Add("sub", c.Value);
                                    if (requestDto is EbServiceStackAuthRequest)
                                    {
                                        (requestDto as EbServiceStackAuthRequest).UserAuthId = c.Value.ToString();
                                    }
                                    continue;
                                }
                            }
                            log.Info("Req Filter Completed");
                        }
                    }
                }
                catch (Exception e)
                {
                    log.Info("ErrorStackTraceNontokenServices..........." + e.StackTrace);
                    log.Info("ErrorMessageNontokenServices..........." + e.Message);
                    log.Info("InnerExceptionNontokenServices..........." + e.InnerException);
                }
            });
        }