public UnattendedInstaller( DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory, IEventAggregator eventAggregator, IOptions <UnattendedSettings> unattendedSettings, IUmbracoDatabaseFactory databaseFactory, IDbProviderFactoryCreator dbProviderFactoryCreator, ILogger <UnattendedInstaller> logger, IRuntimeState runtimeState) { _databaseSchemaCreatorFactory = databaseSchemaCreatorFactory ?? throw new ArgumentNullException(nameof(databaseSchemaCreatorFactory)); _eventAggregator = eventAggregator ?? throw new ArgumentNullException(nameof(eventAggregator)); _unattendedSettings = unattendedSettings; _databaseFactory = databaseFactory; _dbProviderFactoryCreator = dbProviderFactoryCreator; _logger = logger; _runtimeState = runtimeState; }
public RuntimeState( IOptions <GlobalSettings> globalSettings, IOptions <UnattendedSettings> unattendedSettings, IUmbracoVersion umbracoVersion, IUmbracoDatabaseFactory databaseFactory, ILogger <RuntimeState> logger, PendingPackageMigrations packageMigrationState, IConflictingRouteService conflictingRouteService) { _globalSettings = globalSettings; _unattendedSettings = unattendedSettings; _umbracoVersion = umbracoVersion; _databaseFactory = databaseFactory; _logger = logger; _packageMigrationState = packageMigrationState; _conflictingRouteService = conflictingRouteService; }
/// <summary> /// Initializes a new instance of the <see cref="RuntimeState"/> class. /// </summary> public RuntimeState( IOptions <GlobalSettings> globalSettings, IOptions <UnattendedSettings> unattendedSettings, IUmbracoVersion umbracoVersion, IUmbracoDatabaseFactory databaseFactory, ILogger <RuntimeState> logger, PendingPackageMigrations packageMigrationState) : this( globalSettings, unattendedSettings, umbracoVersion, databaseFactory, logger, packageMigrationState, StaticServiceProvider.Instance.GetRequiredService <IConflictingRouteService>()) { }
private static void ConfigureEmbeddedDatabaseConnection(IUmbracoDatabaseFactory factory, ILogger logger) { SaveConnectionString(EmbeddedDatabaseConnectionString, Constants.DbProviderNames.SqlCe, logger); var path = Path.Combine(IOHelper.GetRootDirectorySafe(), "App_Data", "Umbraco.sdf"); if (File.Exists(path) == false) { // this should probably be in a "using (new SqlCeEngine)" clause but not sure // of the side effects and it's been like this for quite some time now var engine = new SqlCeEngine(EmbeddedDatabaseConnectionString); engine.CreateDatabase(); } factory.Configure(EmbeddedDatabaseConnectionString, Constants.DbProviderNames.SqlCe); }
public UmbracoTestDataController( IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, IProfilingLogger profilingLogger, IPublishedUrlProvider publishedUrlProvider, ICoreScopeProvider scopeProvider, PropertyEditorCollection propertyEditors, IShortStringHelper shortStringHelper, IOptions <TestDataSettings> testDataSettings) : base(umbracoContextAccessor, databaseFactory, services, appCaches, profilingLogger, publishedUrlProvider) { _scopeProvider = scopeProvider; _propertyEditors = propertyEditors; _shortStringHelper = shortStringHelper; _testDataSettings = testDataSettings.Value; }
public UmbRegisterController( IMemberManager memberManager, IMemberService memberService, IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, IProfilingLogger profilingLogger, IPublishedUrlProvider publishedUrlProvider, IMemberSignInManager memberSignInManager, ICoreScopeProvider scopeProvider) : base(umbracoContextAccessor, databaseFactory, services, appCaches, profilingLogger, publishedUrlProvider) { _memberManager = memberManager; _memberService = memberService; _memberSignInManager = memberSignInManager; _scopeProvider = scopeProvider; }
public BatchedDatabaseServerMessenger( IRuntimeState runtime, IUmbracoDatabaseFactory databaseFactory, IScopeProvider scopeProvider, ISqlContext sqlContext, IProfilingLogger proflog, IGlobalSettings globalSettings, DatabaseServerMessengerOptions options) : base(runtime, scopeProvider, sqlContext, proflog, globalSettings, true, options) { _databaseFactory = databaseFactory; _syncBootState = new Lazy <SyncBootState>(() => { if (_databaseFactory.CanConnect == false) { Logger.Warn <BatchedDatabaseServerMessenger>("Cannot connect to the database, distributed calls will not be enabled for this server."); return(SyncBootState.Unknown); } else { return(base.GetSyncBootState()); } }); }
public CreateMemberSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, ICreateMemberExecuter createMemberExecuter, IEmailFormatter emailFormatter, IEmailSender emailSender, IVerificationToken verificationToken) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper) { _createMemberExecuter = createMemberExecuter ?? throw new ArgumentNullException(nameof(createMemberExecuter)); _emailFormatter = emailFormatter ?? throw new ArgumentNullException(nameof(emailFormatter)); _emailSender = emailSender ?? throw new ArgumentNullException(nameof(emailSender)); _verificationToken = verificationToken ?? throw new ArgumentNullException(nameof(verificationToken)); }
/// <summary> /// Registers essential services. /// </summary> public static void RegisterEssentials(this Composition composition, ILogger logger, IProfiler profiler, IProfilingLogger profilingLogger, IMainDom mainDom, AppCaches appCaches, IUmbracoDatabaseFactory databaseFactory, TypeLoader typeLoader, IRuntimeState state) { composition.RegisterUnique(logger); composition.RegisterUnique(profiler); composition.RegisterUnique(profilingLogger); composition.RegisterUnique(mainDom); composition.RegisterUnique(appCaches); composition.RegisterUnique(databaseFactory); composition.RegisterUnique(factory => factory.GetInstance <IUmbracoDatabaseFactory>().SqlContext); composition.RegisterUnique(typeLoader); composition.RegisterUnique(state); }
public EmailAddressSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, MembershipProvider membershipProvider, IEmailFormatter emailFormatter, IEmailSender emailSender, IVerificationToken verificationToken) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper) { _membershipProvider = membershipProvider ?? throw new System.ArgumentNullException(nameof(membershipProvider)); _emailFormatter = emailFormatter ?? throw new System.ArgumentNullException(nameof(emailFormatter)); _emailSender = emailSender ?? throw new System.ArgumentNullException(nameof(emailSender)); _verificationToken = verificationToken ?? throw new System.ArgumentNullException(nameof(verificationToken)); }
public TestResetPasswordSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, HttpContextBase httpContext, ILoginMemberWrapper loginMemberWrapper, IVerificationToken verificationToken) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper, loginMemberWrapper, verificationToken) { _currentPage = new Mock <IPublishedContent>(); _currentPage.Setup(x => x.Name).Returns("Reset password"); SetupPropertyValue(_currentPage, "description", "This is the description"); ControllerContext = new ControllerContext(httpContext, new RouteData(), this); }
public SystemInformationTelemetryProvider( IUmbracoVersion version, ILocalizationService localizationService, IOptionsMonitor <ModelsBuilderSettings> modelsBuilderSettings, IOptionsMonitor <HostingSettings> hostingSettings, IOptionsMonitor <GlobalSettings> globalSettings, IHostEnvironment hostEnvironment, IUmbracoDatabaseFactory umbracoDatabaseFactory) { _version = version; _localizationService = localizationService; _hostEnvironment = hostEnvironment; _umbracoDatabaseFactory = umbracoDatabaseFactory; _globalSettings = globalSettings.CurrentValue; _hostingSettings = hostingSettings.CurrentValue; _modelsBuilderSettings = modelsBuilderSettings.CurrentValue; }
public TestCreateMemberSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, ICreateMemberExecuter createMemberExecuter, IEmailFormatter emailFormatter, IEmailSender emailSender, IVerificationToken verificationToken) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper, createMemberExecuter, emailFormatter, emailSender, verificationToken) { _currentPage = new Mock <IPublishedContent>(); SetupPropertyValue(_currentPage, "approveMemberSubject", "Approve member"); SetupPropertyValue(_currentPage, "approveMemberBody", "Approve member body"); SetupPropertyValue(_currentPage, "memberExistsSubject", "Member exists"); SetupPropertyValue(_currentPage, "memberExistsBody", "Member exists body"); }
public SqlServerTestDatabase(TestDatabaseSettings settings, ILoggerFactory loggerFactory, IUmbracoDatabaseFactory databaseFactory) { _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); _databaseFactory = databaseFactory ?? throw new ArgumentNullException(nameof(databaseFactory)); _settings = settings; var counter = 0; var schema = Enumerable.Range(0, _settings.SchemaDatabaseCount) .Select(x => TestDbMeta.CreateWithMasterConnectionString($"{DatabaseName}-{++counter}", false, _settings.SQLServerMasterConnectionString)); var empty = Enumerable.Range(0, _settings.EmptyDatabasesCount) .Select(x => TestDbMeta.CreateWithMasterConnectionString($"{DatabaseName}-{++counter}", true, _settings.SQLServerMasterConnectionString)); _testDatabases = schema.Concat(empty).ToList(); }
public UmbLoginController( IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, IProfilingLogger profilingLogger, IPublishedUrlProvider publishedUrlProvider, IMemberSignInManager signInManager) : this( umbracoContextAccessor, databaseFactory, services, appCaches, profilingLogger, publishedUrlProvider, signInManager, StaticServiceProvider.Instance.GetRequiredService <IMemberManager>(), StaticServiceProvider.Instance.GetRequiredService <ITwoFactorLoginService>()) { }
public UmbExternalLoginController( IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, IProfilingLogger profilingLogger, IPublishedUrlProvider publishedUrlProvider, IMemberSignInManagerExternalLogins memberSignInManager, IMemberManager memberManager) : base( umbracoContextAccessor, databaseFactory, services, appCaches, profilingLogger, publishedUrlProvider) { _memberSignInManager = memberSignInManager; _memberManager = memberManager; }
private bool TryDbConnect(IUmbracoDatabaseFactory databaseFactory) { // anything other than install wants a database - see if we can connect // (since this is an already existing database, assume localdb is ready) bool canConnect; var tries = _globalSettings.Value.InstallMissingDatabase ? 2 : 5; for (var i = 0; ;) { canConnect = databaseFactory.CanConnect; if (canConnect || ++i == tries) { break; } _logger.LogDebug("Could not immediately connect to database, trying again."); Thread.Sleep(1000); } return(canConnect); }
public InstallHelper(DatabaseBuilder databaseBuilder, ILogger <InstallHelper> logger, IUmbracoVersion umbracoVersion, IOptionsMonitor <ConnectionStrings> connectionStrings, IInstallationService installationService, ICookieManager cookieManager, IUserAgentProvider userAgentProvider, IUmbracoDatabaseFactory umbracoDatabaseFactory) { _logger = logger; _umbracoVersion = umbracoVersion; _databaseBuilder = databaseBuilder; _connectionStrings = connectionStrings; _installationService = installationService; _cookieManager = cookieManager; _userAgentProvider = userAgentProvider; _umbracoDatabaseFactory = umbracoDatabaseFactory; // We need to initialize the type already, as we can't detect later, if the connection string is added on the fly. GetInstallationType(); }
public ScopeProvider( IDistributedLockingMechanismFactory distributedLockingMechanismFactory, IUmbracoDatabaseFactory databaseFactory, FileSystems fileSystems, IOptionsMonitor <CoreDebugSettings> coreDebugSettings, MediaFileManager mediaFileManager, ILoggerFactory loggerFactory, IRequestCache requestCache, IEventAggregator eventAggregator) : this( StaticServiceProvider.Instance.GetRequiredService <IAmbientScopeStack>(), StaticServiceProvider.Instance.GetRequiredService <IAmbientScopeContextStack>(), distributedLockingMechanismFactory, databaseFactory, fileSystems, coreDebugSettings, mediaFileManager, loggerFactory, eventAggregator) { }
public InstallHelper( DatabaseBuilder databaseBuilder, ILogger <InstallHelper> logger, IUmbracoVersion umbracoVersion, IOptionsMonitor <ConnectionStrings> connectionStrings, IInstallationService installationService, ICookieManager cookieManager, IUserAgentProvider userAgentProvider, IUmbracoDatabaseFactory umbracoDatabaseFactory) : this( databaseBuilder, logger, umbracoVersion, connectionStrings, installationService, cookieManager, userAgentProvider, umbracoDatabaseFactory, StaticServiceProvider.Instance.GetRequiredService <IFireAndForgetRunner>()) { }
/// <summary> /// Initializes a new instance of the <see cref="RuntimeState" /> class. /// </summary> public RuntimeState( IOptions <GlobalSettings> globalSettings, IOptions <UnattendedSettings> unattendedSettings, IUmbracoVersion umbracoVersion, IUmbracoDatabaseFactory databaseFactory, ILogger <RuntimeState> logger, PendingPackageMigrations packageMigrationState, IConflictingRouteService conflictingRouteService, IEnumerable <IDatabaseProviderMetadata> databaseProviderMetadata, IRuntimeModeValidationService runtimeModeValidationService) { _globalSettings = globalSettings; _unattendedSettings = unattendedSettings; _umbracoVersion = umbracoVersion; _databaseFactory = databaseFactory; _logger = logger; _packageMigrationState = packageMigrationState; _conflictingRouteService = conflictingRouteService; _databaseProviderMetadata = databaseProviderMetadata; _runtimeModeValidationService = runtimeModeValidationService; }
public TestEmailAddressSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, HttpContextBase httpContext, MembershipProvider membershipProvider, IEmailFormatter emailFormatter, IEmailSender emailSender, IVerificationToken verificationToken) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper, membershipProvider, emailFormatter, emailSender, verificationToken) { _currentPage = new Mock <IPublishedContent>(); SetupPropertyValue(_currentPage, "emailTakenSubject", EMAIL_TAKEN_SUBJECT); SetupPropertyValue(_currentPage, "emailTakenBody", EMAIL_TAKEN_BODY); SetupPropertyValue(_currentPage, "confirmEmailSubject", CONFIRM_EMAIL_SUBJECT); SetupPropertyValue(_currentPage, "confirmEmailBody", CONFIRM_EMAIL_BODY); ControllerContext = new ControllerContext(httpContext, new RouteData(), this); }
public ScopeProvider( IDistributedLockingMechanismFactory distributedLockingMechanismFactory, IUmbracoDatabaseFactory databaseFactory, FileSystems fileSystems, IOptionsMonitor <CoreDebugSettings> coreDebugSettings, ILoggerFactory loggerFactory, IRequestCache requestCache, IEventAggregator eventAggregator) { DistributedLockingMechanismFactory = distributedLockingMechanismFactory; DatabaseFactory = databaseFactory; _fileSystems = fileSystems; _coreDebugSettings = coreDebugSettings.CurrentValue; _logger = loggerFactory.CreateLogger <ScopeProvider>(); _loggerFactory = loggerFactory; _requestCache = requestCache; _eventAggregator = eventAggregator; // take control of the FileSystems _fileSystems.IsScoped = () => AmbientScope != null && AmbientScope.ScopedFileSystems; coreDebugSettings.OnChange(x => _coreDebugSettings = x); }
// internal for tests internal void DetermineRuntimeLevel(IUmbracoDatabaseFactory databaseFactory, IProfilingLogger profilingLogger) { using (var timer = profilingLogger.DebugDuration <CoreRuntime>("Determining runtime level.", "Determined.")) { try { _state.DetermineRuntimeLevel(databaseFactory, profilingLogger); profilingLogger.Debug <CoreRuntime>("Runtime level: {RuntimeLevel}", _state.Level); if (_state.Level == RuntimeLevel.Upgrade) { profilingLogger.Debug <CoreRuntime>("Configure database factory for upgrades."); databaseFactory.ConfigureForUpgrade(); } } catch { _state.Level = RuntimeLevel.BootFailed; timer.Fail(); throw; } } }
public UmbTwoFactorLoginController( ILogger <UmbTwoFactorLoginController> logger, IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, IProfilingLogger profilingLogger, IPublishedUrlProvider publishedUrlProvider, IMemberSignInManager memberSignInManager, IMemberManager memberManager, ITwoFactorLoginService twoFactorLoginService) : base( umbracoContextAccessor, databaseFactory, services, appCaches, profilingLogger, publishedUrlProvider) { _logger = logger; _memberSignInManager = memberSignInManager; _memberManager = memberManager; _twoFactorLoginService = twoFactorLoginService; }
/// <summary> /// Initializes a new instance of the <see cref="CoreRuntime"/> class. /// </summary> public CoreRuntime( ILoggerFactory loggerFactory, IRuntimeState state, ComponentCollection components, IApplicationShutdownRegistry applicationShutdownRegistry, IProfilingLogger profilingLogger, IMainDom mainDom, IUmbracoDatabaseFactory databaseFactory, IEventAggregator eventAggregator, IHostingEnvironment hostingEnvironment, IUmbracoVersion umbracoVersion) { State = state; _loggerFactory = loggerFactory; _components = components; _applicationShutdownRegistry = applicationShutdownRegistry; _profilingLogger = profilingLogger; _mainDom = mainDom; _databaseFactory = databaseFactory; _eventAggregator = eventAggregator; _hostingEnvironment = hostingEnvironment; _umbracoVersion = umbracoVersion; _logger = _loggerFactory.CreateLogger <CoreRuntime>(); }
public DeleteTeamSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory umbracoDatabaseFactory, ServiceContext serviceContext, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, ITeamDataSource teamDataSource, ITeamRepository teamRepository, IMatchListingDataSource matchDataSource, IPlayerDataSource playerDataSource, IAuthorizationPolicy <Team> authorizationPolicy, ICacheOverride cacheOverride) : base(umbracoContextAccessor, umbracoDatabaseFactory, serviceContext, appCaches, logger, profilingLogger, umbracoHelper) { _teamDataSource = teamDataSource ?? throw new ArgumentNullException(nameof(teamDataSource)); _teamRepository = teamRepository ?? throw new ArgumentNullException(nameof(teamRepository)); _matchDataSource = matchDataSource ?? throw new ArgumentNullException(nameof(matchDataSource)); _playerDataSource = playerDataSource ?? throw new ArgumentNullException(nameof(playerDataSource)); _authorizationPolicy = authorizationPolicy ?? throw new ArgumentNullException(nameof(authorizationPolicy)); _cacheOverride = cacheOverride ?? throw new ArgumentNullException(nameof(cacheOverride)); }
public CreateLeagueMatchSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory umbracoDatabaseFactory, ServiceContext serviceContext, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, IMatchRepository matchRepository, ITeamDataSource teamDataSource, ISeasonDataSource seasonDataSource, ICreateMatchSeasonSelector createMatchSeasonSelector, IEditMatchHelper editMatchHelper, IMatchValidator matchValidator, ICacheClearer <Match> cacheClearer) : base(umbracoContextAccessor, umbracoDatabaseFactory, serviceContext, appCaches, logger, profilingLogger, umbracoHelper) { _matchRepository = matchRepository ?? throw new ArgumentNullException(nameof(matchRepository)); _teamDataSource = teamDataSource ?? throw new ArgumentNullException(nameof(teamDataSource)); _seasonDataSource = seasonDataSource ?? throw new ArgumentNullException(nameof(seasonDataSource)); _createMatchSeasonSelector = createMatchSeasonSelector ?? throw new ArgumentNullException(nameof(createMatchSeasonSelector)); _editMatchHelper = editMatchHelper ?? throw new ArgumentNullException(nameof(editMatchHelper)); _matchValidator = matchValidator ?? throw new ArgumentNullException(nameof(matchValidator)); _cacheClearer = cacheClearer ?? throw new ArgumentNullException(nameof(cacheClearer)); }
public DeleteMatchSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory umbracoDatabaseFactory, ServiceContext serviceContext, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, IMatchDataSource matchDataSource, IMatchRepository matchRepository, ICommentsDataSource <Match> matchCommentsDataSource, IAuthorizationPolicy <Match> authorizationPolicy, IDateTimeFormatter dateTimeFormatter, ICacheClearer <Match> cacheClearer) : base(umbracoContextAccessor, umbracoDatabaseFactory, serviceContext, appCaches, logger, profilingLogger, umbracoHelper) { _matchDataSource = matchDataSource ?? throw new ArgumentNullException(nameof(matchDataSource)); _matchRepository = matchRepository ?? throw new ArgumentNullException(nameof(matchRepository)); _matchCommentsDataSource = matchCommentsDataSource ?? throw new ArgumentNullException(nameof(matchCommentsDataSource)); _authorizationPolicy = authorizationPolicy ?? throw new ArgumentNullException(nameof(authorizationPolicy)); _dateTimeFormatter = dateTimeFormatter ?? throw new ArgumentNullException(nameof(dateTimeFormatter)); _cacheClearer = cacheClearer ?? throw new ArgumentNullException(nameof(cacheClearer)); }
public CreateTeamSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory umbracoDatabaseFactory, ServiceContext serviceContext, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, ITeamRepository teamRepository, IAuthorizationPolicy <Team> authorizationPolicy, ICacheOverride cacheOverride) : base(umbracoContextAccessor, umbracoDatabaseFactory, serviceContext, appCaches, logger, profilingLogger, umbracoHelper) { _teamRepository = teamRepository ?? throw new System.ArgumentNullException(nameof(teamRepository)); _authorizationPolicy = authorizationPolicy ?? throw new System.ArgumentNullException(nameof(authorizationPolicy)); _cacheOverride = cacheOverride ?? throw new ArgumentNullException(nameof(cacheOverride)); }