1
0
Fork
You've already forked gowoof
0
Go implementation of woof (Web Offer One File)
  • Go 100%
2025年07月30日 00:53:04 +02:00
.gitignore first commit 2025年07月05日 15:11:16 +02:00
AGENT.md Add support for OPTIONS and HEAD requests 2025年07月30日 00:36:18 +02:00
go.mod first commit 2025年07月05日 15:11:16 +02:00
go.sum first commit 2025年07月05日 15:11:16 +02:00
gowoof.go Add support for downloading file 2025年07月30日 00:53:04 +02:00
gowoof_test.go Add support for downloading file 2025年07月30日 00:53:04 +02:00
LICENSE first commit 2025年07月05日 15:11:16 +02:00
README.md Add support for downloading file 2025年07月30日 00:53:04 +02:00

Simply exchange files with GOWOOF

GoWoof is a Go rewrite of Simon Budig's original woof application. I love woof but wanted a one binary version that does not require other dependencies, such as Python. GoWoof aims to be commandline compatible with woof and also support the same INI structured configuration file.

Just as with woof the goal is to allow simple peer to peer exchange of files without the need to run a daemon process.

GoWoof was mostly vibecoded using Sourcegraph Amp as a attempt to learn how agentic coding works. In total I spend most of the 10ドル provided by Sourcegraph Amp as a part of the trail.

GoWoof assumes that everybody has a web-browser or a commandline web-client installed. GoWoof is a small simple stupid webserver that can easily be invoked on a single file. Your partner can access the file with tools he trusts (e.g. wget). No need to enter passwords on keyboards where you don't know about keyboard sniffers, no need to start a huge lot of infrastructure, just do a

 $ gowoof filename

and tell the recipient the URL gowoof spits out. When he got that file, gowoof will quit and everything is done.

And when someone wants to send you a file, gowoof has a switch to offer itself, so he can get gowoof and offer a file to you.

Usage

GoWoof is a single binary with no dependencies.

 Usage: gowoof [-i <ip_addr>] [-p <port>] [-c <count>] <file>
 gowoof [-i <ip_addr>] [-p <port>] [-c <count>] [-z|-j|-Z|-u] <dir>
 gowoof [-i <ip_addr>] [-p <port>] [-c <count>] -s
 gowoof [-i <ip_addr>] [-p <port>] [-c <count>] -U
 
 gowoof <url>
 Serves a single file <count> times via http on port <port> on IP
 address <ip_addr>.
 When a directory is specified, an tar archive gets served. By default
 it is gzip compressed. You can specify -z for gzip compression, 
 -j for bzip2 compression, -Z for ZIP compression or -u for no compression.
 You can configure your default compression method in the configuration 
 file described below.
 When -s is specified instead of a filename, woof distributes itself.
 When -U is specified, woof provides an upload form, allowing file uploads.
 
 defaults: count = 1, port = 8080
 Note: OPTIONS and HEAD requests do not count towards the download/upload
 limit. Only actual GET requests (for file downloads) and POST requests 
 (for file uploads) are counted.
 If started with an url as an argument, gowoof acts as a client,
 downloading the file and saving it in the current directory.
 You can specify different defaults in two locations: /etc/woofrc
 and ~/.woofrc can be INI-style config files containing the default
 port and the default count. The file in the home directory takes
 precedence. The compression methods are "off", "gz", "bz2" or "zip".
 Sample file:
 [main]
 port = 8008
 count = 2
 ip = 127.0.0.1
 compressed = gz