This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git


The following commit(s) were added to refs/heads/main by this push:
     new 4b87321  Remove the redundant form to create a directory
4b87321 is described below

commit 4b8732175f1b63fb19cf2f8381635449a04d4fea
Author: Sean B. Palmer <[email protected]>
AuthorDate: Tue May 27 20:16:15 2025 +0100

    Remove the redundant form to create a directory
---
 atr/routes/finish.py               | 94 +-------------------------------------
 atr/templates/finish-selected.html | 15 ------
 2 files changed, 1 insertion(+), 108 deletions(-)

diff --git a/atr/routes/finish.py b/atr/routes/finish.py
index 6475ff8..02da3fa 100644
--- a/atr/routes/finish.py
+++ b/atr/routes/finish.py
@@ -40,23 +40,6 @@ SPECIAL_SUFFIXES: Final[frozenset[str]] = frozenset({".asc", 
".sha256", ".sha512
 _LOGGER: Final = logging.getLogger(__name__)
 
 
-class CreateDirectoryForm(util.QuartFormTyped):
-    """Form for creating a new directory within a preview revision."""
-
-    new_directory_name = wtforms.StringField(
-        "New directory name",
-        validators=[
-            wtforms.validators.InputRequired(),
-            wtforms.validators.Regexp(
-                
r"^(?!.*\.\.)(?!^\.$)(?!^/)(?!.*/$)[a-zA-Z0-9_-]+(?:/[a-zA-Z0-9_-]+)*$",
-                message="Invalid characters or structure. Use a-z, 0-9, _, -."
-                " No leading or trailing slashes, and no dots. No '..' 
segments.",
-            ),
-        ],
-    )
-    submit = wtforms.SubmitField("Create directory")
-
-
 class MoveFileForm(util.QuartFormTyped):
     """Form for moving one or more files within a preview revision."""
 
@@ -113,9 +96,6 @@ async def selected(
     move_form = await MoveFileForm.create_form(
         data=formdata if (formdata and formdata.get("form_action") != 
"create_dir") else None
     )
-    create_dir_form = await CreateDirectoryForm.create_form(
-        data=formdata if (formdata and formdata.get("form_action") == 
"create_dir") else None
-    )
 
     # Populate choices dynamically for both GET and POST
     move_form.source_files.choices = sorted([(str(p), str(p)) for p in 
source_files_rel])
@@ -123,9 +103,7 @@ async def selected(
     can_move = (len(target_dirs) > 1) and (len(source_files_rel) > 0)
 
     if formdata:
-        result = await _process_formdata(
-            formdata, session, project_name, version_name, create_dir_form, 
move_form, can_move
-        )
+        result = await _process_formdata(formdata, session, project_name, 
version_name, move_form, can_move)
         if result is not None:
             return result
 
@@ -141,75 +119,17 @@ async def selected(
         release=release,
         source_files=sorted(source_files_rel),
         form=move_form,
-        create_dir_form=create_dir_form,
         can_move=can_move,
         user_ssh_keys=user_ssh_keys,
         target_dirs=sorted(list(target_dirs)),
     )
 
 
-async def _create_directory_in_revision(
-    new_dir_rel: pathlib.Path,
-    session: routes.CommitterSession,
-    project_name: str,
-    version_name: str,
-    wants_json: bool,
-) -> tuple[quart_response.Response, int] | response.Response:
-    try:
-        description = "Directory creation through web interface"
-        async with revision.create_and_manage(
-            project_name, version_name, session.uid, description=description
-        ) as creating:
-            target_path = creating.interim_path / new_dir_rel
-            # Path traversal check
-            try:
-                resolved_target_path = target_path.resolve()
-                
resolved_target_path.relative_to(creating.interim_path.resolve())
-                await aiofiles.os.makedirs(target_path, exist_ok=False)
-            except ValueError:
-                creating.failed = True
-                # Path traversal attempt detected
-                return await _respond(
-                    session, project_name, version_name, wants_json, False, 
"Invalid directory path.", 400
-                )
-            except FileExistsError:
-                creating.failed = True
-                return await _respond(
-                    session,
-                    project_name,
-                    version_name,
-                    wants_json,
-                    False,
-                    f"Directory or file '{new_dir_rel}' already exists.",
-                    400,
-                )
-        return await _respond(
-            session,
-            project_name,
-            version_name,
-            wants_json,
-            True,
-            f"Created directory '{new_dir_rel}'.",
-            201 if wants_json else 200,
-        )
-    except OSError as e:
-        _LOGGER.exception("Error creating directory in new revision")
-        return await _respond(
-            session, project_name, version_name, wants_json, False, f"Error 
creating directory: {e}", 500
-        )
-    except Exception as e:
-        _LOGGER.exception("Unexpected error during directory creation")
-        return await _respond(
-            session, project_name, version_name, wants_json, False, f"An 
unexpected error occurred: {e!s}", 500
-        )
-
-
 async def _process_formdata(
     formdata: datastructures.MultiDict,
     session: routes.CommitterSession,
     project_name: str,
     version_name: str,
-    create_dir_form: CreateDirectoryForm,
     move_form: MoveFileForm,
     can_move: bool,
 ) -> tuple[quart_response.Response, int] | response.Response | str | None:
@@ -247,18 +167,6 @@ async def _process_formdata(
             source_files_rel, target_dir_rel, session, project_name, 
version_name, wants_json
         )
 
-    elif form_action == "create_dir":
-        if await create_dir_form.validate_on_submit():
-            new_dir_name = create_dir_form.new_directory_name.data
-            if new_dir_name:
-                return await _create_directory_in_revision(
-                    pathlib.Path(new_dir_name),
-                    session,
-                    project_name,
-                    version_name,
-                    
quart.request.accept_mimetypes.best_match(["application/json", "text/html"]) == 
"application/json",
-                )
-
     elif ((form_action != "create_dir") or (form_action is None)) and can_move:
         return await _move_file(move_form, session, project_name, version_name)
     return None
diff --git a/atr/templates/finish-selected.html 
b/atr/templates/finish-selected.html
index c330b29..5a56731 100644
--- a/atr/templates/finish-selected.html
+++ b/atr/templates/finish-selected.html
@@ -176,21 +176,6 @@
       File moving is disabled as all files are currently in the same directory 
or the revision is empty.
     </div>
   {% endif %}
-
-  <h2>Manage directories</h2>
-  <h3>Create a new directory</h3>
-  <form method="post">
-    {{ create_dir_form.hidden_tag() }}
-    <div class="d-flex">
-      {{ create_dir_form.new_directory_name(class="form-control", 
placeholder="New directory name") }}
-      <button type="submit"
-              class="btn btn-primary ms-2 text-nowrap"
-              name="form_action"
-              value="create_dir">Create directory</button>
-    </div>
-    {{ forms.errors(create_dir_form.new_directory_name, classes="text-danger 
small mt-1") }}
-  </form>
-
   <!--
   TODO: Add a form to delete a directory.
   <h3>Delete a directory</h3>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to