Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8ef8f2c098 | ||
|
|
3b3df83d64 | ||
|
|
38d0366acf | ||
|
|
4403cd3572 | ||
|
|
8d7522049c | ||
|
|
7b43cfb1dc | ||
|
|
d644744417 |
13
CHANGELOG.md
13
CHANGELOG.md
@@ -2,6 +2,19 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
## [2.35.0](https://github.com/filebrowser/filebrowser/compare/v2.34.2...v2.35.0) (2025-06-30)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Long press selects item in single click mode ([8d75220](https://github.com/filebrowser/filebrowser/commit/8d7522049ced83f28f0933b55772c32e3ad04627))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* shell value must be joined by blank space ([4403cd3](https://github.com/filebrowser/filebrowser/commit/4403cd35720dbda5a8bb1013b92582accf3317bc))
|
||||
* update documentation links ([38d0366](https://github.com/filebrowser/filebrowser/commit/38d0366acf88352b5a9a97c45837b0f865efae0b))
|
||||
|
||||
### [2.34.2](https://github.com/filebrowser/filebrowser/compare/v2.34.1...v2.34.2) (2025-06-29)
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ if [ -f "/.filebrowser.json" ]; then
|
||||
echo ""
|
||||
echo "The volume mount configuration has changed in the latest release."
|
||||
echo "Please rename .filebrowser.json to settings.json and mount the parent directory to /config".
|
||||
echo "Read more on https://github.com/filebrowser/filebrowser/blob/master/docs/installation.md#docker"
|
||||
echo "Read more on https://filebrowser.org/installation.html#docker"
|
||||
echo ""
|
||||
echo "This workaround will be removed in a future release."
|
||||
echo ""
|
||||
@@ -27,7 +27,7 @@ if [ -f "/database.db" ]; then
|
||||
echo ""
|
||||
echo "The volume mount configuration has changed in the latest release."
|
||||
echo "Please rename database.db to filebrowser.db and mount the parent directory to /database".
|
||||
echo "Read more on https://github.com/filebrowser/filebrowser/blob/master/docs/installation.md#docker"
|
||||
echo "Read more on https://filebrowser.org/installation.html#docker"
|
||||
echo ""
|
||||
echo "This workaround will be removed in a future release."
|
||||
echo ""
|
||||
|
||||
@@ -8,6 +8,13 @@
|
||||
@dragover="dragOver"
|
||||
@drop="drop"
|
||||
@click="itemClick"
|
||||
@mousedown="handleMouseDown"
|
||||
@mouseup="handleMouseUp"
|
||||
@mouseleave="handleMouseLeave"
|
||||
@touchstart="handleTouchStart"
|
||||
@touchend="handleTouchEnd"
|
||||
@touchcancel="handleTouchCancel"
|
||||
@touchmove="handleTouchMove"
|
||||
:data-dir="isDir"
|
||||
:data-type="type"
|
||||
:aria-label="name"
|
||||
@@ -50,6 +57,12 @@ import { useRouter } from "vue-router";
|
||||
|
||||
const touches = ref<number>(0);
|
||||
|
||||
const longPressTimer = ref<number | null>(null);
|
||||
const longPressTriggered = ref<boolean>(false);
|
||||
const longPressDelay = ref<number>(500);
|
||||
const startPosition = ref<{ x: number; y: number } | null>(null);
|
||||
const moveThreshold = ref<number>(10);
|
||||
|
||||
const $showError = inject<IToastError>("$showError")!;
|
||||
const router = useRouter();
|
||||
|
||||
@@ -209,6 +222,12 @@ const drop = async (event: Event) => {
|
||||
};
|
||||
|
||||
const itemClick = (event: Event | KeyboardEvent) => {
|
||||
// If long press was triggered, prevent normal click behavior
|
||||
if (longPressTriggered.value) {
|
||||
longPressTriggered.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
singleClick.value &&
|
||||
!(event as KeyboardEvent).ctrlKey &&
|
||||
@@ -281,4 +300,76 @@ const getExtension = (fileName: string): string => {
|
||||
}
|
||||
return fileName.substring(lastDotIndex);
|
||||
};
|
||||
|
||||
// Long-press helper functions
|
||||
const startLongPress = (clientX: number, clientY: number) => {
|
||||
startPosition.value = { x: clientX, y: clientY };
|
||||
longPressTimer.value = window.setTimeout(() => {
|
||||
handleLongPress();
|
||||
}, longPressDelay.value);
|
||||
};
|
||||
|
||||
const cancelLongPress = () => {
|
||||
if (longPressTimer.value !== null) {
|
||||
window.clearTimeout(longPressTimer.value);
|
||||
longPressTimer.value = null;
|
||||
}
|
||||
startPosition.value = null;
|
||||
};
|
||||
|
||||
const handleLongPress = () => {
|
||||
if (singleClick.value) {
|
||||
longPressTriggered.value = true;
|
||||
click(new Event("longpress"));
|
||||
}
|
||||
cancelLongPress();
|
||||
};
|
||||
|
||||
const checkMovement = (clientX: number, clientY: number): boolean => {
|
||||
if (!startPosition.value) return false;
|
||||
|
||||
const deltaX = Math.abs(clientX - startPosition.value.x);
|
||||
const deltaY = Math.abs(clientY - startPosition.value.y);
|
||||
|
||||
return deltaX > moveThreshold.value || deltaY > moveThreshold.value;
|
||||
};
|
||||
|
||||
// Event handlers
|
||||
const handleMouseDown = (event: MouseEvent) => {
|
||||
if (event.button === 0) {
|
||||
startLongPress(event.clientX, event.clientY);
|
||||
}
|
||||
};
|
||||
|
||||
const handleMouseUp = () => {
|
||||
cancelLongPress();
|
||||
};
|
||||
|
||||
const handleMouseLeave = () => {
|
||||
cancelLongPress();
|
||||
};
|
||||
|
||||
const handleTouchStart = (event: TouchEvent) => {
|
||||
if (event.touches.length === 1) {
|
||||
const touch = event.touches[0];
|
||||
startLongPress(touch.clientX, touch.clientY);
|
||||
}
|
||||
};
|
||||
|
||||
const handleTouchEnd = () => {
|
||||
cancelLongPress();
|
||||
};
|
||||
|
||||
const handleTouchCancel = () => {
|
||||
cancelLongPress();
|
||||
};
|
||||
|
||||
const handleTouchMove = (event: TouchEvent) => {
|
||||
if (event.touches.length === 1 && startPosition.value) {
|
||||
const touch = event.touches[0];
|
||||
if (checkMovement(touch.clientX, touch.clientY)) {
|
||||
cancelLongPress();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<a
|
||||
class="link"
|
||||
target="_blank"
|
||||
href="https://github.com/filebrowser/filebrowser/blob/master/docs/configuration.md#custom-branding"
|
||||
href="https://filebrowser.org/configuration.html#command-runner"
|
||||
>{{ t("settings.documentation") }}</a
|
||||
>
|
||||
</i18n-t>
|
||||
@@ -204,7 +204,7 @@
|
||||
<a
|
||||
class="link"
|
||||
target="_blank"
|
||||
href="https://github.com/filebrowser/filebrowser/blob/master/docs/configuration.md#command-runner"
|
||||
href="https://filebrowser.org/configuration.html#command-runner"
|
||||
>{{ t("settings.documentation") }}</a
|
||||
>
|
||||
</i18n-t>
|
||||
@@ -401,7 +401,7 @@ onMounted(async () => {
|
||||
|
||||
originalSettings.value = original;
|
||||
settings.value = newSettings;
|
||||
shellValue.value = newSettings.shell.join("\n");
|
||||
shellValue.value = newSettings.shell.join(" ");
|
||||
} catch (err) {
|
||||
if (err instanceof Error) {
|
||||
error.value = err;
|
||||
|
||||
@@ -97,6 +97,10 @@ filebrowser config set --auth.method=noauth
|
||||
|
||||
## Command Runner
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> The **command execution** functionality has been disabled for all existent and new installations by default from version v2.33.8 and onwards, due to continuous and known security vulnerabilities. You should only use this feature if you are aware of all of the security risks involved. For more up to date information, consult issue [#5199](https://github.com/filebrowser/filebrowser/issues/5199).
|
||||
|
||||
The command runner is a feature that enables you to execute any shell command you want before or after a certain event. Right now, these are the events:
|
||||
|
||||
* Copy
|
||||
|
||||
34
www/docs/deployment.md
Normal file
34
www/docs/deployment.md
Normal file
@@ -0,0 +1,34 @@
|
||||
## Fail2ban
|
||||
|
||||
File Browser does not natively support protection against brute force attacks. Therefore, we suggest using something like [fail2ban](https://github.com/fail2ban/fail2ban), which takes care of that by tracking the logs of your File Browser instance. For more information on how fail2ban works, please refer to their [wiki](https://github.com/fail2ban/fail2ban/wiki).
|
||||
|
||||
### Filter Configuration
|
||||
|
||||
An example filter configuration targeted at matching File Browser's logs.
|
||||
|
||||
```ini
|
||||
[INCLUDES]
|
||||
before = common.conf
|
||||
|
||||
[Definition]
|
||||
datepattern = `^%%Y\/%%m\/%%d %%H:%%M:%%S`
|
||||
failregex = `\/api\/login: 403 <HOST> *`
|
||||
```
|
||||
|
||||
### Jail Configuration
|
||||
|
||||
An example jail configuration. You should fill it with the path of the logs of File Browser, as well as the port where it is running at.
|
||||
|
||||
```ini
|
||||
[filebrowser]
|
||||
|
||||
enabled = true
|
||||
port = [your_port]
|
||||
filter = filebrowser
|
||||
logpath = [your_log_path]
|
||||
maxretry = 10
|
||||
bantime = 10m
|
||||
findtime = 10m
|
||||
banaction = iptables-allports
|
||||
banaction_allports = iptables-allports
|
||||
```
|
||||
@@ -78,8 +78,10 @@ File Browser is now up and running. Read some [first boot](#first-boot) for more
|
||||
|
||||
Your instance is now up and running. File Browser will automatically bootstrap a database, in which the configuration and the users are stored. You can find the address in which your instance is running, as well as the randomly generated password for the user `admin`, in the console logs.
|
||||
|
||||
Although this is the fastest way to bootstrap an instance, we recommend you to take a look at other possible options, by checking `config init --help` and `config set --help`, to make the installation as safe and customized as it can be.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> The automatically generated password for the user `admin` is only displayed once. If you fail to remember it, you will need to manually delete the database and start File Browser again.
|
||||
|
||||
Although this is the fastest way to bootstrap an instance, we recommend you to take a look at other possible options, by checking `config init --help` and `config set --help`, to make the installation as safe and customized as it can be.
|
||||
|
||||
If your goal is to have a public-facing deployment, we recommend taking a look at the [deployment](deployment.md) page for more information on how you can secure your installation.
|
||||
|
||||
@@ -97,8 +97,10 @@ extra:
|
||||
|
||||
nav:
|
||||
- Home: index.md
|
||||
- Installation: installation.md
|
||||
- Configuration: configuration.md
|
||||
- Getting Started:
|
||||
- Installation: installation.md
|
||||
- Configuration: configuration.md
|
||||
- Deployment: deployment.md
|
||||
- Contributing:
|
||||
- Contributing: contributing.md
|
||||
- Code of Conduct: code-of-conduct.md
|
||||
|
||||
Reference in New Issue
Block a user