Files
Umbraco-CMS/src/Umbraco.Core/Install/InstallException.cs
Mole 748fb7d1f7 Implement new backoffice installer (#12790)
* Add new BackOfficeApi project

* Add swagger

* Add and route new install controller

* Add new install steps

* Add Setup endpoint

* Add missing RequiresExecution methods

* Fix nullability of databasemodel

* Move user information to separate model

* Remove ping method

* Add view models install data

* Move mapping folder

* Move ViewModels

* Add settings endpoint

* Remove unused binderprovider

* Postfix RequiresExecution with async

* Update NewDatabaseUpgradeStep to not depend on install step

* Add installstep collection

* Move registration into backoffice project

* Add InstallService

* Use service in controller

* Add upgrade to install service and use in controller

* Correctly check is database is configured

* Reorganize

* Reorganize into new core and infrastructure

* Rename steps

* Rename BackofficeApi to MangementApi

* Make install step an interface instead of abstract class

* Rename InstallStep to create CreateUserStep

* Move restart runtime and sign in user into install steps

* Move install service into new core project

* Map controllers in composer

* Restrict access to installcontroller based on runtime level

* Use FireAndForget when logging install

* Use actionresult instead of iactionresult

* Set new projects as not packable

* Link to backoffice in 201 response when installed

* Register installations

* Add custom backoffice routing template token

* Move umbraco path trimming out of application convention

* Make it easier to route to backoffice api

* Make swagger version aware and move behind backoffice path

* Obsolete old install classes

* Move maps into single file

This is all mappint to/from viewmodels in some manner

* Remove usage of InstallSetupResult

* Move new projects to the src folder

* Remove InstallationType from IInstallStep

This upgrade steps should implement their own IUpgradeStep interface

* Remove upgrade from service and controller

This should be its own service and controller

* Add xml docs

* Remove internals visible to

* Disable package validation for new projects

Quite the gotcha here, if the projects are brand new, there is no nuget packages to compare with, this causes the build to fail.

* Add ValidateDatabase endpoint

* Remove project references to new backoffice

We don't actually want to depend on this yet, it's just needed for testing/development

* Obsolete installationtype

* Add DatabaseSettingsFactory tests

* Add InstallServiceTests

* Fix InstallServiceTests

* Test RequireRuntimeLevelAttribute

* Implement new backoffice upgrader (#12818)

* Add UpgradeSettingsModel and viewmodel

* Add upgrade/settings endpoint

* Implement upgrade steps

* Add upgrade step collection

* Add UpgradeService

* Add authorize endpoint to UpgradeController

* Fix interface

* Add upgrade service tests

* Remove runtime check in databaseinstallstep

* Move RequireRuntimeLevel to controller

* Add a readme to the new backoffice part

* BackOffice not Backoffice

* Add conditional project references

* Fixes based on review

* Fix up

* Move running of steps into its own method in UpgradeService

* Make services transient

* More fixup

* Log exceptions when running steps
2022-08-29 09:50:48 +02:00

123 lines
4.1 KiB
C#

using System.Runtime.Serialization;
namespace Umbraco.Cms.Core.Install;
/// <summary>
/// Used for steps to be able to return a JSON structure back to the UI.
/// </summary>
/// <seealso cref="System.Exception" />
[Serializable]
public class InstallException : Exception
{
/// <summary>
/// Initializes a new instance of the <see cref="InstallException" /> class.
/// </summary>
public InstallException()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="InstallException" /> class.
/// </summary>
/// <param name="message">The message that describes the error.</param>
public InstallException(string message)
: this(message, "error", null)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="InstallException" /> class.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="viewModel">The view model.</param>
public InstallException(string message, object viewModel)
: this(message, "error", viewModel)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="InstallException" /> class.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="view">The view.</param>
/// <param name="viewModel">The view model.</param>
public InstallException(string message, string view, object? viewModel)
: base(message)
{
View = view;
ViewModel = viewModel;
}
/// <summary>
/// Initializes a new instance of the <see cref="InstallException" /> class.
/// </summary>
/// <param name="message">The error message that explains the reason for the exception.</param>
/// <param name="innerException">
/// The exception that is the cause of the current exception, or a null reference (
/// <see langword="Nothing" /> in Visual Basic) if no inner exception is specified.
/// </param>
public InstallException(string message, Exception innerException)
: base(message, innerException)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="InstallException" /> class.
/// </summary>
/// <param name="info">
/// The <see cref="T:System.Runtime.Serialization.SerializationInfo" /> that holds the serialized object
/// data about the exception being thrown.
/// </param>
/// <param name="context">
/// The <see cref="T:System.Runtime.Serialization.StreamingContext" /> that contains contextual
/// information about the source or destination.
/// </param>
protected InstallException(SerializationInfo info, StreamingContext context)
: base(info, context) =>
View = info.GetString(nameof(View));
/// <summary>
/// Gets the view.
/// </summary>
/// <value>
/// The view.
/// </value>
public string? View { get; private set; }
/// <summary>
/// Gets the view model.
/// </summary>
/// <value>
/// The view model.
/// </value>
/// <remarks>
/// This object is not included when serializing.
/// </remarks>
public object? ViewModel { get; private set; }
/// <summary>
/// When overridden in a derived class, sets the <see cref="T:System.Runtime.Serialization.SerializationInfo" /> with
/// information about the exception.
/// </summary>
/// <param name="info">
/// The <see cref="T:System.Runtime.Serialization.SerializationInfo" /> that holds the serialized object
/// data about the exception being thrown.
/// </param>
/// <param name="context">
/// The <see cref="T:System.Runtime.Serialization.StreamingContext" /> that contains contextual
/// information about the source or destination.
/// </param>
/// <exception cref="ArgumentNullException">info</exception>
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
{
throw new ArgumentNullException(nameof(info));
}
info.AddValue(nameof(View), View);
base.GetObjectData(info, context);
}
}