Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

PastFile is a straightforward file-sharing service that allows users to upload and share files through either the command line or a web interface.

License

NotificationsYou must be signed in to change notification settings

robatipoor/pf

Repository files navigation

The service provides a convenient and efficient way to share files. The code includes the server API and CLI client tool, encompassing everything you need to create your own instance.

LicenseLines Of CodeFormat checkBuild CheckTestClippy CheckDocker ImageCodecov

Feature highlights

  • Basic Authentication
  • File Expiration
  • Burn After Reading
  • Large File Support
  • QR code Generator
  • Command Line Interface
  • ChaCha20-Poly1305 Encryption
  • Built-in TLS Server
  • Flexible Length URL

Run API Service Locally

# Clone the project$ git clone https://github.com/robatipoor/pf# Build the project$ cargo build --bin pf-api --release# Run the backend on address 127.0.0.1:8080$ ./target/release/pf-api --settings api/settings/base.toml# Alternatively, Run backend with cargo$ cargo run --bin pf-api

Run API Service via Docker

# Pull the image from the github registry and run container$ docker run --name pf-api --rm -p 8080:8080 -d ghcr.io/robatipoor/pf-api:latest# Alternatively, build your own Docker image.$ docker build -t pf-api:latest -f api/Dockerfile.# Run Docker container on address localhost:8080$ docker run --name pf-api --rm -p 8080:8080 -d pf-api:latest

How to Use

# Open it in the default browser.$ open http://127.0.0.1:8080# Ping the server.$ curl -X GET http://127.0.0.1:8080/healthz# Upload a file and retrieve the corresponding download URL.$ curl -s -F"file=@{file_name}" 127.0.0.1:8080/upload| jq -r'.url'# Download a file.$ curl -o {file_name} http://127.0.0.1:8080/{code}/{file_name}# Upload a file with basic authentication.$ curl -u username:password -F"file=@{file_name}" 127.0.0.1:8080/upload# Download a file with basic authentication.$ curl -o {file_name} -u username:password http://127.0.0.1:8080/{code}/{file_name}# Upload a file and then display the QR code.$ curl -s -F"file=@{file_name}" 127.0.0.1:8080/upload\?qr_code_format=text \| jq -r'.qr_code'| base64 -d;echo# Upload a file with an expiration time of 100 seconds (default value specified in settings file).$ curl -F"file=@{file_name}" 127.0.0.1:8080/upload\?expire_secs=100# Upload a file with a restriction on the number of downloads.$ curl -F"file=@{file_name}" 127.0.0.1:8080/upload\?max_download=10# Upload a file and specify the minimum code length in the URL path as 5 (default value specified in settings file).$ curl -F"file=@{file_name}" 127.0.0.1:8080/upload\?code_length=5# Upload a file and prevent manual deletion until expiration.$ curl -F"file=@{file_name}" 127.0.0.1:8080/upload\?allow_manual_deletion=false# Get metadata for a file.$ curl -X GET http://127.0.0.1:8080/info/{code}/{file_name}# Delete a file.$ curl -X DELETE http://127.0.0.1:8080/{code}/{file_name}

API settings

# api/settings/base.toml# Maximum upload size in bytesmax_upload_bytes_size =1_000_000_000# 1GB# Default code length in the url pathdefault_code_length =3# Default expiration time in secondsdefault_expire_secs =7200# Allow manual deletion of files.allow_manual_deletion =true# Server configuration section[server]# Communication protocol (e.g., "http" or "https")schema ="http"# Host IP address for the serverhost ="127.0.0.1"# Port number for the serverport =8080# Domain name URLdomain_name ="localhost:8080"# Public IP addresspublic_addr ="192.168.1.1:8080"# TLS key file pathfile_tls_key_path ="key.pem"# TLS certificate file pathfile_tls_cert_path ="cert.pem"# File system configuration section[fs]# Base directory for file system operationsbase_dir ="tmp/fs"# Database configuration section[db]# Path directory to the database filepath_dir ="tmp/db"

Override settings with environment variables

export PF__SERVER__PORT=8080export PF__SERVER__HOST=127.0.0.1

PastFile Command Line Interface

# Install CLI tool$ cargo install --path cli# Define an alias in the shell profile for 'pf' with server address$alias pf="pf-cli --server-addr http://localhost:8080"# Copy text content to the server with an expiration time of 10 minutes.$echo'Hello World!'| pf copy --expire"10 minute"# Paste text content into the file.$ pf paste --url-path"{code}/{file_name}"> my_file.txt# Encrypt and upload a file and retrieve the corresponding download URL.$ pf upload --source-file~/example-file.txt --key-nonce"{key}:{nonce}" --progress-bar# Download and decrypt a file.$ pf download --destination~/example-dir/ --url-path"{code}/{file_name}" --key-nonce"{key}:{nonce}"# Upload a file and then display the QR code.$ pf upload --source-file~/example-file.txt --output qr-code# Get metadata for a file.$ pf info --url-path"{code}/{file_name}"# Delete a file.$ pf delete --url-path"{code}/{file_name}"

Run tests

# Execute all test projects.$ ./test

Check code formatting and typo at commit time

$ cp ./scripts/git-hooks/* ./.git/hooks/

License

Licensed under either of

Contributing

Contributors are welcome, please fork and send pull requests! If you find a bugor have any ideas on how to improve this project please submit an issue.

SeeCONTRIBUTING.md.

About

PastFile is a straightforward file-sharing service that allows users to upload and share files through either the command line or a web interface.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

 
 
 

Languages


[8]ページ先頭

©2009-2025 Movatter.jp