Пример #1
0
        /// <summary>
        /// Validates whether current user is trip admin.
        /// </summary>
        /// <param name="currentUserService">Instance of service class that provides access
        /// to properties of the current user.</param>
        /// <param name="tripFlipDbContext">Instance of database context.</param>
        /// <param name="tripId">Trip id.</param>
        /// <param name="tripRoleToValidate">Trip role to validate.</param>
        /// <param name="errorMessage">Error message to show,
        /// if validation is not successful.</param>
        public static async Task ValidateCurrentUserTripRoleAsync(
            ICurrentUserService currentUserService,
            TripFlipDbContext tripFlipDbContext,
            int tripId,
            TripRoles tripRoleToValidate,
            string errorMessage)
        {
            var currentUserId = currentUserService.UserId;

            var tripSubscriberEntity = await tripFlipDbContext
                                       .TripSubscribers
                                       .AsNoTracking()
                                       .Include(tripSubscriber => tripSubscriber.TripRoles)
                                       .SingleOrDefaultAsync(tripSubscriber =>
                                                             tripSubscriber.UserId == currentUserId &&
                                                             tripSubscriber.TripId == tripId);

            ValidateEntityNotNull(tripSubscriberEntity,
                                  ErrorConstants.TripSubscriberNotFound);

            var tripSubscriberHasSpecifiedRole = tripSubscriberEntity
                                                 .TripRoles
                                                 .Any(tripRole =>
                                                      tripRole.TripRoleId == (int)tripRoleToValidate);

            if (!tripSubscriberHasSpecifiedRole)
            {
                throw new ArgumentException(errorMessage);
            }
        }
Пример #2
0
        /// <summary>
        /// Validates whether current user has a specified route role.
        /// </summary>
        /// <param name="currentUserService">Instance of service class that provides access
        /// to properties of the current user.</param>
        /// <param name="tripFlipDbContext">Instance of database context.</param>
        /// <param name="routeId">Route id.</param>
        /// <param name="routeRoleToValidate">Route role to validate.</param>
        /// <param name="errorMessage">Error message to show,
        /// if validation is not successful.</param>
        public static async Task ValidateCurrentUserRouteRoleAsync(
            ICurrentUserService currentUserService,
            TripFlipDbContext tripFlipDbContext,
            int routeId,
            RouteRoles routeRoleToValidate,
            string errorMessage)
        {
            var currentUserId = currentUserService.UserId;

            var routeSubscriberEntity = await tripFlipDbContext
                                        .RouteSubscribers
                                        .AsNoTracking()
                                        .Include(routeSubscriber => routeSubscriber.RouteRoles)
                                        .Include(routeSubscriber => routeSubscriber.TripSubscriber)
                                        .SingleOrDefaultAsync(routeSubscriber =>
                                                              routeSubscriber.TripSubscriber.UserId == currentUserId &&
                                                              routeSubscriber.RouteId == routeId);

            ValidateEntityNotNull(routeSubscriberEntity,
                                  ErrorConstants.NotRouteSubscriber);

            var routeSubscriberHasSpecifiedRole = routeSubscriberEntity
                                                  .RouteRoles
                                                  .Any(routeRole =>
                                                       routeRole.RouteRoleId == (int)routeRoleToValidate);

            if (!routeSubscriberHasSpecifiedRole)
            {
                throw new ArgumentException(errorMessage);
            }
        }
Пример #3
0
 /// <summary>
 /// Initializes database context and automapper.
 /// </summary>
 /// <param name="tripFlipDbContext">TripFlipDbContext instance.</param>
 /// <param name="mapper">IMapper instance.</param>
 /// <param name="currentUserService">ICurrentUserService instance.</param>
 public RouteService(TripFlipDbContext tripFlipDbContext,
                     IMapper mapper,
                     ICurrentUserService currentUserService)
 {
     _tripFlipDbContext  = tripFlipDbContext;
     _mapper             = mapper;
     _currentUserService = currentUserService;
 }
Пример #4
0
 /// <summary>
 /// Initializes database context and automapper.
 /// </summary>
 /// <param name="mapper">IMapper instance.</param>
 /// <param name="tripFlipDbContext">TripFlipDbContext instance.</param>
 /// <param name="currentUserService">ICurrentUserService instance.</param>
 public ItemListService(TripFlipDbContext tripFlipDbContext,
                        IMapper mapper,
                        ICurrentUserService currentUserService)
 {
     _mapper             = mapper;
     _tripFlipDbContext  = tripFlipDbContext;
     _currentUserService = currentUserService;
 }
Пример #5
0
 public ScheduledTaskService(
     IMailService mailService,
     IUserService userService,
     IStatisticService statisticService,
     TripFlipDbContext tripFlipDbContext)
 {
     _mailService       = mailService;
     _userService       = userService;
     _statisticService  = statisticService;
     _tripFlipDbContext = tripFlipDbContext;
 }
Пример #6
0
 /// <summary>
 /// Initializes database context and automapper.
 /// </summary>
 /// <param name="mapper">IMapper instance.</param>
 /// <param name="tripFlipDbContext">TripFlipDbContext instance.</param>
 /// <param name="jwtConfiguration">JwtConfiguration instance.</param>
 /// <param name="currentUserService">ICurrentUserService instance.</param>
 /// <param name="environment">Instance of web host environment.</param>
 /// <param name="mailService">Instance of mail service.</param>
 /// <param name="mailServiceConfiguration">Object that encapsulates configurations for
 /// mail service.</param>
 public UserService(IMapper mapper,
                    TripFlipDbContext tripFlipDbContext,
                    JwtConfiguration jwtConfiguration,
                    ICurrentUserService currentUserService,
                    IWebHostEnvironment environment,
                    IMailService mailService,
                    MailServiceConfiguration mailServiceConfiguration)
 {
     _mapper                   = mapper;
     _tripFlipDbContext        = tripFlipDbContext;
     _jwtConfiguration         = jwtConfiguration;
     _currentUserService       = currentUserService;
     _environment              = environment;
     _mailService              = mailService;
     _mailServiceConfiguration = mailServiceConfiguration;
 }
Пример #7
0
        protected TripFlipDbContext CreateDbContext()
        {
            var dbName = Guid.NewGuid().ToString();

            var serviceProvider = new ServiceCollection()
                                  .AddEntityFrameworkInMemoryDatabase()
                                  .BuildServiceProvider();

            var builder = new DbContextOptionsBuilder <TripFlipDbContext>();

            builder.UseInMemoryDatabase(dbName)
            .UseInternalServiceProvider(serviceProvider);

            var context = new TripFlipDbContext(builder.Options);

            return(context);
        }
Пример #8
0
        public void Configure(IApplicationBuilder applicationBuilder, IWebHostEnvironment environment,
                              TripFlipDbContext tripFlipDbContext)
        {
            applicationBuilder.ConfigureExceptionHandler(environment);

            applicationBuilder.UseRouting();

            applicationBuilder.UseAuthentication();
            applicationBuilder.UseAuthorization();

            applicationBuilder.UseHangfireDashboard();
            RecurringJob.AddOrUpdate <IScheduledTaskService>(
                scheduledTask => scheduledTask.GreetBirthdayUsersAsync(),
                Cron.Daily(hour: 8));
            RecurringJob.AddOrUpdate <IScheduledTaskService>(
                scheduledTask => scheduledTask.SendUserStatisticAsync(),
                Cron.Monthly());

            applicationBuilder.UseHangfireServer();

            applicationBuilder.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

            var swaggerEndpointUrl = Configuration.GetSection("OpenApiInfo")["url"];
            var swaggerApiVersion  = Configuration.GetSection("OpenApiInfo")["version"];

            applicationBuilder.UseSwagger();
            applicationBuilder.UseSwaggerUI(options =>
            {
                options.SwaggerEndpoint(swaggerEndpointUrl, swaggerApiVersion);
                options.OAuthClientId(Configuration["GoogleApi:ClientId"]);
                options.OAuthClientSecret(Configuration["GoogleApi:ClientSecret"]);
                options.OAuthAppName("TripFlip");
                options.OAuthScopeSeparator(" ");
                options.OAuthUsePkce();
            });

            tripFlipDbContext.Database.Migrate();
        }
Пример #9
0
        /// <summary>
        /// Initializes db context, HttpClient factory and Google API configuration fields.
        /// </summary>
        /// <param name="tripFlipDbContext">Instance of db context.</param>
        /// <param name="httpClientFactory">Instance of HttpClient factory.</param>
        /// <param name="googleApiConfiguration">Object that encapsulates configurations for
        /// Google API.</param>
        /// <param name="jwtConfiguration">Object that encapsulates configurations for JWT.</param>
        /// <param name="environment">Instance of web host environment.</param>
        /// <param name="mailService">Instance of mail service.</param>
        /// <param name="mailServiceConfiguration">Object that encapsulates configurations for
        /// mail service.</param>
        public GoogleApiUserService(
            TripFlipDbContext tripFlipDbContext,
            IHttpClientFactory httpClientFactory,
            GoogleApiConfiguration googleApiConfiguration,
            JwtConfiguration jwtConfiguration,
            IWebHostEnvironment environment,
            IMailService mailService,
            MailServiceConfiguration mailServiceConfiguration)
        {
            _tripFlipDbContext = tripFlipDbContext;

            _httpClientFactory = httpClientFactory;

            _googleApiConfiguration = googleApiConfiguration;

            _jwtConfiguration = jwtConfiguration;

            _environment = environment;

            _mailService = mailService;

            _mailServiceConfiguration = mailServiceConfiguration;
        }
Пример #10
0
        /// <summary>
        /// Validates whether current user is application super admin.
        /// </summary>
        /// <param name="currentUserService">Instance of service class that provides access
        /// to properties of the current user.</param>
        /// <param name="tripFlipDbContext">Instance of database context.</param>
        public static async Task ValidateCurrentUserIsSuperAdminAsync(
            ICurrentUserService currentUserService,
            TripFlipDbContext tripFlipDbContext)
        {
            var currentUserId = currentUserService.UserId;

            var currentUser = await tripFlipDbContext
                              .Users
                              .AsNoTracking()
                              .Include(user => user.ApplicationRoles)
                              .SingleOrDefaultAsync(user => user.Id == currentUserId);

            ValidateEntityNotNull(currentUser, ErrorConstants.NotAuthorized);

            var currentUserIsSuperAdmin = currentUser
                                          .ApplicationRoles
                                          .Any(appRole =>
                                               appRole.ApplicationRoleId == (int)ApplicationRole.SuperAdmin);

            if (!currentUserIsSuperAdmin)
            {
                throw new ArgumentException(ErrorConstants.NotSuperAdmin);
            }
        }
 public void Cleanup()
 {
     TripFlipDbContext.Dispose();
 }
Пример #12
0
 /// <summary>
 /// Initializes database context.
 /// </summary>
 /// <param name="tripFlipDbContext">TripFlipDbContext instance.</param>
 public StatisticService(TripFlipDbContext tripFlipDbContext)
 {
     _tripFlipDbContext = tripFlipDbContext;
 }
Пример #13
0
 protected void Seed <TEntity>(TripFlipDbContext context, TEntity entity)
     where TEntity : class
 {
     context.Add(entity);
     context.SaveChanges();
 }
Пример #14
0
 protected void Seed <TEntity>(TripFlipDbContext context, IEnumerable <TEntity> entities)
     where TEntity : class
 {
     context.AddRange(entities);
     context.SaveChanges();
 }