mirror of https://github.com/halo-dev/halo
Support restoring with downloadable URL or backup name (#4474)
#### What type of PR is this? /kind feature /area core /milestone 2.9.x #### What this PR does / why we need it: Currently, we only support restoring by uploading backup file. Downloading and uploading larger backup files can be cumbersome for users. This PR supports restoring with downloadable URL or backup name as well. #### Special notes for your reviewer: ```bash # Replace ${BACKUP_NAME} by yourself. curl -u admin:admin 'http://localhost:8090/apis/api.console.migration.halo.run/v1alpha1/restorations' \ -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3Al7pC6AbBNfB1js' \ --data-raw $'------WebKitFormBoundary3Al7pC6AbBNfB1js\r\nContent-Disposition: form-data; name="backupName"\r\n\r\n${BACKUP_NAME}\r\n------WebKitFormBoundary3Al7pC6AbBNfB1js--\r\n' ``` ```bash # Replace ${DOWNLOAD_LINK} by yourself. curl -u admin:admin 'http://localhost:8090/apis/api.console.migration.halo.run/v1alpha1/restorations' \ -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytv6cqgmANkCpSuZm' \ --data-raw $'------WebKitFormBoundarytv6cqgmANkCpSuZm\r\nContent-Disposition: form-data; name="downloadUrl"\r\n\r\n${DOWNLOAD_LINK}\r\n------WebKitFormBoundarytv6cqgmANkCpSuZm--\r\n' ``` #### Does this PR introduce a user-facing change? ```release-note 新增提供下载链接或者备份名进行系统恢复的功能。 ```pull/4482/head
parent
2aeeb3e463
commit
7603b21dd2
|
@ -1,6 +1,6 @@
|
||||||
package run.halo.app.migration;
|
package run.halo.app.migration;
|
||||||
|
|
||||||
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;
|
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED;
|
||||||
import static org.springdoc.core.fn.builders.content.Builder.contentBuilder;
|
import static org.springdoc.core.fn.builders.content.Builder.contentBuilder;
|
||||||
import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder;
|
import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder;
|
||||||
import static org.springdoc.core.fn.builders.requestbody.Builder.requestBodyBuilder;
|
import static org.springdoc.core.fn.builders.requestbody.Builder.requestBodyBuilder;
|
||||||
|
@ -8,19 +8,31 @@ import static org.springdoc.core.fn.builders.schema.Builder.schemaBuilder;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.enums.ParameterIn;
|
import io.swagger.v3.oas.annotations.enums.ParameterIn;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Optional;
|
||||||
import org.springdoc.webflux.core.fn.SpringdocRouteBuilder;
|
import org.springdoc.webflux.core.fn.SpringdocRouteBuilder;
|
||||||
|
import org.springframework.core.io.buffer.DataBuffer;
|
||||||
|
import org.springframework.core.io.buffer.DataBufferUtils;
|
||||||
|
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.codec.multipart.FilePart;
|
import org.springframework.http.codec.multipart.FilePart;
|
||||||
|
import org.springframework.http.codec.multipart.FormFieldPart;
|
||||||
import org.springframework.http.codec.multipart.Part;
|
import org.springframework.http.codec.multipart.Part;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
|
import org.springframework.util.StreamUtils;
|
||||||
import org.springframework.web.reactive.function.server.RouterFunction;
|
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||||
import org.springframework.web.reactive.function.server.ServerResponse;
|
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||||
import org.springframework.web.server.ServerWebInputException;
|
import org.springframework.web.server.ServerWebInputException;
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
import run.halo.app.core.extension.endpoint.CustomEndpoint;
|
import run.halo.app.core.extension.endpoint.CustomEndpoint;
|
||||||
import run.halo.app.extension.GroupVersion;
|
import run.halo.app.extension.GroupVersion;
|
||||||
import run.halo.app.extension.ReactiveExtensionClient;
|
import run.halo.app.extension.ReactiveExtensionClient;
|
||||||
|
import run.halo.app.infra.ReactiveUrlDataBufferFetcher;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class MigrationEndpoint implements CustomEndpoint {
|
public class MigrationEndpoint implements CustomEndpoint {
|
||||||
|
@ -29,9 +41,14 @@ public class MigrationEndpoint implements CustomEndpoint {
|
||||||
|
|
||||||
private final ReactiveExtensionClient client;
|
private final ReactiveExtensionClient client;
|
||||||
|
|
||||||
public MigrationEndpoint(MigrationService migrationService, ReactiveExtensionClient client) {
|
private final ReactiveUrlDataBufferFetcher dataBufferFetcher;
|
||||||
|
|
||||||
|
public MigrationEndpoint(MigrationService migrationService,
|
||||||
|
ReactiveExtensionClient client,
|
||||||
|
ReactiveUrlDataBufferFetcher dataBufferFetcher) {
|
||||||
this.migrationService = migrationService;
|
this.migrationService = migrationService;
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
this.dataBufferFetcher = dataBufferFetcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -65,11 +82,20 @@ public class MigrationEndpoint implements CustomEndpoint {
|
||||||
.build())
|
.build())
|
||||||
.POST("/restorations", request -> request.multipartData()
|
.POST("/restorations", request -> request.multipartData()
|
||||||
.map(RestoreRequest::new)
|
.map(RestoreRequest::new)
|
||||||
.flatMap(restoreRequest -> migrationService.restore(
|
.flatMap(restoreRequest -> {
|
||||||
restoreRequest.getFile().content()))
|
var content = getContent(restoreRequest)
|
||||||
.flatMap(v -> ServerResponse.ok().bodyValue("Restored successfully!")),
|
.switchIfEmpty(Mono.error(() -> new ServerWebInputException(
|
||||||
|
"Please upload a file "
|
||||||
|
+ "or provide a download link or backup name.")));
|
||||||
|
return migrationService.restore(content);
|
||||||
|
})
|
||||||
|
.then(Mono.defer(
|
||||||
|
() -> ServerResponse.ok().bodyValue("Restored successfully!")
|
||||||
|
)),
|
||||||
builder -> builder
|
builder -> builder
|
||||||
.tag(tag)
|
.tag(tag)
|
||||||
|
.description("Restore backup by uploading file "
|
||||||
|
+ "or providing download link or backup name.")
|
||||||
.operationId("RestoreBackup")
|
.operationId("RestoreBackup")
|
||||||
.requestBody(requestBodyBuilder()
|
.requestBody(requestBodyBuilder()
|
||||||
.required(true)
|
.required(true)
|
||||||
|
@ -82,6 +108,38 @@ public class MigrationEndpoint implements CustomEndpoint {
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Flux<DataBuffer> getContent(RestoreRequest request) {
|
||||||
|
var downloadContent = request.getDownloadUrl()
|
||||||
|
.map(downloadURL -> {
|
||||||
|
try {
|
||||||
|
var url = new URL(downloadURL);
|
||||||
|
return dataBufferFetcher.fetch(url.toURI());
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
return Flux.<DataBuffer>error(new ServerWebInputException(
|
||||||
|
"Invalid download URL: " + downloadURL));
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
// Should never happen
|
||||||
|
return Flux.<DataBuffer>error(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.orElseGet(Flux::empty);
|
||||||
|
|
||||||
|
var uploadContent = request.getFile()
|
||||||
|
.map(Part::content)
|
||||||
|
.orElseGet(Flux::empty);
|
||||||
|
|
||||||
|
var backupFileContent = request.getBackupName()
|
||||||
|
.map(backupName -> client.get(Backup.class, backupName)
|
||||||
|
.flatMap(migrationService::download)
|
||||||
|
.flatMapMany(resource -> DataBufferUtils.read(resource,
|
||||||
|
DefaultDataBufferFactory.sharedInstance,
|
||||||
|
StreamUtils.BUFFER_SIZE)))
|
||||||
|
.orElseGet(Flux::empty);
|
||||||
|
return uploadContent
|
||||||
|
.switchIfEmpty(downloadContent)
|
||||||
|
.switchIfEmpty(backupFileContent);
|
||||||
|
}
|
||||||
|
|
||||||
public static class RestoreRequest {
|
public static class RestoreRequest {
|
||||||
private final MultiValueMap<String, Part> multipart;
|
private final MultiValueMap<String, Part> multipart;
|
||||||
|
|
||||||
|
@ -89,13 +147,35 @@ public class MigrationEndpoint implements CustomEndpoint {
|
||||||
this.multipart = multipart;
|
this.multipart = multipart;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Schema(requiredMode = REQUIRED, name = "file", description = "Backup file.")
|
@Schema(requiredMode = NOT_REQUIRED, name = "file", description = "Backup file.")
|
||||||
public FilePart getFile() {
|
public Optional<FilePart> getFile() {
|
||||||
var part = multipart.getFirst("file");
|
var part = multipart.getFirst("file");
|
||||||
if (part instanceof FilePart filePart) {
|
if (part instanceof FilePart filePart) {
|
||||||
return filePart;
|
return Optional.of(filePart);
|
||||||
}
|
}
|
||||||
throw new ServerWebInputException("Invalid file part");
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Schema(requiredMode = NOT_REQUIRED,
|
||||||
|
name = "downloadUrl",
|
||||||
|
description = "Remote backup HTTP URL.")
|
||||||
|
public Optional<String> getDownloadUrl() {
|
||||||
|
var part = multipart.getFirst("downloadUrl");
|
||||||
|
if (part instanceof FormFieldPart downloadUrlPart) {
|
||||||
|
return Optional.of(downloadUrlPart.value());
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Schema(requiredMode = NOT_REQUIRED,
|
||||||
|
name = "backupName",
|
||||||
|
description = "Backup metadata name.")
|
||||||
|
public Optional<String> getBackupName() {
|
||||||
|
var part = multipart.getFirst("backupName");
|
||||||
|
if (part instanceof FormFieldPart backupNamePart) {
|
||||||
|
return Optional.of(backupNamePart.value());
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,98 @@ export const ApiConsoleHaloRunV1alpha1PluginApiAxiosParamCreator = function (
|
||||||
configuration?: Configuration
|
configuration?: Configuration
|
||||||
) {
|
) {
|
||||||
return {
|
return {
|
||||||
|
/**
|
||||||
|
* Merge all CSS bundles of enabled plugins into one.
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
fetchCssBundle: async (
|
||||||
|
options: AxiosRequestConfig = {}
|
||||||
|
): Promise<RequestArgs> => {
|
||||||
|
const localVarPath = `/apis/api.console.halo.run/v1alpha1/plugins/-/bundle.css`;
|
||||||
|
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||||
|
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
||||||
|
let baseOptions;
|
||||||
|
if (configuration) {
|
||||||
|
baseOptions = configuration.baseOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const localVarRequestOptions = {
|
||||||
|
method: "GET",
|
||||||
|
...baseOptions,
|
||||||
|
...options,
|
||||||
|
};
|
||||||
|
const localVarHeaderParameter = {} as any;
|
||||||
|
const localVarQueryParameter = {} as any;
|
||||||
|
|
||||||
|
// authentication BasicAuth required
|
||||||
|
// http basic authentication required
|
||||||
|
setBasicAuthToObject(localVarRequestOptions, configuration);
|
||||||
|
|
||||||
|
// authentication BearerAuth required
|
||||||
|
// http bearer authentication required
|
||||||
|
await setBearerAuthToObject(localVarHeaderParameter, configuration);
|
||||||
|
|
||||||
|
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
||||||
|
let headersFromBaseOptions =
|
||||||
|
baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||||
|
localVarRequestOptions.headers = {
|
||||||
|
...localVarHeaderParameter,
|
||||||
|
...headersFromBaseOptions,
|
||||||
|
...options.headers,
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
url: toPathString(localVarUrlObj),
|
||||||
|
options: localVarRequestOptions,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Merge all JS bundles of enabled plugins into one.
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
fetchJsBundle: async (
|
||||||
|
options: AxiosRequestConfig = {}
|
||||||
|
): Promise<RequestArgs> => {
|
||||||
|
const localVarPath = `/apis/api.console.halo.run/v1alpha1/plugins/-/bundle.js`;
|
||||||
|
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||||
|
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
||||||
|
let baseOptions;
|
||||||
|
if (configuration) {
|
||||||
|
baseOptions = configuration.baseOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const localVarRequestOptions = {
|
||||||
|
method: "GET",
|
||||||
|
...baseOptions,
|
||||||
|
...options,
|
||||||
|
};
|
||||||
|
const localVarHeaderParameter = {} as any;
|
||||||
|
const localVarQueryParameter = {} as any;
|
||||||
|
|
||||||
|
// authentication BasicAuth required
|
||||||
|
// http basic authentication required
|
||||||
|
setBasicAuthToObject(localVarRequestOptions, configuration);
|
||||||
|
|
||||||
|
// authentication BearerAuth required
|
||||||
|
// http bearer authentication required
|
||||||
|
await setBearerAuthToObject(localVarHeaderParameter, configuration);
|
||||||
|
|
||||||
|
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
||||||
|
let headersFromBaseOptions =
|
||||||
|
baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||||
|
localVarRequestOptions.headers = {
|
||||||
|
...localVarHeaderParameter,
|
||||||
|
...headersFromBaseOptions,
|
||||||
|
...options.headers,
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
url: toPathString(localVarUrlObj),
|
||||||
|
options: localVarRequestOptions,
|
||||||
|
};
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* Fetch configMap of plugin by configured configMapName.
|
* Fetch configMap of plugin by configured configMapName.
|
||||||
* @param {string} name
|
* @param {string} name
|
||||||
|
@ -763,6 +855,46 @@ export const ApiConsoleHaloRunV1alpha1PluginApiFp = function (
|
||||||
const localVarAxiosParamCreator =
|
const localVarAxiosParamCreator =
|
||||||
ApiConsoleHaloRunV1alpha1PluginApiAxiosParamCreator(configuration);
|
ApiConsoleHaloRunV1alpha1PluginApiAxiosParamCreator(configuration);
|
||||||
return {
|
return {
|
||||||
|
/**
|
||||||
|
* Merge all CSS bundles of enabled plugins into one.
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
async fetchCssBundle(
|
||||||
|
options?: AxiosRequestConfig
|
||||||
|
): Promise<
|
||||||
|
(axios?: AxiosInstance, basePath?: string) => AxiosPromise<string>
|
||||||
|
> {
|
||||||
|
const localVarAxiosArgs = await localVarAxiosParamCreator.fetchCssBundle(
|
||||||
|
options
|
||||||
|
);
|
||||||
|
return createRequestFunction(
|
||||||
|
localVarAxiosArgs,
|
||||||
|
globalAxios,
|
||||||
|
BASE_PATH,
|
||||||
|
configuration
|
||||||
|
);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Merge all JS bundles of enabled plugins into one.
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
async fetchJsBundle(
|
||||||
|
options?: AxiosRequestConfig
|
||||||
|
): Promise<
|
||||||
|
(axios?: AxiosInstance, basePath?: string) => AxiosPromise<string>
|
||||||
|
> {
|
||||||
|
const localVarAxiosArgs = await localVarAxiosParamCreator.fetchJsBundle(
|
||||||
|
options
|
||||||
|
);
|
||||||
|
return createRequestFunction(
|
||||||
|
localVarAxiosArgs,
|
||||||
|
globalAxios,
|
||||||
|
BASE_PATH,
|
||||||
|
configuration
|
||||||
|
);
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* Fetch configMap of plugin by configured configMapName.
|
* Fetch configMap of plugin by configured configMapName.
|
||||||
* @param {string} name
|
* @param {string} name
|
||||||
|
@ -1062,6 +1194,26 @@ export const ApiConsoleHaloRunV1alpha1PluginApiFactory = function (
|
||||||
) {
|
) {
|
||||||
const localVarFp = ApiConsoleHaloRunV1alpha1PluginApiFp(configuration);
|
const localVarFp = ApiConsoleHaloRunV1alpha1PluginApiFp(configuration);
|
||||||
return {
|
return {
|
||||||
|
/**
|
||||||
|
* Merge all CSS bundles of enabled plugins into one.
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
fetchCssBundle(options?: AxiosRequestConfig): AxiosPromise<string> {
|
||||||
|
return localVarFp
|
||||||
|
.fetchCssBundle(options)
|
||||||
|
.then((request) => request(axios, basePath));
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Merge all JS bundles of enabled plugins into one.
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
fetchJsBundle(options?: AxiosRequestConfig): AxiosPromise<string> {
|
||||||
|
return localVarFp
|
||||||
|
.fetchJsBundle(options)
|
||||||
|
.then((request) => request(axios, basePath));
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* Fetch configMap of plugin by configured configMapName.
|
* Fetch configMap of plugin by configured configMapName.
|
||||||
* @param {ApiConsoleHaloRunV1alpha1PluginApiFetchPluginConfigRequest} requestParameters Request parameters.
|
* @param {ApiConsoleHaloRunV1alpha1PluginApiFetchPluginConfigRequest} requestParameters Request parameters.
|
||||||
|
@ -1483,6 +1635,30 @@ export interface ApiConsoleHaloRunV1alpha1PluginApiUpgradePluginFromUriRequest {
|
||||||
* @extends {BaseAPI}
|
* @extends {BaseAPI}
|
||||||
*/
|
*/
|
||||||
export class ApiConsoleHaloRunV1alpha1PluginApi extends BaseAPI {
|
export class ApiConsoleHaloRunV1alpha1PluginApi extends BaseAPI {
|
||||||
|
/**
|
||||||
|
* Merge all CSS bundles of enabled plugins into one.
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
* @memberof ApiConsoleHaloRunV1alpha1PluginApi
|
||||||
|
*/
|
||||||
|
public fetchCssBundle(options?: AxiosRequestConfig) {
|
||||||
|
return ApiConsoleHaloRunV1alpha1PluginApiFp(this.configuration)
|
||||||
|
.fetchCssBundle(options)
|
||||||
|
.then((request) => request(this.axios, this.basePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merge all JS bundles of enabled plugins into one.
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
* @memberof ApiConsoleHaloRunV1alpha1PluginApi
|
||||||
|
*/
|
||||||
|
public fetchJsBundle(options?: AxiosRequestConfig) {
|
||||||
|
return ApiConsoleHaloRunV1alpha1PluginApiFp(this.configuration)
|
||||||
|
.fetchJsBundle(options)
|
||||||
|
.then((request) => request(this.axios, this.basePath));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch configMap of plugin by configured configMapName.
|
* Fetch configMap of plugin by configured configMapName.
|
||||||
* @param {ApiConsoleHaloRunV1alpha1PluginApiFetchPluginConfigRequest} requestParameters Request parameters.
|
* @param {ApiConsoleHaloRunV1alpha1PluginApiFetchPluginConfigRequest} requestParameters Request parameters.
|
||||||
|
|
|
@ -267,16 +267,12 @@ export const ApiConsoleHaloRunV1alpha1ThemeApiAxiosParamCreator = function (
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Install a theme by uploading a zip file.
|
* Install a theme by uploading a zip file.
|
||||||
* @param {File} file
|
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
installTheme: async (
|
installTheme: async (
|
||||||
file: File,
|
|
||||||
options: AxiosRequestConfig = {}
|
options: AxiosRequestConfig = {}
|
||||||
): Promise<RequestArgs> => {
|
): Promise<RequestArgs> => {
|
||||||
// verify required parameter 'file' is not null or undefined
|
|
||||||
assertParamExists("installTheme", "file", file);
|
|
||||||
const localVarPath = `/apis/api.console.halo.run/v1alpha1/themes/install`;
|
const localVarPath = `/apis/api.console.halo.run/v1alpha1/themes/install`;
|
||||||
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||||
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
||||||
|
@ -292,9 +288,6 @@ export const ApiConsoleHaloRunV1alpha1ThemeApiAxiosParamCreator = function (
|
||||||
};
|
};
|
||||||
const localVarHeaderParameter = {} as any;
|
const localVarHeaderParameter = {} as any;
|
||||||
const localVarQueryParameter = {} as any;
|
const localVarQueryParameter = {} as any;
|
||||||
const localVarFormParams = new ((configuration &&
|
|
||||||
configuration.formDataCtor) ||
|
|
||||||
FormData)();
|
|
||||||
|
|
||||||
// authentication BasicAuth required
|
// authentication BasicAuth required
|
||||||
// http basic authentication required
|
// http basic authentication required
|
||||||
|
@ -304,12 +297,6 @@ export const ApiConsoleHaloRunV1alpha1ThemeApiAxiosParamCreator = function (
|
||||||
// http bearer authentication required
|
// http bearer authentication required
|
||||||
await setBearerAuthToObject(localVarHeaderParameter, configuration);
|
await setBearerAuthToObject(localVarHeaderParameter, configuration);
|
||||||
|
|
||||||
if (file !== undefined) {
|
|
||||||
localVarFormParams.append("file", file as any);
|
|
||||||
}
|
|
||||||
|
|
||||||
localVarHeaderParameter["Content-Type"] = "multipart/form-data";
|
|
||||||
|
|
||||||
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
||||||
let headersFromBaseOptions =
|
let headersFromBaseOptions =
|
||||||
baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||||
|
@ -318,7 +305,6 @@ export const ApiConsoleHaloRunV1alpha1ThemeApiAxiosParamCreator = function (
|
||||||
...headersFromBaseOptions,
|
...headersFromBaseOptions,
|
||||||
...options.headers,
|
...options.headers,
|
||||||
};
|
};
|
||||||
localVarRequestOptions.data = localVarFormParams;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
url: toPathString(localVarUrlObj),
|
url: toPathString(localVarUrlObj),
|
||||||
|
@ -873,18 +859,15 @@ export const ApiConsoleHaloRunV1alpha1ThemeApiFp = function (
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Install a theme by uploading a zip file.
|
* Install a theme by uploading a zip file.
|
||||||
* @param {File} file
|
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
async installTheme(
|
async installTheme(
|
||||||
file: File,
|
|
||||||
options?: AxiosRequestConfig
|
options?: AxiosRequestConfig
|
||||||
): Promise<
|
): Promise<
|
||||||
(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Theme>
|
(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Theme>
|
||||||
> {
|
> {
|
||||||
const localVarAxiosArgs = await localVarAxiosParamCreator.installTheme(
|
const localVarAxiosArgs = await localVarAxiosParamCreator.installTheme(
|
||||||
file,
|
|
||||||
options
|
options
|
||||||
);
|
);
|
||||||
return createRequestFunction(
|
return createRequestFunction(
|
||||||
|
@ -1145,16 +1128,12 @@ export const ApiConsoleHaloRunV1alpha1ThemeApiFactory = function (
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Install a theme by uploading a zip file.
|
* Install a theme by uploading a zip file.
|
||||||
* @param {ApiConsoleHaloRunV1alpha1ThemeApiInstallThemeRequest} requestParameters Request parameters.
|
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
installTheme(
|
installTheme(options?: AxiosRequestConfig): AxiosPromise<Theme> {
|
||||||
requestParameters: ApiConsoleHaloRunV1alpha1ThemeApiInstallThemeRequest,
|
|
||||||
options?: AxiosRequestConfig
|
|
||||||
): AxiosPromise<Theme> {
|
|
||||||
return localVarFp
|
return localVarFp
|
||||||
.installTheme(requestParameters.file, options)
|
.installTheme(options)
|
||||||
.then((request) => request(axios, basePath));
|
.then((request) => request(axios, basePath));
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
@ -1315,20 +1294,6 @@ export interface ApiConsoleHaloRunV1alpha1ThemeApiFetchThemeSettingRequest {
|
||||||
readonly name: string;
|
readonly name: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Request parameters for installTheme operation in ApiConsoleHaloRunV1alpha1ThemeApi.
|
|
||||||
* @export
|
|
||||||
* @interface ApiConsoleHaloRunV1alpha1ThemeApiInstallThemeRequest
|
|
||||||
*/
|
|
||||||
export interface ApiConsoleHaloRunV1alpha1ThemeApiInstallThemeRequest {
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @type {File}
|
|
||||||
* @memberof ApiConsoleHaloRunV1alpha1ThemeApiInstallTheme
|
|
||||||
*/
|
|
||||||
readonly file: File;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request parameters for installThemeFromUri operation in ApiConsoleHaloRunV1alpha1ThemeApi.
|
* Request parameters for installThemeFromUri operation in ApiConsoleHaloRunV1alpha1ThemeApi.
|
||||||
* @export
|
* @export
|
||||||
|
@ -1545,17 +1510,13 @@ export class ApiConsoleHaloRunV1alpha1ThemeApi extends BaseAPI {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install a theme by uploading a zip file.
|
* Install a theme by uploading a zip file.
|
||||||
* @param {ApiConsoleHaloRunV1alpha1ThemeApiInstallThemeRequest} requestParameters Request parameters.
|
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
* @memberof ApiConsoleHaloRunV1alpha1ThemeApi
|
* @memberof ApiConsoleHaloRunV1alpha1ThemeApi
|
||||||
*/
|
*/
|
||||||
public installTheme(
|
public installTheme(options?: AxiosRequestConfig) {
|
||||||
requestParameters: ApiConsoleHaloRunV1alpha1ThemeApiInstallThemeRequest,
|
|
||||||
options?: AxiosRequestConfig
|
|
||||||
) {
|
|
||||||
return ApiConsoleHaloRunV1alpha1ThemeApiFp(this.configuration)
|
return ApiConsoleHaloRunV1alpha1ThemeApiFp(this.configuration)
|
||||||
.installTheme(requestParameters.file, options)
|
.installTheme(options)
|
||||||
.then((request) => request(this.axios, this.basePath));
|
.then((request) => request(this.axios, this.basePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,17 +102,19 @@ export const ApiConsoleMigrationHaloRunV1alpha1MigrationApiAxiosParamCreator =
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
* Restore backup by uploading file or providing download link or backup name.
|
||||||
* @param {File} file
|
* @param {string} [backupName] Backup metadata name.
|
||||||
|
* @param {string} [downloadUrl] Remote backup HTTP URL.
|
||||||
|
* @param {File} [file]
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
restoreBackup: async (
|
restoreBackup: async (
|
||||||
file: File,
|
backupName?: string,
|
||||||
|
downloadUrl?: string,
|
||||||
|
file?: File,
|
||||||
options: AxiosRequestConfig = {}
|
options: AxiosRequestConfig = {}
|
||||||
): Promise<RequestArgs> => {
|
): Promise<RequestArgs> => {
|
||||||
// verify required parameter 'file' is not null or undefined
|
|
||||||
assertParamExists("restoreBackup", "file", file);
|
|
||||||
const localVarPath = `/apis/api.console.migration.halo.run/v1alpha1/restorations`;
|
const localVarPath = `/apis/api.console.migration.halo.run/v1alpha1/restorations`;
|
||||||
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||||
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
||||||
|
@ -140,6 +142,14 @@ export const ApiConsoleMigrationHaloRunV1alpha1MigrationApiAxiosParamCreator =
|
||||||
// http bearer authentication required
|
// http bearer authentication required
|
||||||
await setBearerAuthToObject(localVarHeaderParameter, configuration);
|
await setBearerAuthToObject(localVarHeaderParameter, configuration);
|
||||||
|
|
||||||
|
if (backupName !== undefined) {
|
||||||
|
localVarFormParams.append("backupName", backupName as any);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (downloadUrl !== undefined) {
|
||||||
|
localVarFormParams.append("downloadUrl", downloadUrl as any);
|
||||||
|
}
|
||||||
|
|
||||||
if (file !== undefined) {
|
if (file !== undefined) {
|
||||||
localVarFormParams.append("file", file as any);
|
localVarFormParams.append("file", file as any);
|
||||||
}
|
}
|
||||||
|
@ -203,18 +213,24 @@ export const ApiConsoleMigrationHaloRunV1alpha1MigrationApiFp = function (
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
* Restore backup by uploading file or providing download link or backup name.
|
||||||
* @param {File} file
|
* @param {string} [backupName] Backup metadata name.
|
||||||
|
* @param {string} [downloadUrl] Remote backup HTTP URL.
|
||||||
|
* @param {File} [file]
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
async restoreBackup(
|
async restoreBackup(
|
||||||
file: File,
|
backupName?: string,
|
||||||
|
downloadUrl?: string,
|
||||||
|
file?: File,
|
||||||
options?: AxiosRequestConfig
|
options?: AxiosRequestConfig
|
||||||
): Promise<
|
): Promise<
|
||||||
(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>
|
(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>
|
||||||
> {
|
> {
|
||||||
const localVarAxiosArgs = await localVarAxiosParamCreator.restoreBackup(
|
const localVarAxiosArgs = await localVarAxiosParamCreator.restoreBackup(
|
||||||
|
backupName,
|
||||||
|
downloadUrl,
|
||||||
file,
|
file,
|
||||||
options
|
options
|
||||||
);
|
);
|
||||||
|
@ -259,17 +275,22 @@ export const ApiConsoleMigrationHaloRunV1alpha1MigrationApiFactory = function (
|
||||||
.then((request) => request(axios, basePath));
|
.then((request) => request(axios, basePath));
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
* Restore backup by uploading file or providing download link or backup name.
|
||||||
* @param {ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest} requestParameters Request parameters.
|
* @param {ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest} requestParameters Request parameters.
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
restoreBackup(
|
restoreBackup(
|
||||||
requestParameters: ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest,
|
requestParameters: ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest = {},
|
||||||
options?: AxiosRequestConfig
|
options?: AxiosRequestConfig
|
||||||
): AxiosPromise<void> {
|
): AxiosPromise<void> {
|
||||||
return localVarFp
|
return localVarFp
|
||||||
.restoreBackup(requestParameters.file, options)
|
.restoreBackup(
|
||||||
|
requestParameters.backupName,
|
||||||
|
requestParameters.downloadUrl,
|
||||||
|
requestParameters.file,
|
||||||
|
options
|
||||||
|
)
|
||||||
.then((request) => request(axios, basePath));
|
.then((request) => request(axios, basePath));
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -302,12 +323,26 @@ export interface ApiConsoleMigrationHaloRunV1alpha1MigrationApiDownloadBackupsRe
|
||||||
* @interface ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest
|
* @interface ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest
|
||||||
*/
|
*/
|
||||||
export interface ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest {
|
export interface ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest {
|
||||||
|
/**
|
||||||
|
* Backup metadata name.
|
||||||
|
* @type {string}
|
||||||
|
* @memberof ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackup
|
||||||
|
*/
|
||||||
|
readonly backupName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remote backup HTTP URL.
|
||||||
|
* @type {string}
|
||||||
|
* @memberof ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackup
|
||||||
|
*/
|
||||||
|
readonly downloadUrl?: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @type {File}
|
* @type {File}
|
||||||
* @memberof ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackup
|
* @memberof ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackup
|
||||||
*/
|
*/
|
||||||
readonly file: File;
|
readonly file?: File;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -338,18 +373,23 @@ export class ApiConsoleMigrationHaloRunV1alpha1MigrationApi extends BaseAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Restore backup by uploading file or providing download link or backup name.
|
||||||
* @param {ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest} requestParameters Request parameters.
|
* @param {ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest} requestParameters Request parameters.
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
* @memberof ApiConsoleMigrationHaloRunV1alpha1MigrationApi
|
* @memberof ApiConsoleMigrationHaloRunV1alpha1MigrationApi
|
||||||
*/
|
*/
|
||||||
public restoreBackup(
|
public restoreBackup(
|
||||||
requestParameters: ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest,
|
requestParameters: ApiConsoleMigrationHaloRunV1alpha1MigrationApiRestoreBackupRequest = {},
|
||||||
options?: AxiosRequestConfig
|
options?: AxiosRequestConfig
|
||||||
) {
|
) {
|
||||||
return ApiConsoleMigrationHaloRunV1alpha1MigrationApiFp(this.configuration)
|
return ApiConsoleMigrationHaloRunV1alpha1MigrationApiFp(this.configuration)
|
||||||
.restoreBackup(requestParameters.file, options)
|
.restoreBackup(
|
||||||
|
requestParameters.backupName,
|
||||||
|
requestParameters.downloadUrl,
|
||||||
|
requestParameters.file,
|
||||||
|
options
|
||||||
|
)
|
||||||
.then((request) => request(this.axios, this.basePath));
|
.then((request) => request(this.axios, this.basePath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue