1
0
mirror of https://github.com/schollz/cowyo.git synced 2023-08-10 21:13:00 +03:00
Go to file
2016-03-29 12:48:07 -04:00
install Removed ~ 2016-03-19 11:32:18 -04:00
letsencrypt Removed ~ 2016-03-19 11:32:31 -04:00
static New route /raw to use as CDN 2016-03-29 12:09:38 -04:00
templates Added current version number information (really lazily) 2016-03-29 12:30:31 -04:00
.gitattributes Create .gitattributes 2016-03-15 20:51:09 -04:00
.gitignore Initial commit 2016-02-06 08:28:40 -05:00
db.go Added current version number information (really lazily) 2016-03-29 12:30:31 -04:00
encryption.go Added encryption/decryption 2016-03-14 09:42:19 -04:00
LICENSE Initial commit 2016-02-06 08:28:40 -05:00
main.go CLI support! You can use curl (only curl at the moment) to 2016-03-28 20:19:13 -04:00
makeBinaries.py makeBinaries added 2016-03-15 08:56:35 -04:00
Makefile Updated and renamed 2016-03-19 11:31:47 -04:00
ratelimiter.go Removed extraneous fmt. 2016-03-28 20:21:06 -04:00
README.md Updated readme, added release 2016-03-29 12:48:07 -04:00
RELEASE.md Updated readme, added release 2016-03-29 12:48:07 -04:00
routes.go Added current version number information (really lazily) 2016-03-29 12:30:31 -04:00
utils.go Improved robots, added sitemap. Locking is simpler now and allows direct click to edit. 2016-03-18 08:39:41 -04:00
websockets.go Updated 2016-02-10 18:37:30 -05:00

Logo

cowyo.com

Version 0.95 Go Report Card Join the chat at https://gitter.im/schollz/cowyo

This is a self-contained notepad webserver that makes sharing easy and fast. The most important feature here is simplicity. There are many other features as well including versioning, page locking, self-destructing messages, encryption, math support, and listifying. Read on to learn more about the features.

Features

Simplicity. The philosophy here is to just type. To jot a note, simply load the page at / and just start typing. No need to press edit, the browser will already be focused on the text. No need to press save - it will automatically save when you stop writing. The URL at / will redirect to an easy-to-remember name that you can use to reload the page at anytime, anywhere. But, you can also use any URL you want, e.g. /AnythingYouWant. All pages can be rendered into HTML by adding /view. For example, the page /AnythingYouWant is rendered at /AnythingYouWant/view. You can write in HTML or Markdown for page rendering. To quickly link to /view pages, just use [[AnythingYouWant]].

Simply type to edit.


Listifying. If you are writing a list and you want to tick off things really easily, just add /list. For example, after editing /grocery, goto /grocery/list. In this page, whatever you click on will be struck through and moved to the end. This is helpful if you write a grocery list and then want to easily delete things from it.

Lists are easy to make.


Page locking. Pages can be locked by providing a password to prevent further editing. The whole version tree will still be available. Note: This is not available for list mode.

Locking is easy.


Automatic versioning. All previous versions of all notes are stored and can be accessed by adding ?version=X onto /view or /edit. If you are on the /view or /edit pages the menu below will show the most substantial changes in the history. Note, only the current version can be edited (no branching allowed, yet).

Versioning is easy.


Self-destructing messages. You can write a message that will delete itself when a user loads it (in any view). Useful for transmitting sensitive information. To use, simply add a line somewhere that says only "self-destruct".

Mission impossible style self-destruction.


Security. HTTPS support is provided and everything is sanitized to prevent XSS attacks. Though all URLs are publicly accessible, you are free to obfuscate your website by using an obscure/random address (read: the site is still publicly accessible, just hard to find!). In addition to TLS support, you can PGP-encrypt your messages using a passphrase (Note: This will delete the version tree).

Security and encryption baked in.


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.

![Security and encryption baked in.](NEED GIF)


CLI tools. Want to upload/download from the command line? Its super easy. Upload/download files like this:

$ echo "Hello, world!" > hi.txt
$ curl -L --upload-file hi.txt cowyo.com
  File uploaded to http://cowyo.com/hi.txt
$ curl -L cowyo.com/test.txt
  Hello, world!

or just skip the file-creation step and let cowyo figure out a name for you:

$ echo "Wow, so easy" | curl -L --upload-file "-" cowyo.com
  File uploaded to http://cowyo.com/CautiousCommonLoon
$ curl -L cowyo.com/CautiousCommonLoon
  Wow, so easy

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:

<script src="https://cowyo.com/myscript.js/raw"></script>
<link rel="stylesheet" href="https://cowyo.com/mystyle.css/raw">

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.

Admin controls. The Admin can view/delete all the documents by setting the -a YourAdminKey when starting the program. Then the admin has access to the /ls/YourAdminKey to view and delete any of the pages.

Math support. Math is supported with Katex using $\frac{1}{2}$ for inline equations and $$\frac{1}{2}$$ for regular equations.

Install

First install Go. Then continue.

To access locally...

Then, if you want to host on your local network just do:

git clone https://github.com/schollz/cowyo.git
cd cowyo
make
./cowyo -p :8001 LOCALIPADDRESS

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. I recommend using NGINX as middleware, as it will do caching of the static files for you.

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.

Contact

If you'd like help, go ahead and clone and send a pull request. If you find a bug, please submit an issue. Any other comments, questions or anything at all, just tweet me @zack_118

Contributors

Thanks to tscholl2 and sjsafranek.

Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY

File uploading from transfer.sh (licensed by MIT).