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

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; }
}
}