mirror of
https://github.com/timvisee/ffsend.git
synced 2025-10-03 09:39:15 +02:00
Compare commits
45 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b6d7c6983a | ||
![]() |
88bffdb79e | ||
![]() |
f5b606fca0 | ||
![]() |
60b3df030e | ||
![]() |
0b32f4f71b | ||
![]() |
754735d2db | ||
![]() |
92ed3eca9d | ||
![]() |
a7143bb1ee | ||
![]() |
0e7884d13a | ||
![]() |
c87845770d | ||
![]() |
2c9d60d5c1 | ||
![]() |
27439fb72f | ||
![]() |
07f3ff8777 | ||
![]() |
1da996783f | ||
![]() |
238f1f54d7 | ||
![]() |
5df8463b74 | ||
![]() |
8d8ad7fdb3 | ||
![]() |
f06b639542 | ||
![]() |
5fd2eac6eb | ||
![]() |
e0821c751d | ||
![]() |
3c1c2dc28c | ||
![]() |
6fdc6ad85c | ||
![]() |
13f9edd2ea | ||
![]() |
fd5b38f9ab | ||
![]() |
6661a58770 | ||
![]() |
b2b287e34f | ||
![]() |
9b8dee12ea | ||
![]() |
a98c9d1ce4 | ||
![]() |
f77f9f116a | ||
![]() |
afb004680b | ||
![]() |
6edc0b1eac | ||
![]() |
7c94f265e2 | ||
![]() |
d33c03cd2c | ||
![]() |
ecc6bcf736 | ||
![]() |
3e9a4d67f2 | ||
![]() |
ea87a778b3 | ||
![]() |
91cf01ec75 | ||
![]() |
7598063e36 | ||
![]() |
6672891490 | ||
![]() |
8139e3be01 | ||
![]() |
ac9f56945b | ||
![]() |
b42225be76 | ||
![]() |
1a5ec2de79 | ||
![]() |
216772361a | ||
![]() |
55c243a007 |
11 changed files with 917 additions and 906 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@
|
||||||
target/
|
target/
|
||||||
**/*.rs.bk
|
**/*.rs.bk
|
||||||
.idea/
|
.idea/
|
||||||
|
snapcraft.login
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# - export a build artifact from the new job
|
# - export a build artifact from the new job
|
||||||
# - manually upload artifact to GitHub in the 'github-release' job
|
# - manually upload artifact to GitHub in the 'github-release' job
|
||||||
|
|
||||||
image: "rust:slim"
|
image: "rust:slim-bookworm"
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- check
|
- check
|
||||||
|
@ -64,10 +64,10 @@ check-nightly:
|
||||||
<<: *check-base
|
<<: *check-base
|
||||||
variables:
|
variables:
|
||||||
RUST_VERSION: nightly
|
RUST_VERSION: nightly
|
||||||
check-old:
|
check-msrv:
|
||||||
<<: *check-base
|
<<: *check-base
|
||||||
variables:
|
variables:
|
||||||
RUST_VERSION: "1.46.0"
|
RUST_VERSION: "1.63.0"
|
||||||
|
|
||||||
# Build using Rust stable
|
# Build using Rust stable
|
||||||
build-x86_64-linux-gnu:
|
build-x86_64-linux-gnu:
|
||||||
|
@ -95,9 +95,9 @@ build-x86_64-linux-musl:
|
||||||
|
|
||||||
# Build OpenSSL statically
|
# Build OpenSSL statically
|
||||||
- apt-get install -y build-essential wget musl-tools
|
- apt-get install -y build-essential wget musl-tools
|
||||||
- wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1k.tar.gz
|
- wget https://github.com/openssl/openssl/releases/download/openssl-3.0.15/openssl-3.0.15.tar.gz
|
||||||
- tar xzvf openssl-1.1.1k.tar.gz
|
- tar xzvf openssl-3.0.15.tar.gz
|
||||||
- cd openssl-1.1.1k
|
- cd openssl-3.0.15
|
||||||
- ./config no-async -fPIC --openssldir=/usr/local/ssl --prefix=/usr/local
|
- ./config no-async -fPIC --openssldir=/usr/local/ssl --prefix=/usr/local
|
||||||
- make
|
- make
|
||||||
- make install
|
- make install
|
||||||
|
@ -105,7 +105,7 @@ build-x86_64-linux-musl:
|
||||||
|
|
||||||
# Statically build ffsend
|
# Statically build ffsend
|
||||||
- export OPENSSL_STATIC=1
|
- export OPENSSL_STATIC=1
|
||||||
- export OPENSSL_LIB_DIR=/usr/local/lib
|
- export OPENSSL_LIB_DIR=/usr/local/lib64
|
||||||
- export OPENSSL_INCLUDE_DIR=/usr/local/include
|
- export OPENSSL_INCLUDE_DIR=/usr/local/include
|
||||||
- cargo build --target=$RUST_TARGET --release --verbose
|
- cargo build --target=$RUST_TARGET --release --verbose
|
||||||
|
|
||||||
|
@ -187,8 +187,7 @@ release-snap:
|
||||||
|
|
||||||
# Publish snap package
|
# Publish snap package
|
||||||
- echo "Publishing snap package..."
|
- echo "Publishing snap package..."
|
||||||
- echo "$SNAPCRAFT_LOGIN" | base64 -d > snapcraft.login
|
- snapcraft whoami
|
||||||
- snapcraft login --with snapcraft.login
|
|
||||||
- snapcraft push --release=stable ffsend_*_amd64.snap
|
- snapcraft push --release=stable ffsend_*_amd64.snap
|
||||||
artifacts:
|
artifacts:
|
||||||
name: ffsend-snap-x86_64
|
name: ffsend-snap-x86_64
|
||||||
|
|
1699
Cargo.lock
generated
1699
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
23
Cargo.toml
23
Cargo.toml
|
@ -1,6 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name = "ffsend"
|
name = "ffsend"
|
||||||
version = "0.2.74"
|
version = "0.2.77"
|
||||||
|
rust-version = "1.63.0"
|
||||||
authors = ["Tim Visee <3a4fb3964f@sinenomine.email>"]
|
authors = ["Tim Visee <3a4fb3964f@sinenomine.email>"]
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
@ -49,24 +50,12 @@ license-file = ["LICENSE", "3"]
|
||||||
depends = "$auto, libssl1.1, ca-certificates, xclip"
|
depends = "$auto, libssl1.1, ca-certificates, xclip"
|
||||||
maintainer-scripts = "pkg/deb"
|
maintainer-scripts = "pkg/deb"
|
||||||
|
|
||||||
[badges]
|
|
||||||
gitlab = { repository = "timvisee/ffsend", branch = "master" }
|
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "ffsend"
|
name = "ffsend"
|
||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = [
|
default = ["archive", "clipboard", "crypto-ring", "history", "infer-command", "qrcode", "send3", "urlshorten"]
|
||||||
"archive",
|
|
||||||
"clipboard",
|
|
||||||
"crypto-ring",
|
|
||||||
"history",
|
|
||||||
"infer-command",
|
|
||||||
"qrcode",
|
|
||||||
"send3",
|
|
||||||
"urlshorten",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Compile with file archiving support
|
# Compile with file archiving support
|
||||||
archive = ["tar"]
|
archive = ["tar"]
|
||||||
|
@ -122,10 +111,10 @@ open = "2"
|
||||||
openssl-probe = "0.1"
|
openssl-probe = "0.1"
|
||||||
pathdiff = "0.2"
|
pathdiff = "0.2"
|
||||||
pbr = "1"
|
pbr = "1"
|
||||||
prettytable-rs = "0.8"
|
prettytable-rs = { version = "0.10.0", default-features = false }
|
||||||
qr2term = { version = "0.2", optional = true }
|
qr2term = { version = "0.2", optional = true }
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
regex = "1.3"
|
regex = "1.5"
|
||||||
rpassword = "5"
|
rpassword = "5"
|
||||||
serde = "1"
|
serde = "1"
|
||||||
serde_derive = "1"
|
serde_derive = "1"
|
||||||
|
@ -133,7 +122,7 @@ tar = { version = "0.4", optional = true }
|
||||||
tempfile = "3"
|
tempfile = "3"
|
||||||
toml = "0.5"
|
toml = "0.5"
|
||||||
urlshortener = { version = "3", optional = true }
|
urlshortener = { version = "3", optional = true }
|
||||||
version-compare = "0.0.13"
|
version-compare = "0.1"
|
||||||
|
|
||||||
[target.'cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "openbsd", target_os = "netbsd"))'.dependencies]
|
[target.'cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "openbsd", target_os = "netbsd"))'.dependencies]
|
||||||
which = { version = "4.0", optional = true }
|
which = { version = "4.0", optional = true }
|
||||||
|
|
11
README.md
11
README.md
|
@ -36,7 +36,7 @@ Find out more about security [here](#security).
|
||||||
- [Features](#features)
|
- [Features](#features)
|
||||||
- [Usage](#usage)
|
- [Usage](#usage)
|
||||||
- [Requirements](#requirements)
|
- [Requirements](#requirements)
|
||||||
- [Install](#install) ([Linux](#linux-all-distributions), [macOS](#macos), [Windows](#windows), [FreeBSD](#freebsd), [Android](#android), [_Other OS/arch_](#other-os-or-architecture))
|
- [Install](#install) ([Linux](#linux-all-distributions), [macOS](#macos), [Windows](#windows), [FreeBSD](#freebsd), [Android](#android), [_Other OS/architecture_](#other-os-or-architecture))
|
||||||
- [Build](#build)
|
- [Build](#build)
|
||||||
- [Configuration and environment](#configuration-and-environment)
|
- [Configuration and environment](#configuration-and-environment)
|
||||||
- [Security](#security)
|
- [Security](#security)
|
||||||
|
@ -188,6 +188,7 @@ _Note: due to how `snap` is configured by default, you won't be able to use the
|
||||||
package from some contexts such as through SSH without manual modifications. If
|
package from some contexts such as through SSH without manual modifications. If
|
||||||
you're experiencing problems, please refer to a different installation method
|
you're experiencing problems, please refer to a different installation method
|
||||||
such as the [prebuilt binaries](#linux-prebuilt-binaries), or open an issue._
|
such as the [prebuilt binaries](#linux-prebuilt-binaries), or open an issue._
|
||||||
|
_Note: if you want to read/write to a flash drive run `snap connect ffsend:removable-media`
|
||||||
|
|
||||||
[» `ffsend`][snapcraft-ffsend]
|
[» `ffsend`][snapcraft-ffsend]
|
||||||
|
|
||||||
|
@ -362,7 +363,7 @@ You can use `ffsend` from the command line in the same directory:
|
||||||
.\ffsend.exe --help
|
.\ffsend.exe --help
|
||||||
```
|
```
|
||||||
|
|
||||||
To make it globally invokable as `ffsend`, you must make the binary available in
|
To make it globally invocable as `ffsend`, you must make the binary available in
|
||||||
your systems `PATH`. The easiest solution is to move it into `System32`:
|
your systems `PATH`. The easiest solution is to move it into `System32`:
|
||||||
```cmd
|
```cmd
|
||||||
move .\ffsend.exe C:\Windows\System32\ffsend.exe
|
move .\ffsend.exe C:\Windows\System32\ffsend.exe
|
||||||
|
@ -428,7 +429,7 @@ docker pull timvisee/ffsend
|
||||||
```
|
```
|
||||||
|
|
||||||
On Linux or macOS you might define a alias in your shell configuration, to make
|
On Linux or macOS you might define a alias in your shell configuration, to make
|
||||||
it invokable as `ffsend`:
|
it invocable as `ffsend`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
alias ffsend='docker run --rm -it -v "$(pwd):/data" timvisee/ffsend'
|
alias ffsend='docker run --rm -it -v "$(pwd):/data" timvisee/ffsend'
|
||||||
|
@ -444,7 +445,7 @@ before proceeding:
|
||||||
### Build requirements
|
### Build requirements
|
||||||
- Runtime [requirements](#requirements)
|
- Runtime [requirements](#requirements)
|
||||||
- [`git`][git]
|
- [`git`][git]
|
||||||
- [`rust`][rust] `v1.40` or higher (install using [`rustup`][rustup])
|
- [`rust`][rust] `v1.63` (MSRV) or higher (install using [`rustup`][rustup])
|
||||||
- [OpenSSL][openssl] or [LibreSSL][libressl] libraries/headers:
|
- [OpenSSL][openssl] or [LibreSSL][libressl] libraries/headers:
|
||||||
- Linux:
|
- Linux:
|
||||||
- Ubuntu, Debian and derivatives: `apt install build-essential cmake pkg-config libssl-dev`
|
- Ubuntu, Debian and derivatives: `apt install build-essential cmake pkg-config libssl-dev`
|
||||||
|
@ -811,7 +812,7 @@ Check out the [LICENSE](LICENSE) file for more information.
|
||||||
[termux]: https://termux.com/
|
[termux]: https://termux.com/
|
||||||
[rust]: https://rust-lang.org/
|
[rust]: https://rust-lang.org/
|
||||||
[rustup]: https://rustup.rs/
|
[rustup]: https://rustup.rs/
|
||||||
[send]: https://send.vis.ee/
|
[send]: https://github.com/timvisee/send
|
||||||
[mozilla-send]: https://github.com/mozilla/send
|
[mozilla-send]: https://github.com/mozilla/send
|
||||||
[timvisee-send]: https://github.com/timvisee/send
|
[timvisee-send]: https://github.com/timvisee/send
|
||||||
[send-encryption]: https://github.com/timvisee/send/blob/master/docs/encryption.md
|
[send-encryption]: https://github.com/timvisee/send/blob/master/docs/encryption.md
|
||||||
|
|
6
contrib/util/nautilus/README.md
Normal file
6
contrib/util/nautilus/README.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
`firefox-send` is a script for Nautilus/Nemo/Caja (maybe it needs some adaptation for Caja) to send files directly from the file browser, using the contextual menu.
|
||||||
|
|
||||||
|
* Copy the `firefox-send` file to ~/.local/share/nautilus/scripts/firefox-send
|
||||||
|
* Modify the default options to your use case: host server, download number, retention time.
|
||||||
|
* Make the file executable (`chmod +x firefox-send`).
|
||||||
|
* Restart Nautilus/Nemo/Caja.
|
46
contrib/util/nautilus/firefox-send
Executable file
46
contrib/util/nautilus/firefox-send
Executable file
|
@ -0,0 +1,46 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
#CONSTANTS
|
||||||
|
#FILEPATH=`echo $NAUTILUS_SCRIPT_SELECTED_URIS | sed 's@file://@@g'`
|
||||||
|
# Quote the paths
|
||||||
|
IFS=$'\n' read -d '' -r -a FILEPATH <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
|
||||||
|
FFSEND_BIN='/usr/bin/ffsend'
|
||||||
|
FFSEND_BIN_OPTS="upload --open --copy"
|
||||||
|
ZENITY='/usr/bin/zenity '
|
||||||
|
ZENITY_PROGRESS_OPTIONS='--auto-close --auto-kill' #you can remove this if you like
|
||||||
|
|
||||||
|
#sanity checks
|
||||||
|
for sanity_check in $FFSEND_BIN "${FILEPATH[@]}"
|
||||||
|
do
|
||||||
|
ZENITY_ERROR_SANITY="There is an error, it involved $sanity_check.\n Probably binary or file missing"
|
||||||
|
if [ ! -e $sanity_check ]
|
||||||
|
then
|
||||||
|
#zenity --error --text="$(eval "echo \"$ZENITY_ERROR_SANITY\"")"
|
||||||
|
zenity --error --text="$ZENITY_ERROR_SANITY"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Use the following flags automatically from now on
|
||||||
|
# -I: no interaction
|
||||||
|
# -f: force
|
||||||
|
# -y: yes
|
||||||
|
# -q: quiet
|
||||||
|
export FFSEND_NO_INTERACT=1 FFSEND_FORCE=1 FFSEND_YES=1 FFSEND_QUIET=1
|
||||||
|
export FFSEND_HOST=https://send.boblorange.net
|
||||||
|
export FFSEND_EXPIRY_TIME=604800
|
||||||
|
export FFSEND_DOWNLOAD_LIMIT=5
|
||||||
|
|
||||||
|
#check whether copying file or directory
|
||||||
|
if [ ! -f "${FILEPATH[@]}" ]; then
|
||||||
|
FFSEND_BIN_OPTS="$FFSEND_BIN_OPTS --archive"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Upload a file
|
||||||
|
#zenity --info --text="Ready to send: $FFSEND_BIN $FFSEND_BIN_OPTS ${FILEPATH[@]}"
|
||||||
|
$FFSEND_BIN $FFSEND_BIN_OPTS "${FILEPATH[@]}" | $($ZENITY --progress --text="sending $(basename $FILEPATH)" --pulsate $ZENITY_PROGRESS_OPTIONS)
|
||||||
|
#echo -e "$FILEPATH" | xargs -i $FFSEND_BIN $FFSEND_BIN_OPTS {} | $($ZENITY --progress --text="sending $(basename $FILEPATH)" --pulsate $ZENITY_PROGRESS_OPTIONS)
|
||||||
|
|
||||||
|
# Upload a file
|
||||||
|
#echo -e "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | xargs -i ffsend upload --open --copy {}
|
|
@ -28,7 +28,7 @@ fi
|
||||||
mkdir -p "$DIR/ffsend-$VERSION"
|
mkdir -p "$DIR/ffsend-$VERSION"
|
||||||
cp -- "$DIR/../ffsend" "$DIR/ffsend-$VERSION/ffsend"
|
cp -- "$DIR/../ffsend" "$DIR/ffsend-$VERSION/ffsend"
|
||||||
|
|
||||||
# Create an application tarbal
|
# Create an application tarball
|
||||||
cd -- "$DIR/.."
|
cd -- "$DIR/.."
|
||||||
git archive --format tar.gz -o "$DIR/ffsend-$VERSION/ffsend-$VERSION.tar.gz" "$TRAVIS_TAG"
|
git archive --format tar.gz -o "$DIR/ffsend-$VERSION/ffsend-$VERSION.tar.gz" "$TRAVIS_TAG"
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
use chbs::{config::BasicConfig, prelude::*, word::WordList};
|
use chbs;
|
||||||
use clap::Arg;
|
use clap::Arg;
|
||||||
|
|
||||||
use super::{CmdArg, CmdArgFlag};
|
use super::{CmdArg, CmdArgFlag};
|
||||||
|
|
||||||
/// How many words the passphrase should consist of.
|
|
||||||
const PASSPHRASE_WORDS: usize = 5;
|
|
||||||
|
|
||||||
/// The passphrase generation argument.
|
/// The passphrase generation argument.
|
||||||
pub struct ArgGenPassphrase {}
|
pub struct ArgGenPassphrase {}
|
||||||
|
|
||||||
|
@ -13,10 +10,7 @@ impl ArgGenPassphrase {
|
||||||
/// Generate a cryptographically secure passphrase that is easily
|
/// Generate a cryptographically secure passphrase that is easily
|
||||||
/// remembered using diceware.
|
/// remembered using diceware.
|
||||||
pub fn gen_passphrase() -> String {
|
pub fn gen_passphrase() -> String {
|
||||||
let mut config = BasicConfig::default();
|
chbs::passphrase()
|
||||||
config.words = PASSPHRASE_WORDS;
|
|
||||||
config.word_provider = WordList::builtin_eff_general_short().sampler();
|
|
||||||
config.to_scheme().generate()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ impl<'a: 'b, 'b> Handler<'a> {
|
||||||
let app = App::new(crate_name!())
|
let app = App::new(crate_name!())
|
||||||
.version(crate_version!())
|
.version(crate_version!())
|
||||||
.author(crate_authors!())
|
.author(crate_authors!())
|
||||||
.about(APP_ABOUT.as_ref())
|
.about(APP_ABOUT.as_str())
|
||||||
.after_help("This application is not affiliated with Firefox or Mozilla.")
|
.after_help("This application is not affiliated with Firefox or Mozilla.")
|
||||||
.global_setting(AppSettings::GlobalVersion)
|
.global_setting(AppSettings::GlobalVersion)
|
||||||
.global_setting(AppSettings::VersionlessSubcommands)
|
.global_setting(AppSettings::VersionlessSubcommands)
|
||||||
|
|
|
@ -8,7 +8,7 @@ use ffsend_api::{
|
||||||
url::Url,
|
url::Url,
|
||||||
};
|
};
|
||||||
use toml::{de::Error as DeError, ser::Error as SerError};
|
use toml::{de::Error as DeError, ser::Error as SerError};
|
||||||
use version_compare::{CompOp, VersionCompare};
|
use version_compare::Cmp;
|
||||||
|
|
||||||
use crate::util::{print_error, print_warning};
|
use crate::util::{print_error, print_warning};
|
||||||
|
|
||||||
|
@ -62,9 +62,9 @@ impl History {
|
||||||
// Get the version number from the file
|
// Get the version number from the file
|
||||||
let version = history.version.as_ref().unwrap();
|
let version = history.version.as_ref().unwrap();
|
||||||
|
|
||||||
if let Ok(true) = VersionCompare::compare_to(version, VERSION_MIN, &CompOp::Lt) {
|
if let Ok(true) = version_compare::compare_to(version, VERSION_MIN, Cmp::Lt) {
|
||||||
print_warning("history file version is too old, ignoring");
|
print_warning("history file version is too old, ignoring");
|
||||||
} else if let Ok(true) = VersionCompare::compare_to(version, VERSION_MAX, &CompOp::Gt) {
|
} else if let Ok(true) = version_compare::compare_to(version, VERSION_MAX, Cmp::Gt) {
|
||||||
print_warning("history file has an unknown version, ignoring");
|
print_warning("history file has an unknown version, ignoring");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue