From a812d4ac35ed00d7369eabbdf86c2b4820c7c88b Mon Sep 17 00:00:00 2001 From: Jamie Banks Date: Tue, 9 Jun 2026 14:27:23 +0100 Subject: [PATCH] feat: add SFTP private key authentication support --- .gitea/workflows/release.yml | 2 +- frontend/index.html | 9 ++++++++- frontend/src/main.js | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index b8d9121..479ea08 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -59,7 +59,7 @@ jobs: uses: https://gitea.com/actions/gitea-release-action@v1 with: tag_name: ${{ steps.get_version.outputs.VERSION }} - name: GoExplore ${{ steps.get_version.outputs.VERSION }} + name: ${{ steps.get_version.outputs.VERSION }} body: ${{ steps.changelog.outputs.changelog }} draft: false prerelease: false diff --git a/frontend/index.html b/frontend/index.html index 0e2d7dd..d0b6558 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -123,8 +123,15 @@
- +
+ + +
+
diff --git a/frontend/src/main.js b/frontend/src/main.js index 5f5bd0e..b3051b5 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -48,7 +48,10 @@ async function init() { path_style: document.getElementById('conn-pathstyle').checked, username: document.getElementById('conn-username').value }; - const secret = document.getElementById('conn-secret').value; + let secret = document.getElementById('conn-secret').value; + if (conn.protocol === 'sftp' && document.getElementById('conn-sftp-auth-type').value === 'key') { + secret = document.getElementById('conn-secret-key').value; + } try { await SaveConnection(conn, secret); @@ -104,6 +107,8 @@ window.editConnection = (id) => { document.getElementById('conn-pathstyle').checked = c.path_style || false; document.getElementById('conn-username').value = c.username || ''; document.getElementById('conn-secret').value = ''; + document.getElementById('conn-secret-key').value = ''; + document.getElementById('conn-sftp-auth-type').value = 'password'; document.getElementById('conn-delete-btn').style.display = 'block'; updateProtocolFields(); @@ -114,6 +119,9 @@ window.openConnModal = () => { document.getElementById('modal-title').innerText = "Add Connection"; document.getElementById('conn-form').reset(); document.getElementById('conn-id').value = uuidv4(); + document.getElementById('conn-secret').value = ''; + document.getElementById('conn-secret-key').value = ''; + document.getElementById('conn-sftp-auth-type').value = 'password'; document.getElementById('conn-delete-btn').style.display = 'none'; updateProtocolFields(); document.getElementById('conn-modal').style.display = 'flex'; @@ -133,6 +141,30 @@ window.updateProtocolFields = () => { const showS3Specific = protocol === 's3'; document.getElementById('region-group').style.display = showS3Specific ? 'flex' : 'none'; document.getElementById('pathstyle-group').style.display = showS3Specific ? 'flex' : 'none'; + + // SFTP Auth Type toggle + const authTypeSelect = document.getElementById('conn-sftp-auth-type'); + const secretInput = document.getElementById('conn-secret'); + const secretKeyArea = document.getElementById('conn-secret-key'); + const secretLabel = document.getElementById('secret-label'); + + if (protocol === 'sftp') { + authTypeSelect.style.display = 'block'; + if (authTypeSelect.value === 'key') { + secretInput.style.display = 'none'; + secretKeyArea.style.display = 'block'; + secretLabel.innerText = 'SSH Private Key'; + } else { + secretInput.style.display = 'block'; + secretKeyArea.style.display = 'none'; + secretLabel.innerText = 'Password'; + } + } else { + authTypeSelect.style.display = 'none'; + secretInput.style.display = 'block'; + secretKeyArea.style.display = 'none'; + secretLabel.innerText = 'Password / Secret Key'; + } }; window.deleteConnection = async () => {