diff --git a/README.md b/README.md index 2b4d818..598a28e 100644 --- a/README.md +++ b/README.md @@ -44,13 +44,13 @@ This is a self-contained notepad webserver that makes sharing easy and _fast_. T
-**Coding**. There is CodeMirror support for many languages. Just use an extension for your document and then you'll be able to edit/view your code in a simple and easy way. +**Syntax highlighting**. There is CodeMirror support for many languages. Just use an extension (e.g. .py, .md, .txt, .js, ...) for your document and then you'll be able to edit/view your code in a simple and easy way. -![Security and encryption baked in.](NEED GIF) +![Coding syntax is provided if you use an extension](NEED GIF)
-**CLI tools**. Want to upload/download from the command line? Its super easy. Upload/download files like this: +**CLI tools**. Want to upload/download from the command line? Its super easy. Upload/download files using `curl` with a simple command: ```bash $ echo "Hello, world!" > hi.txt $ curl -L --upload-file hi.txt cowyo.com @@ -58,7 +58,7 @@ $ curl -L --upload-file hi.txt cowyo.com $ curl -L cowyo.com/test.txt Hello, world! ``` -or just skip the file-creation step and let cowyo figure out a name for you: +or just skip the file-creation step and let `cowyo` figure out a name for you: ```bash $ echo "Wow, so easy" | curl -L --upload-file "-" cowyo.com File uploaded to http://cowyo.com/CautiousCommonLoon @@ -67,13 +67,7 @@ $ curl -L cowyo.com/CautiousCommonLoon ```
-**Content Delivery**. Want to write some CSS/JS that you want to load somewhere? No problem. Just use the extension `/raw` with optional versioning (e.g. `/raw?version=1`). So you if you make a javascript file, `cowyo.com/myscript.js`, then you can include your script using: -```html - - -``` - -
+**Content Delivery**. Want use a script on your own domain? Just use the extension `/raw` with optional versioning (e.g. `/raw?version=1`). `cowyo` will serve these files with a wildcard Access-Control-Allow-Origin so they will work anywhere. Check out a live example [on this JSFiddle](https://jsfiddle.net/g87w7kt0/). **Keyboard Shortcuts**. Quickly transition between Edit/View/List by using `Ctl+Shift+E` to Edit, `Ctl+Shift+Z` to View, and `Ctl+Shift+L` to Listify. @@ -85,80 +79,24 @@ $ curl -L cowyo.com/CautiousCommonLoon # Install -First [install Go](https://golang.org/doc/install). Then continue. - -## To access locally... - -Then, if you want to host on your local network just do: +If you haven't done so, first [install Go](https://golang.org/doc/install). ``` -git clone https://github.com/schollz/cowyo.git -cd cowyo -make -./cowyo -p :8001 LOCALIPADDRESS +$ git clone https://github.com/schollz/cowyo.git +$ cd cowyo +$ go get ./... +$ go build +$ ./cowyo +-------------------------- +cowyo (version Y) is up and running on http://SOMEADDRESS:8003 +Admin key: VRSgtuVpkrwtWrfphsooOYeErzdbVHHqecMcqcbkLFNFNPwakH +-------------------------- ``` -and then goto the address `http://LOCALIPADDRESS:8001/` - -## To access from anywhere... - -For this you need to forward port 80 and [get a DNS for your external address](https://www.duckdns.org/). I recommend using `NGINX` as middleware, as it will do caching of the static files for you. - -```bash -sudo apt-get install nginx -``` - -There is an example `NGINX` block in `install/`. If you want to use SSL instead, follow the instructions in `letsencrypt/README.md`. To automatically install, on Raspberry Pi / Ubuntu / Debian system use: - -``` -git clone https://github.com/schollz/cowyo.git -cd cowyo -nano Makefile <--- EDIT this Makefile to include YOUR EXTERNAL ADDRESS -make && sudo make install -``` - -Now the program starts and stops with - -``` -sudo /etc/init.d/cowyo start|stop|restart -``` - -Edit your crontab (`sudo crontab -e`) to start on boot: - -``` -@reboot /etc/init.d/cowyo start -``` - -# Usage - -``` -$ cowyo --help -cowyo: A Websocket Wiki and Kind Of A List Application -run this to start the server and then visit localhost at the port you specify -(see parameters). -Example: 'cowyo localhost' -Example: 'cowyo -p :8080 localhost:8080' -Example: 'cowyo -db /var/lib/cowyo/db.bolt localhost:8003' -Example: 'cowyo -p :8080 -crt ssl/server.crt -key ssl/server.key localhost:8080' -Options: - -a string - key to access admin priveleges (default no admin priveleges) - -crt string - location of ssl crt - -db string - location of database file (default "/home/mu/cowyo/data.db") - -httptest.serve string - if non-empty, httptest.NewServer serves on this address and blocks - -key string - location of ssl key - -p string - port to bind (default ":8003") -``` - -If you set the admin flag, `-a` you can access a list of all the current files by going to `/ls/WhateverYouSetTheFlagTo`. +Now open your browser to `http://SOMEADDRESS:8003` to see your cowyo! For more information type `./cowyo --help`. # Contact -If you'd like help, go ahead and clone and send a pull request. If you find a bug, please submit [an issue](https://github.com/schollz/cowyo/issues). Any other comments, questions or anything at all, just tweet me @zack_118 +If you'd like help or you find a bug, please submit [an issue](https://github.com/schollz/cowyo/issues). Any other comments, questions or anything at all, just tweet me @zack_118 # Contributors Thanks to [tscholl2](https://github.com/tscholl2) and [sjsafranek](https://github.com/sjsafranek). diff --git a/main.go b/main.go index 6663546..31fcd09 100644 --- a/main.go +++ b/main.go @@ -35,6 +35,10 @@ var RuntimeArgs struct { } var VersionNum string +func init() { + gin.SetMode(gin.ReleaseMode) +} + func main() { VersionNum = "0.95" // _, executableFile, _, _ := runtime.Caller(0) // get full path of this file @@ -42,20 +46,25 @@ func main() { databaseFile := path.Join(cwd, "data.db") flag.StringVar(&RuntimeArgs.Port, "p", ":8003", "port to bind") flag.StringVar(&RuntimeArgs.DatabaseLocation, "db", databaseFile, "location of database file") - flag.StringVar(&RuntimeArgs.AdminKey, "a", RandStringBytesMaskImprSrc(50), "key to access admin priveleges") - flag.StringVar(&RuntimeArgs.ServerCRT, "crt", "", "location of ssl crt") - flag.StringVar(&RuntimeArgs.ServerKey, "key", "", "location of ssl key") + flag.StringVar(&RuntimeArgs.AdminKey, "a", "", "key to access admin priveleges") + flag.StringVar(&RuntimeArgs.ServerCRT, "crt", "", "location of SSL certificate") + flag.StringVar(&RuntimeArgs.ServerKey, "key", "", "location of SSL key") flag.StringVar(&RuntimeArgs.WikiName, "w", "cowyo", "custom name for wiki") - flag.BoolVar(&RuntimeArgs.ForceWss, "e", false, "force encrypted sockets") + flag.BoolVar(&RuntimeArgs.ForceWss, "e", false, "force encrypted sockets (use if using Caddy auto HTTPS)") dumpDataset := flag.Bool("dump", false, "flag to dump all data to 'dump' directory") flag.CommandLine.Usage = func() { - fmt.Println(`cowyo (version ` + VersionNum + `): A Websocket Wiki and Kind Of A List Application -run this to start the server and then visit localhost at the port you specify -(see parameters). + fmt.Println(`cowyo (version ` + VersionNum + `) + +Usage: cowyo [options] [address] + +If address is not provided then cowyo +will determine the best internal IP address. + +Example: 'cowyo' Example: 'cowyo yourserver.com' Example: 'cowyo -p :8080 localhost:8080' -Example: 'cowyo -db /var/lib/cowyo/db.bolt localhost:8003' Example: 'cowyo -p :8080 -crt ssl/server.crt -key ssl/server.key localhost:8080' + Options:`) flag.CommandLine.PrintDefaults() } @@ -73,6 +82,9 @@ Options:`) } RuntimeArgs.SourcePath = cwd + if len(RuntimeArgs.AdminKey) == 0 { + RuntimeArgs.AdminKey = RandStringBytesMaskImprSrc(50) + } // create programdata bucket Open(RuntimeArgs.DatabaseLocation)