You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
7.0 KiB
190 lines
7.0 KiB
3 weeks ago
|
using Microsoft.AspNetCore.Http;
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Reflection;
|
||
|
using System.Threading.Tasks;
|
||
|
using System.Linq;
|
||
|
using Newtonsoft.Json;
|
||
|
using ReZero.Configuration;
|
||
|
namespace ReZero.SuperAPI
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Represents configuration options for the ReZero SuperAPI.
|
||
|
/// </summary>
|
||
|
public class SuperAPIOptions
|
||
|
{
|
||
|
public static SuperAPIOptions GetOptions( string fileName = "appsettings.json")
|
||
|
{
|
||
|
string key = "ReZero";
|
||
|
ReZeroJson configuration=ApiConfiguration.GetJsonValue<ReZeroJson>(key,fileName);
|
||
|
SuperAPIOptions superAPIOptions = new SuperAPIOptions();
|
||
|
superAPIOptions.IsEnableSuperAPI = true;
|
||
|
superAPIOptions.DatabaseOptions = new DatabaseOptions()
|
||
|
{
|
||
|
ConnectionConfig = new SuperAPIConnectionConfig()
|
||
|
{
|
||
|
ConnectionString = configuration.BasicDatabase?.ConnectionString,
|
||
|
DbType = configuration?.BasicDatabase?.DbType ?? SqlSugar.DbType.Sqlite
|
||
|
}
|
||
|
};
|
||
|
superAPIOptions.UiOptions = new UiOptions()
|
||
|
{
|
||
|
ShowNativeApiDocument = configuration?.Ui?.ShowNativeApiDocument ?? true
|
||
|
};
|
||
|
superAPIOptions.InterfaceOptions = new InterfaceOptions()
|
||
|
{
|
||
|
Jwt=configuration?.Jwt,
|
||
|
CorsOptions = configuration?.Cors?? new ReZeroCors()
|
||
|
};
|
||
|
if (!string.IsNullOrEmpty(configuration?.Ui?.DefaultIndexSource))
|
||
|
{
|
||
|
superAPIOptions.UiOptions.DefaultIndexSource = configuration.Ui.DefaultIndexSource;
|
||
|
}
|
||
|
return superAPIOptions;
|
||
|
}
|
||
|
|
||
|
public void EnableSuperApi()
|
||
|
{
|
||
|
SuperAPIOptions options = new SuperAPIOptions();
|
||
|
IsEnableSuperAPI = true;
|
||
|
this.DatabaseOptions = options.DatabaseOptions;
|
||
|
this.InterfaceOptions = options.InterfaceOptions;
|
||
|
this.DependencyInjectionOptions = options.DependencyInjectionOptions;
|
||
|
this.UiOptions = options.UiOptions;
|
||
|
}
|
||
|
public void EnableSuperApi(SuperAPIOptions options)
|
||
|
{
|
||
|
IsEnableSuperAPI = true;
|
||
|
this.DatabaseOptions = options.DatabaseOptions;
|
||
|
this.InterfaceOptions = options.InterfaceOptions;
|
||
|
this.DependencyInjectionOptions = options.DependencyInjectionOptions;
|
||
|
this.UiOptions = options.UiOptions;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Enable super api
|
||
|
/// </summary>
|
||
|
internal bool IsEnableSuperAPI = false;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets or sets the database configuration options.
|
||
|
/// </summary>
|
||
|
public DatabaseOptions? DatabaseOptions { get; set; }
|
||
|
|
||
|
|
||
|
public InterfaceOptions InterfaceOptions { get; set; } = new InterfaceOptions();
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets or sets the options for the DependencyInjection.
|
||
|
/// </summary>
|
||
|
public DependencyInjectionOptions DependencyInjectionOptions { get; set; } = new DependencyInjectionOptions();
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets or sets the UI configuration options.
|
||
|
/// </summary>
|
||
|
public UiOptions UiOptions { get; set; } = new UiOptions();
|
||
|
|
||
|
|
||
|
}
|
||
|
public class DependencyInjectionOptions
|
||
|
{
|
||
|
public Assembly[]? Assemblies { get; set; }
|
||
|
|
||
|
public bool InitDependencyInjection => Assemblies?.Any() ?? false;
|
||
|
|
||
|
public DependencyInjectionOptions(params Assembly[] assemblies)
|
||
|
{
|
||
|
if (!InitDependencyInjection)
|
||
|
{
|
||
|
this.Assemblies = assemblies;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
public class InterfaceOptions
|
||
|
{
|
||
|
public string? AuthorizationLocalStorageName { get; set; } = "RezeroLocalStorage";
|
||
|
public string PageNumberPropName { set; get; } = "PageNumber";
|
||
|
public string PageSizePropName { set; get; } = "PageSize";
|
||
|
public DefaultSuperApiAop SuperApiAop { get; set; } = new DefaultSuperApiAop();
|
||
|
public Func<InterfaceContext, bool>? NoAuthorizationFunc { get; set; }
|
||
|
|
||
|
public Func<object, object>? MergeDataToStandardDtoFunc { get; set; }
|
||
|
public ReZeroJwt? Jwt { get; set; }
|
||
|
public ReZeroCors CorsOptions { get; set; } = new ReZeroCors();
|
||
|
|
||
|
public JsonSerializerSettings? JsonSerializerSettings { get; set; }
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Represents configuration options for the database settings in ReZero.
|
||
|
/// </summary>
|
||
|
public class DatabaseOptions
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Gets or sets whether to initialize configuration tables. Default is true.
|
||
|
/// </summary>
|
||
|
public bool InitializeTables { get; set; } = true;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets or sets the initialization connection string information. Default is SQLite.
|
||
|
/// </summary>
|
||
|
public SuperAPIConnectionConfig ConnectionConfig { get; set; } = new SuperAPIConnectionConfig()
|
||
|
{
|
||
|
DbType = SqlSugar.DbType.Sqlite,
|
||
|
ConnectionString = "datasource=ReZero.db"
|
||
|
};
|
||
|
|
||
|
/// <summary>
|
||
|
/// Callback function to retrieve the current user information.
|
||
|
/// </summary>
|
||
|
internal Func<CallBackUserInfo> GetCurrentUserCallback { get; set; } = () => new CallBackUserInfo { UserId = "1", UserName = "Admin" };
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Represents configuration options for the user interface settings in ReZero.
|
||
|
/// </summary>
|
||
|
public class UiOptions
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Gets or sets the language for the UI.
|
||
|
/// </summary>
|
||
|
public Language UiLanguage { get; set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets or sets the folder name for the default UI. Default is "default_ui".
|
||
|
/// </summary>
|
||
|
public string? DefaultUiFolderName { get; set; } = "default_ui";
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets or sets the source path for the default index. Default is "/swagger".
|
||
|
/// </summary>
|
||
|
public string? DefaultIndexSource { get; set; } = "/swagger";
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets or sets the path for NuGet packages. Default is the default user NuGet packages path.
|
||
|
/// </summary>
|
||
|
public string? NugetPackagesPath { get; set; } = @"C:\Users\Administrator\.nuget\packages";
|
||
|
/// <summary>
|
||
|
/// Show system api document
|
||
|
/// </summary>
|
||
|
public bool ShowSystemApiDocument { get; set; } = false;
|
||
|
/// <summary>
|
||
|
/// Show native api document
|
||
|
/// </summary>
|
||
|
public bool ShowNativeApiDocument { get; set; } = true;
|
||
|
/// <summary>
|
||
|
/// Enable Login page Configuration on the UI
|
||
|
/// </summary>
|
||
|
internal bool EnableLoginPage { get; set; }
|
||
|
}
|
||
|
|
||
|
|
||
|
public class AopOptions
|
||
|
{
|
||
|
public Func<HttpContext, Task>? DynamicApiBeforeInvokeAsync { get; set; }
|
||
|
public Func<HttpContext, Task>? DynamicApiAfterInvokeAsync { get; set; }
|
||
|
|
||
|
public Func<HttpContext, Task>? SystemApiBeforeInvokeAsync { get; set; }
|
||
|
public Func<HttpContext, Task>? SystemApiAfterInvokeAsync { get; set; }
|
||
|
}
|
||
|
}
|