mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-01-15 02:18:02 -05:00
feat(ui): add safeguard against accidentally loading non-library workflow as library workflow
This commit is contained in:
@@ -29,7 +29,7 @@ export const useLoadWorkflowFromFile = () => {
|
||||
const { onSuccess, onError, onCompleted } = options;
|
||||
try {
|
||||
const unvalidatedWorkflow = JSON.parse(rawJSON as string);
|
||||
const validatedWorkflow = await validatedAndLoadWorkflow(unvalidatedWorkflow);
|
||||
const validatedWorkflow = await validatedAndLoadWorkflow(unvalidatedWorkflow, 'file');
|
||||
|
||||
if (!validatedWorkflow) {
|
||||
reader.abort();
|
||||
|
||||
@@ -41,7 +41,7 @@ export const useLoadWorkflowFromImage = () => {
|
||||
|
||||
assert(unvalidatedWorkflow !== null, 'No workflow or graph provided');
|
||||
|
||||
const validatedWorkflow = await validateAndLoadWorkflow(unvalidatedWorkflow);
|
||||
const validatedWorkflow = await validateAndLoadWorkflow(unvalidatedWorkflow, 'image');
|
||||
|
||||
if (!validatedWorkflow) {
|
||||
onError?.();
|
||||
|
||||
@@ -30,7 +30,7 @@ export const useLoadWorkflowFromLibrary = () => {
|
||||
try {
|
||||
const res = await getWorkflow(workflowId).unwrap();
|
||||
|
||||
const validatedWorkflow = await validateAndLoadWorkflow(res.workflow);
|
||||
const validatedWorkflow = await validateAndLoadWorkflow(res.workflow, 'library');
|
||||
|
||||
if (!validatedWorkflow) {
|
||||
onError?.();
|
||||
|
||||
@@ -21,7 +21,7 @@ export const useLoadWorkflowFromObject = () => {
|
||||
) => {
|
||||
const { onSuccess, onError, onCompleted } = options;
|
||||
try {
|
||||
const validatedWorkflow = await validateAndLoadWorkflow(unvalidatedWorkflow);
|
||||
const validatedWorkflow = await validateAndLoadWorkflow(unvalidatedWorkflow, 'object');
|
||||
|
||||
if (!validatedWorkflow) {
|
||||
onError?.();
|
||||
|
||||
@@ -43,7 +43,10 @@ export const useValidateAndLoadWorkflow = () => {
|
||||
*
|
||||
* This function catches all errors. It toasts and logs on success and error.
|
||||
*/
|
||||
async (unvalidatedWorkflow: unknown): Promise<WorkflowV3 | null> => {
|
||||
async (
|
||||
unvalidatedWorkflow: unknown,
|
||||
origin: 'file' | 'image' | 'object' | 'library'
|
||||
): Promise<WorkflowV3 | null> => {
|
||||
try {
|
||||
const templates = $templates.get();
|
||||
const { workflow, warnings } = await validateWorkflow({
|
||||
@@ -54,6 +57,13 @@ export const useValidateAndLoadWorkflow = () => {
|
||||
checkModelAccess,
|
||||
});
|
||||
|
||||
if (origin !== 'library') {
|
||||
// Workflow IDs should always map directly to the workflow in the library. If the workflow is loaded from
|
||||
// some other source, and has an ID, we should remove it to ensure the app does not treat it as a library workflow.
|
||||
// For example, when saving a workflow, we might accidentally attempt to save instead of save-as.
|
||||
delete workflow.id;
|
||||
}
|
||||
|
||||
$nodeExecutionStates.set({});
|
||||
dispatch(workflowLoaded(workflow));
|
||||
if (!warnings.length) {
|
||||
|
||||
Reference in New Issue
Block a user