1
0
mirror of https://github.com/schollz/cowyo.git synced 2023-08-10 21:13:00 +03:00

168 Commits

Author SHA1 Message Date
Zack Scholl
8d3a301497 Version bump
Former-commit-id: 3dcfacd49a
2017-03-24 08:05:17 -06:00
Zack Scholl
a3e1d6f6d1 Update README
Former-commit-id: 8c24712323
2017-03-24 08:00:21 -06:00
Zack Scholl
8318b5afd8 Add new bindata
Former-commit-id: e5b0471593
2017-03-24 07:58:55 -06:00
Zack Scholl
82b16ec121 Add route /ls for viewing directory
Former-commit-id: 53ace40488
2017-03-24 07:58:37 -06:00
Zack Scholl
8e6b798be5 Clean code
Former-commit-id: 446c9cf2b4
2017-03-24 07:24:36 -06:00
Zack Scholl
57cda99027 Benchmark for alliterative animal
Former-commit-id: b489e299fe
2017-03-24 07:18:20 -06:00
Zack Scholl
e8959d8923 Require random names to be smaller
Former-commit-id: ec99ac305c
2017-03-24 07:14:34 -06:00
Zack Scholl
9d9918966a History every 60 seconds instead of 1
Former-commit-id: 931a0a7c62
2017-03-24 07:12:09 -06:00
Zack Scholl
05f43196c5 Updated bindata
Former-commit-id: ed458d05d6
2017-03-24 07:10:31 -06:00
Zack Scholl
c35ab4eb4a Improve history UI and non-history route speed
Former-commit-id: 30f3956568
2017-03-24 07:09:41 -06:00
Zack Scholl
5fab2749f9 Add reverse list
Former-commit-id: f45b4f86ca
2017-03-24 06:25:59 -06:00
Zack
da2dcee3fd Version links to latest release
Former-commit-id: 7b096e6013
2017-03-23 21:16:18 -06:00
Zack Scholl
e11baae47c Updated README
Former-commit-id: ce166d8e56
2017-03-23 20:44:01 -06:00
Zack Scholl
035cd7b6d9 Change name
Former-commit-id: b0308589ec
2017-03-23 20:38:33 -06:00
Zack Scholl
7b1ce17506 Show page on menu
Former-commit-id: 3f109f7160
2017-03-23 20:23:06 -06:00
Zack Scholl
14f563572d Print server version on startup
Former-commit-id: 4717d5d066
2017-03-23 20:13:58 -06:00
Zack
5d273c037a Update .travis.yml
Former-commit-id: 25d99852c0
2017-03-23 19:30:24 -06:00
Zack Scholl
dbd1be938e Merge branch 'master' of github.com:schollz/cowyo
Former-commit-id: 25c30e4be6
2017-03-23 19:27:12 -06:00
Zack Scholl
3f98cb7e70 Updated README
Former-commit-id: 3114a70286
2017-03-23 19:26:35 -06:00
Zack
f09cf1b3e9 Update .travis.yml
Former-commit-id: 79c2a1dcbc
2017-03-23 19:26:10 -06:00
Zack Scholl
c9b9032dc9 Updated logo and README
Former-commit-id: 96eb431dfe
2017-03-23 19:23:33 -06:00
Zack
674b39b49a Create .travis.yml
Former-commit-id: b11c754b8e
2017-03-23 19:18:23 -06:00
Zack Scholl
e066ad23cc Allow raw to get locked copy
Former-commit-id: 685117ffd3
2017-03-23 17:47:41 -06:00
Zack Scholl
11b671423c -> Clear done
Former-commit-id: 3f70a86d65
2017-03-23 17:42:20 -06:00
Zack Scholl
82c24f2413 Remove static files that aren't used anymore
Former-commit-id: 1495b6d836c5ba5c1b87bb778bfb85b3073d9fd2 [formerly 438b5d6af9c80b85d036f1ccce5b593a33934dbf] [formerly 331f1f8bd4a19a0639c35e96298bc834fef406a2 [formerly f391d9132ccd146acea91387a2520bec8349c151]]
Former-commit-id: 19c3b9ec3bbe4056e8c4e99f1576d6fd30a27b16 [formerly 7929749a5807f4d866bd7fd4301aa4305b70d7d8]
Former-commit-id: 658645d15e6e200d1e4123eafde15d6bf5efe2cc
Former-commit-id: e182fbbe64
2017-03-23 16:38:29 -06:00
Zack Scholl
fa7ae60d59 Better UI for locking/encrypting
Former-commit-id: a4d999be67331667d085f4d21e76c36248d4de6d [formerly e0ea851e54280d1299e3c8285412b3df421682a7] [formerly 011d5bf0194d46ee5e2f07cb6ef16a28554235b5 [formerly 17f856fdde59ddf045a116cb85af6f7b79f9d4a5]]
Former-commit-id: b8a3b6ed199e3c06aeb6f365e4b05572a28bd852 [formerly 1998dce4d8b98ccd1586748b26d32935c9b3d78d]
Former-commit-id: 81aa00298e9fe22a5017c726b772a4a34dd53acf
Former-commit-id: c71c77fd5c
2017-03-23 16:28:19 -06:00
Zack Scholl
20dd8d4f20 Fix: filenames to lower case before base32
Former-commit-id: 75492d2819399d026bac979cdfdc9ca3b6cf1466 [formerly e32fd7161849a8e11d2b31f27deb04378f9dcbb4] [formerly da830c5c0d0b73548699f6a6341eb55f5afa130f [formerly 7a780609f7276ff3569323beb61cb12088e17447]]
Former-commit-id: a9a517909321225859867f0b031b8303d35102ae [formerly 59d8c184f6f6359f811b1413b259a01aaee93854]
Former-commit-id: f31efaed6d2b7175ea50f8205ae2fae034163518
Former-commit-id: fc6a38f047
2017-03-23 16:24:25 -06:00
Zack Scholl
bd3b9c96e1 Clean up UI
Former-commit-id: 15a1200308fe75f9c3163d400ff3c56287492dfb [formerly 79f3f90c3d0e620372f1ad338252a988135b302e] [formerly 3d62c398b3487e92160d35a200c08134fcf4eb32 [formerly 52370dde7adf6c4fe9899544567a2469c03b031a]]
Former-commit-id: bbe42ca94a0e072215e5fef3f163add591206ab2 [formerly df5785bc10f23dab6110d38900a55946d95f0fce]
Former-commit-id: 4c02db90005227a23605f2a46d6546ab3f698a99
Former-commit-id: a456b44b5a
2017-03-23 16:16:15 -06:00
Zack Scholl
a78468e086 Makefile works in parallel
Former-commit-id: 0e8b4a8544a37d5ba70b5105972af6f682121fe2 [formerly b27e6f754cf6267f4d9b24e4e16d719b1b58ac3a] [formerly 643edb8efb9bb54ffe343f6d8e09d70277ba8880 [formerly d064c67547da6da2f97431f2962dd6a6f81cb8ce]]
Former-commit-id: de0f0fadefb349b5fef99655c574515dde046c44 [formerly 471f13c019582eff335fef36b8602308e9bfd06d]
Former-commit-id: db630b02ebee07b2f95eff560f6ff0e74152413e
Former-commit-id: ebfdb06f25
2017-03-23 14:37:47 -06:00
Zack Scholl
97bfc15692 Remove goreleaser
Former-commit-id: 4917070ce632a6cedf0b5b3c4a2cf45aa4bbb271 [formerly 98fa8a9d297a2786d332f22ac77eb53e43b43f0c] [formerly f0bbeb242e7615e4784f3898b97b7555e134868b [formerly d1dc4804ad9e5a7e57e9f112c9bd7ab98564ae4f]]
Former-commit-id: de57b86dde4c6d5bde9eb211a6755966a95d64ee [formerly 395bc843211b4c46410c62f9525f9e43527e8dfd]
Former-commit-id: 04e6b16e8658bb4caeee788651bfad6da0e4e36c
Former-commit-id: f1abfbe858
2017-03-23 14:18:58 -06:00
Zack Scholl
61b8d275be Update goreleaser
Former-commit-id: 30888d69957a68dd8a3fe025bb90a671135c011a [formerly 64906e29fda1a6da209155a2572cecd3cd4ab639] [formerly d6d932dab5bd2bdb4e7a78b0229fc21c29dd76af [formerly a9b194fe32d668683d3099286d5079773fdff3e6]]
Former-commit-id: d8684df40761e41ba6a08e5caf025ee652bd7d8c [formerly f4827b3cfd5a561865df53ce8246e8c412c0a202]
Former-commit-id: dca71837f3bffdab7c9374a47536a16e72eb2013
Former-commit-id: 752902466e
2017-03-23 14:15:30 -06:00
Zack Scholl
3b7e35f9ef Add "Clear old" for deleting crossed list items
Former-commit-id: f43b6caae264ef5f8cd46f8a40143501a39d5948 [formerly 328a9724705837f8287a6d519578513fb868c962] [formerly b006fff403bdf2421495a4d4e8f9ef246e15adec [formerly fb4118be424a81a90072ad987c886af08923917a]]
Former-commit-id: da4974f66bfcea8602d9b08f129b73ba06d69ea8 [formerly 8215c6a461f8bd2a9baee02176e64ec99a401ec9]
Former-commit-id: 4e070f07eef46a9f140a778dca7dc6c20adc76d5
Former-commit-id: 2980f1e193
2017-03-23 13:31:09 -06:00
Zack Scholl
bbf55f539f Use monospace when editing a file
Files are determined if they have a period in the name.


Former-commit-id: 8ae103ccf40f20a2c0a385021fad70caf614ca51 [formerly 23e44beb2ececa617280feb256a94900342cbdc4] [formerly 4872f2c5eaa25e32514c01aabd63355e6cb1d5d4 [formerly 518ee34f5615b9c9a6e3b5b68322df2c8a221ae8]]
Former-commit-id: c646c3b38b5cf7d2552f9aac8d1802ef98e9170b [formerly 71bb4f2d64a0c87f9b881e612091ec98253721fa]
Former-commit-id: a60d4c8180b584dea243391a7a41abc175524afb
Former-commit-id: 5f42c319a2
2017-03-23 13:13:56 -06:00
Zack Scholl
28d70b6148 New: release with goreleaser
Former-commit-id: 0714de93b3df45312d65ed61340b066515d10bae [formerly 23a3da72fd9edd64da8b30b0ead05ca4c440c709] [formerly 01d2da8eb8e0b9e5fba12ed5cc92e50c29aa9be6 [formerly 838f599daae4e00ea0f2bace01ddd8521f28a157]]
Former-commit-id: 73bb360a0b18b0ad1b626b5a29a6e2e188b91257 [formerly 104088fcf4e6880a40436c7ff309747baea2640e]
Former-commit-id: ffbc185e61ad872f99713d15289fc07b14bbaf80
Former-commit-id: b69ddc7cdb
2017-03-23 11:59:55 -06:00
Zack Scholl
3b0169212c Update bin
Former-commit-id: 8383f8425cd42c2ccf34e992019a7c84c033e0c9 [formerly 0aed9dbed69ff4e95429f8638101252a0f962776] [formerly a25974ec2c0f768eab091fb2c64de4138834a110 [formerly 1a3fa54b60fd2a38cdc6833e2d48fcf5f2793046]]
Former-commit-id: 185dddc3245f701da416c1437d3bb59fa7d57e55 [formerly c4ea403af36b85707ebf2f30d22edde4e77d6e06]
Former-commit-id: ab8139e0438e552531a7f86e1116d40cda905752
Former-commit-id: caa85d22af
2017-03-23 10:57:31 -06:00
Zack Scholl
90faae9e85 Add link for view/raw/list
Former-commit-id: 288ff9cd595b174372f32c928082cea7d7983fe3 [formerly c40384353290006486b9c7f9c94f07f7b0378a6c] [formerly c79385490b081fa4878526f946dc6861b428829d [formerly c4906b78767ae66904d8dd1e3ee53351797d20ad]]
Former-commit-id: 9691087d6cf38d30829d0b9d5e9af9e2469607d1 [formerly 781213c951e51a1d3fe61421b0526329e84d4eb8]
Former-commit-id: f933ace45d149daed95cb00b19abf4f1f418ec87
Former-commit-id: 41666f1238
2017-03-23 10:57:14 -06:00
Zack Scholl
e9e513171c Create special folder for tests
Former-commit-id: ae51c6c248baaf996f899e77e760aba1f0c161cf [formerly 7bf4f38602dd6b24f7888d88f18ca6e9cac9b9a3] [formerly 0ef00a42149f4e7724fde45c2a252e9ec7c550f5 [formerly d20e40ca85e6a06d0aba698624e3433e7c5c612a]]
Former-commit-id: 69b97c02f08943de02a1ae58c8291dcae6c56db8 [formerly d229497f2b2159c144939054ad21f57ce380c47e]
Former-commit-id: 3951a8763debafee5f9ddf812fd022c9b5ce2d10
Former-commit-id: 4a1c502ee3
2017-03-23 10:56:53 -06:00
Zack Scholl
bd6ed8d3c0 Keep messaging system alive when locked/encrypted
Former-commit-id: becceb5fed276d2daa80eca4a41b9fa9d3eae9fd [formerly 4ac3d85f084df155b06e17eea289e34ea60faa50] [formerly 19561726e85e6c133c667d1ee948b0ff2978632d [formerly a3fe621f1947a2cf0b6af4ac6ccb01c3c744fc2e]]
Former-commit-id: 3b7092e62e255f90d4ddcea9a104f5e6db22da2e [formerly 0dd41c8f221df6a21fad9da2ff2287ebb98f3b9a]
Former-commit-id: 62a685d81f08d7b96596cbc236c540141cdd9e42
Former-commit-id: 4b75f66381
2017-03-23 10:39:14 -06:00
Zack Scholl
c1b9b71669 Remove menu options when locking/encrypting
Former-commit-id: 9020d91d5e3f4ab07cc5ec8e5abfc68d7f30cc05 [formerly c501c57e329676731abd211e6f26619806db2bc6] [formerly 8c7c7f37bb87845da3af2e1a40ccf5bf73852846 [formerly 13d370370f4f68203998d8eee7ebacec61a6a2a6]]
Former-commit-id: da6da64e8940ef34512f9abc8ed5480a9d132a64 [formerly 6902d14822e41218409d23c5e8669afa370e1fb9]
Former-commit-id: a02186b53b69eff7a51d8cb61e9af0470113e7df
Former-commit-id: 078801ce85
2017-03-23 10:26:40 -06:00
Zack
edcd2e7d09 Merge pull request #61 from schollz/frontend
Update frontend for locking page

Former-commit-id: 6c657ff4a43f33cb040185d259c03e793676f332 [formerly 72b937774f347af8f114d919bcc260c1c441ced7] [formerly 9429791652dc3e9a3e44d866dc346a45225e5560 [formerly c5fa54646d56b3eaebfef06aff2821b1839a39cc]]
Former-commit-id: 182ba5b59c9852b46a80f7215a7113a640e11ef7 [formerly 4a66a0a6bce4d892bcef1eb00d074ddcd025b425]
Former-commit-id: e6fdc1362ec4b3d22195a9c7b2874010dfda4a36
Former-commit-id: 695b838991
2017-03-23 10:03:45 -06:00
Zack Scholl
3fd886e625 Update frontend for locking page
Former-commit-id: e7a41b6d0ef9fc0814b4f6fa378370a2dc94749b [formerly 54b793d738e5deb2ebf2e8316a1f43e3450900aa] [formerly 842e120f0f69713229f4227bd90f8c33ce2932b3 [formerly 9c95fd350104dd20055c7564fc5e167e21409c38 [formerly b9860a5d2f]]]
Former-commit-id: 3d6c223179053689aa785e50ba1a6d7affd075aa [formerly 61ab106b098ea088e70597cb1a5a19e3a71eced9]
Former-commit-id: ab5ef985f31336a09d0a6d9dd7291967ea4da3f0
Former-commit-id: a7f6cd8a0e
2017-03-23 09:57:25 -06:00
Zack Scholl
4709654c4c Version bump
Former-commit-id: 9e36c6e26026b6da693e9c63665a359bd8f81132 [formerly 90d2930802e405e495c9d4f115fc96607240fa8d] [formerly 384133006e5622b83245917ca698c6678728be97 [formerly dcf6fd4e981e1eec2f77ba5e3de39ee40253d73f [formerly 59036904d8]]]
Former-commit-id: 73ead65f17e5bc8e72002d3db704f31e66d4bf37 [formerly 123a60c023445bb54818026f4ea8bd8683c4846a]
Former-commit-id: 8637b59aaedf6f665c581a630f8e076c2e38b735
Former-commit-id: ef0414a548
2017-03-23 07:55:36 -06:00
Zack Scholl
cc04599b6f Update bindata on Makefile
Former-commit-id: eb5f6d3dcc38157ddff43ab777962555c20d2b16 [formerly 4d02759fbb3a7f208a178c0cd797437300b9feb0] [formerly d68e70cde8da577d49b4ec1116c7948e792d80c0 [formerly 98d57a49c87b73fd59680fda968e16b2a4a94296 [formerly 8f76fbecf4]]]
Former-commit-id: 75cf27c8d4bb198da60f59548a3ed846c8529c7d [formerly e05a48d24612a7bd8994e7c51d68ee2ca46e8736]
Former-commit-id: 530053a77d420a205f65fd9ead96b656b523b766
Former-commit-id: 72b285671b
2017-03-23 07:40:47 -06:00
Zack Scholl
d247846934 Add ARM to makefile
Former-commit-id: a4ad6c9c132f48b5f679f973a0c80db923765156 [formerly 0635361632881f2e831e3ecea20134df27838d9e] [formerly 2d91ad2c4766984722e88d20275d0105218b1145 [formerly 2549aac8215b9213a2f8c7b9387f3081a5c1bc04 [formerly 2a2570835d]]]
Former-commit-id: d5459ec2b879c7b5ea69361643fdc6e1a5857114 [formerly 63abe22d8706168f9a7f035f53585d7d58b654f3]
Former-commit-id: 2326e71c3063d2bbee54839dadd8c57484a90835
Former-commit-id: cf04407182
2017-03-23 07:33:46 -06:00
Zack Scholl
79768ce9be Updated bindata
Former-commit-id: b54ce6344bd46fc6f82ff1e4fb676dc425d99680 [formerly 0fa45573d6b17c6e1566e7a1ab7f56f437759625] [formerly 9fe8f5b04b0f415c74ee52f171f1378c2834d7b5 [formerly 3c86cbfc68d699bf79fe05d513d0a0e0aa00ed7c [formerly 6440472b2d]]]
Former-commit-id: 4f471e841a3022e0dc3999b4ff450b82870859e5 [formerly 05232e825e9c05340760432ac53a29661d596380]
Former-commit-id: 3f607ad0c09546f775fed460ebcde58dfa3afa23
Former-commit-id: 88bfd0a1f7
2017-03-23 07:33:13 -06:00
Zack Scholl
a16fd6f8fb Show error message if route not understood
Former-commit-id: a8f0c8962f4bfc694d883a6c6162dac512dce40d [formerly a1a3744bd736baaf6af702e1635089a29a87ac8a] [formerly bd72fb7c08e2efda8ab97fc7d8a57b0d50ef43d2 [formerly c1b05ff1b8a28f4067785b8b2d0e8e68b325d0db [formerly 4193da80fc]]]
Former-commit-id: 8686c6cfb26ca2542efe1aeca186093320c12228 [formerly 6ffcbe6472aa192fd8f59faace2c87fd08225b3d]
Former-commit-id: e726d4a1d3b075389f1a652198b45c2c7ce8ab5a
Former-commit-id: 526a97affb
2017-03-23 07:33:00 -06:00
Zack Scholl
62c9e6ee1b Simplify routes, handle error route
Former-commit-id: a2be41df36132865f1f5ddee954a2c36cd15946a [formerly 952889d5fec4f3207cfd3a071bcf7278afeb09a8] [formerly 21c56db9a4a329ff6e70573734bbe7a33ee8b0a0 [formerly 8f4f07ce580467b241015b8b6291d7bce91bf66e [formerly 9becf07745]]]
Former-commit-id: 1ad7a875ff4738230e09a4d46bf58c7d03c43a90 [formerly 5263a10dd6b8057bcfa7ac65509c7a87d5889175]
Former-commit-id: 57c32446567ef6b8d219893ed93c6499cf0b0da8
Former-commit-id: 95afa389bc
2017-03-23 07:32:40 -06:00
Zack Scholl
3a265a0979 Update GetMajorSnapshots API
Former-commit-id: eafad64cf835e69fa4994dd2173287eb68a49975 [formerly 7c91b825f33c0deea8a4b26419c3395fe1d9ff69] [formerly 4fdb4a30274e2028f13bf89b37b678a208118b58 [formerly 6e7d202e7b38b8a6d14f7824971b3acd28807906 [formerly 3a29cc5adf]]]
Former-commit-id: f131365c5c22dc159510a1c837dd26e8c8b9e06f [formerly 10b24d4adb33a566fb1e1e76d19d5af677d7ad38]
Former-commit-id: 1b0096a9d5b26ea2f6492394e7b7cbee944e1fa1
Former-commit-id: 3781c6457e
2017-03-23 07:22:14 -06:00
Zack Scholl
39ebd6c125 Get major versions instead of all
Former-commit-id: 5cdd8a3b23c05604fa82d5ba3319ec8caf402313 [formerly d0acfb7a8b73c1549cb8a3814583dbacd0833b27] [formerly 60213b204673cd65c02b6945df1883ca0f348aa7 [formerly c2c93edebbabde3fd2ec773cc4fdf6ad0fba868c [formerly 80610690ea]]]
Former-commit-id: f783c78d0353eec3003fbe3fab6854a4ef5e761a [formerly 69e182e4f7a83e76eaa52d3a494760e715fe4abc]
Former-commit-id: d1c6e0fcf474c14ab15a5148fdd4531462ce6702
Former-commit-id: 3886f3d00e
2017-03-23 07:17:44 -06:00
Zack Scholl
bd85204eff Bump version in Makefile
Former-commit-id: 456a4137adadb4044e720f04ac8ec6ab7b3d80d6 [formerly 12de613c2e4c46aca255f15f04e9b2819e51f2a0] [formerly 64bc5f9527ec3babaeade20a5601cf43a6b239a4 [formerly 3168d427d4b6f85a2caedae527a2f78a13988db3 [formerly c8e237c3c5]]]
Former-commit-id: 70bc9dc28a3c99506768567cb4f2eb1a9479c393 [formerly 687f78214d9de740f9e4492cd2d383bcbd0da2c4]
Former-commit-id: dad5e45520f127757318cc867f2013492aeb3501
Former-commit-id: 7b0bfea196
2017-03-22 21:43:47 -06:00
Zack Scholl
322294b2ac Normalize filenames when writing
Former-commit-id: 84c13ae6f2f058709c59c3bc3cd3bce41cfc580c [formerly d0200cc718af544ea6d809207ee496b9234d76cb] [formerly 31012f0ebf56f4e7fd142b658aaa32645f743a72 [formerly 7d92efd3cd8ce550304eda03518515f57b99a376 [formerly a3d1b822e4]]]
Former-commit-id: ca2c13ab6848c86deb1a7b432e564c21c29e1007 [formerly af1fd98d479fac25cef74f522d2467f9ee582132]
Former-commit-id: e47d01d1ef3f59d7b4acaef5d74965d4e2e40adb
Former-commit-id: 0136d5d640
2017-03-22 21:22:26 -06:00
Zack Scholl
1686409cf7 Update README
Former-commit-id: 63039d0d361bb3af1243938b34024e3c7fb62c79 [formerly b833b75dccaf7b5c43945dc0e46eb0dbf9b747c5] [formerly 873059f5bca74f3d134969ffd8dd1f1abc17d058 [formerly aea5747e7a2eff250dc8d565b12e4c82fbfc61d7 [formerly f2b317be8b]]]
Former-commit-id: aa7719891c68c0e3c9432ad2053d3e3154768899 [formerly 8e005b32f106cd9870e771591310c40d89be56eb]
Former-commit-id: 8d01eea63586af137fbef2013331de8a915ce261
Former-commit-id: 192cb9f0bc
2017-03-22 21:11:20 -06:00
Zack Scholl
0109a94cbb Add logo
Former-commit-id: afb41ca8dd353e4ed932a958b4f734c74dd5b927 [formerly 5c23e3e9a78afcb30517cf5cb18c0063fb343cd6] [formerly 5a098bcf34598737f50ad25676b8f3869cd0a27c [formerly 2c14b97b390ec8a77eaad49f237d4ba0f2b7d433 [formerly 25c01cf1f6]]]
Former-commit-id: 71a7802cffe269f17d79a761ef6ecd9af696bc16 [formerly 2becefe0ced4277410e8a39d093a140387f9319c]
Former-commit-id: 52505e15a9f264a75166d9a66f8a5445bde7dd7e
Former-commit-id: 3221ee0cae
2017-03-22 21:09:32 -06:00
Zack Scholl
17bf3c3a4c Updated README
Former-commit-id: 4550d3d46e3fd08d1f62ff42b3c74a029e3ba7e3 [formerly 57b84131f2a4d6f2dbdd878f5af4da442e4995be] [formerly e893072497705cc6311192fa763fbc5353292bb3 [formerly 0b785d77b5362bcec7fba5281447850e5484b09e [formerly 405bc46958]]]
Former-commit-id: 83fa42e2070637493214e282c6de4cda688b850f [formerly a0149f30c14d82e1123f23587241a3e34843822a]
Former-commit-id: 373c765a77beb16837994661ecd613ecdc84190e
Former-commit-id: 9e7641df3c
2017-03-22 21:06:14 -06:00
Zack Scholl
cbede33317 Merge branch 'v2-master'
Former-commit-id: 18ae04b11d6cbb3927d58732515fc1db6959708f [formerly 7d140d3d7ca7225021516cd778f4b00a2f16eae6] [formerly fd6b7171287b7a55d486cf6ee4b014736c4cdaf0 [formerly 646c41cc7eb60cf2139b7e29562b20f951168bb4 [formerly 1c7524cc45]]]
Former-commit-id: 8146d635fb76f7d156a198877c4a3cd2f76334cf [formerly e541056fe056ca9cbf07fb2008ced91524f0ef6d]
Former-commit-id: b4f71c483d27fad2e8869e77149ca8b682baa085
Former-commit-id: 5540875d62
2017-03-22 20:56:47 -06:00
Zack Scholl
dbeea86d6a Start again from scratch
Former-commit-id: 02983a8b61d9fd5ff30de4967c9741ad2478a023 [formerly d55b11ab31697ca40d2d0d80f7261df3c76fc812] [formerly 5d236ead7feece2b73db56d195bdcbcc7623b081 [formerly 4433a9a3b172c82a283df36a601e6c5e581c8ff6 [formerly 52abf02847]]]
Former-commit-id: 1176ee8d4cbb8d093ba3b08046c7e93f6c0d835b [formerly f7a072e5000efd8e1b58cfb04336ae8687519d3a]
Former-commit-id: 8441f7eff180268e16a037abd2de7e07c1104926
Former-commit-id: 2640e02b72
2017-03-22 20:49:55 -06:00
Zack Scholl
accc3b5f62 Version bump
Former-commit-id: ae819a9a760577d7fe156251b19ef671373b9d6b [formerly 8147fb5032726aea60e5c6ea526fa0cd574acd4c] [formerly 24ed3c1b03a257c9340165acc7bbd2f0059d5b25 [formerly d1a85cfb9914f63ce12ab588d3ea1a26b74fdd72 [formerly c0d87c752c]]]
Former-commit-id: 9d45d4e7c0836884455676d485d4edd65903133c [formerly ef1d4c3c2115a88766b7c2f4aeb580126272c1e3]
Former-commit-id: ffc2a7c8c1148e78896d893a7697ea292f7176ac
Former-commit-id: 0ebb3ace3b
2017-03-22 20:41:38 -06:00
Zack Scholl
12d447ed74 Add makefile
Former-commit-id: dc66526762f6a8392e48838cad1460411c3fa643 [formerly 6fa00115b96b91eafdd2f7884c6bacac6b0368e4] [formerly f0e9be4c45c1367f6229e86653357dc5a47739f8 [formerly be99f99ab97119871abfbe954e612f534ad35b27 [formerly 37bf947b79]]]
Former-commit-id: 612c65f57f037d23df33578b7ff392d800183647 [formerly e26be98ff430eaa0af46147f554d2139884fa959]
Former-commit-id: 5320bdd630a3e5617f9c8e9db57263571599370c
Former-commit-id: 4f95637831
2017-03-22 17:13:19 -06:00
Zack Scholl
328e177b66 Changed app info
Former-commit-id: 468ca3f8f493737ea4f465b093a962f11ac374e3 [formerly db359ec78a0866482d3a98e476efd11e0b7a8422] [formerly 8186e0d7d6821753ae8f1c262020cd585d80e1e0 [formerly 11e4bb08b4fc047ad7a54f3e4f244eedf11c322e [formerly 0a3184b190]]]
Former-commit-id: d07891eab39c576e217b40d1207f6b9744be90e9 [formerly cefd9ba438e2643405475933f8dbe230fb7c40bd]
Former-commit-id: e117bd79abdfebe744ac26e6e12213770eaabb03
Former-commit-id: fd4b52cc05
2017-03-22 15:35:02 -06:00
Zack Scholl
38e0943df3 Bundle highlight assets
Former-commit-id: 4fc809225b291daaf71a41995c2b90f69192eb0e [formerly 6dd44249c158fce63dd521132b68ef2cd815c18f] [formerly 15f3d5fd2ed3887836ed3b561ee0919d3f032ee0 [formerly 94f0785d6f8eb46c486e5443363b3fed3da09d21 [formerly 0a14010081]]]
Former-commit-id: 14495f0654f9805c4fa83e7b721a08f820691a9e [formerly 84f8793320fbb21899b5812e4ef8d034515657f6]
Former-commit-id: 46c14a9f9c38194689716813bc3ae0c6a942a9f6
Former-commit-id: 1de1ceb05d
2017-03-22 14:29:53 -06:00
Zack Scholl
c66c312fdb Remove serve subcommand
Former-commit-id: d043e461b53d8525268889380e6d307bf1e91ffe [formerly 7148459fedf6847393039077ed1b61c3ad65392f] [formerly f32e700c6e421f094b2c7047fc277050e66d3c70 [formerly 1f6e70028a87b587f42ddd6dd3a240d60cd1e46c [formerly 375979fc19]]]
Former-commit-id: 690c8ae68f8f3f18dd5726d9f30557b251238c71 [formerly 07fe4a8721cd13e277cbb25cd743b1f8ff4c0e82]
Former-commit-id: 2d0761bcb0e6f3b856fb962155b8292e92a231da
Former-commit-id: 15debdf177
2017-03-22 14:14:47 -06:00
Zack Scholl
c3ba228288 Prevent locking encrypted
Former-commit-id: e986e1b8094f80c479c7f97bdefdcc216ba17ef4 [formerly e4eb6b192ca3af6951acb574d56f2ddd003d6d16] [formerly 142979758915d24210fbc4085270e49611047d59 [formerly fe0c2a45dc56e5b55f5c83f6586f4470a2fa6b1f [formerly 59af266a12]]]
Former-commit-id: f218c28663c6d35b1f9fddb4e618e9cf9f3d12d2 [formerly f665f59e08d5b84845baab64c27fd6a45d3d1dd9]
Former-commit-id: 9877bf4627091886f47a176b88373375e2dbe942
Former-commit-id: 1998538fe1
2017-03-22 13:42:51 -06:00
Zack Scholl
3a463449fb Prevent encrypting locked pages
Former-commit-id: 0154b3bbfe05a6a1520971a9e7019f50d2099005 [formerly 51ddb6c687c5e659293898765b6b1d3e023bcae4] [formerly d1032b8324e9d7433a4ee806c49cac43d32012a3 [formerly 66faab1fbd0b245475d19eb40bcf443d20b8ae73 [formerly 41cdfda98a]]]
Former-commit-id: 21cc2358168803e11bd33ea20b60d7c86907cd17 [formerly 054bae1e71259eaf0a9866cbf33cc5214120c1d1]
Former-commit-id: 2d7d6714588efd33381b80c3f4f2bf2e77b306c7
Former-commit-id: 590538d8ef
2017-03-22 13:37:59 -06:00
Zack Scholl
bca008f315 No case
Former-commit-id: eb4cb02a7cde861255c9b425619ea8bf3d2f90a1 [formerly d603bd8d9e765a82d954b48586357b7593bd873b] [formerly 7ed56a670228947c7b180a7aeba1353a5f74b7c8 [formerly 5c9b621bb564be87a11d35a268d152476e4048d8 [formerly b6a9c44bce]]]
Former-commit-id: ffa105847b5eeb409bd471f6fc2065d3ca0c14e4 [formerly e6c16a7b3c8b4d8371fc09f7c374d90af16b7bc1]
Former-commit-id: 6b70c68d2f8ac7b11dd0631b1133f3c8b16841e9
Former-commit-id: fe8022d128
2017-03-22 13:31:33 -06:00
Zack Scholl
6347038563 Cowyo works as a single binary now
Former-commit-id: e3c11510f61564a5f8c6a53d9d9bd768c5fa0f17 [formerly 8c3e635c3cfd2f00acbe4fe4c89b5c9921c3a4ba] [formerly ed287ec86da7ff501a972dcb68f9a0045dcb3798 [formerly b2ea068629093bbeebca0be37f463701117a5d1b [formerly 3f3ee6c9fa]]]
Former-commit-id: 049fac69946d4e4a7866d28afa0999bac8457840 [formerly 4451a7e8d278d70f1547f4ade77df8f9ef76b0d3]
Former-commit-id: 3a8a4d9ab222d9d23ebf6981e0553a28a123a08f
Former-commit-id: 70616e9d31
2017-03-22 13:19:00 -06:00
Zack Scholl
a203fcc32f Updated bindata
Former-commit-id: 39ad7cb6efbc76619f97934e37c5d95637d23e7f [formerly 38969bebc88d6fbf80a34b6b1c9d9faac6da84f8] [formerly f02d3546dea518e0c0a840dec8e57c4d4ed65dbd [formerly c124a03557453d9ca36c5298373a3267023eeba6 [formerly 2c687f79ca]]]
Former-commit-id: a6e13ec4ec75cf12468677bafbf850e70c67d335 [formerly fdc16f327c1cdf53e66c2e4773c0db92123c785c]
Former-commit-id: cae020f1e5645f62fb59bcc90b24f0712e72edd6
Former-commit-id: 1a670ce298
2017-03-22 13:04:38 -06:00
Zack Scholl
538fa425b0 Delete bloat
Former-commit-id: 366d6d4299f6b873937fbf4eb539e1837f053b3d [formerly aed4d69ccca3351ff0a6ad7e1a8459b2f9644041] [formerly 7a2d10add93e5f62b7cab38f4f6af8c2b30465ff [formerly 09e03f0ade3c55240981e9627669baecd82a3d1a [formerly a6da2b4a4d]]]
Former-commit-id: 8cc271f57f0b37196c6542bd3f4a6efe3170c2ba [formerly e1e606dcb6126e9048c2c5fa5185c65b8ea755a8]
Former-commit-id: 1f9fc804c56de040f946cd7506825e191e8aeba1
Former-commit-id: 5a3007d014
2017-03-22 13:03:00 -06:00
Zack Scholl
b4fecbfaa2 Add favicon, modify UI
Former-commit-id: 4dfac83c7384a0b61ee78c78f6e0263e5b2876b2 [formerly 9225888ef11e9920685918183afbcf76695a38aa] [formerly 62debde9de7916cc55f4f1aec0b690ecc6ddd70d [formerly 3192c8484b]]
Former-commit-id: fdd39f686cf3609ffe182d7d47d27033fbe13f85 [formerly fbf52ab1f9c8c215c9b7148c001ea0db02fc0cd3]
Former-commit-id: 4ee6195397465f0ad7b45609afdb9105719e1aa5
2017-03-22 11:34:06 -06:00
Zack Scholl
fb5ee8d09e List works
Former-commit-id: d123891bd72ab552a24bbccfd614270de340dac5 [formerly ce7c2d1b9dbdcaf5ef2d665e647833f065c18246] [formerly fc2e4872180a9f264e57e348e2ec4e5896781e74 [formerly 67d5d2f882]]
Former-commit-id: 1d9e245d81cab6cfe197bc52b516154c7429421b [formerly 1f22520a0e2509d0a509a592d1fed50002eccebc]
Former-commit-id: b60b97411ea8c9b54b26b8058aeda0f1f0466b64
2017-03-22 11:19:39 -06:00
Zack Scholl
522c4c6283 Allow [[link]] for internal links
Former-commit-id: aefb0d00cd7f493ec8706d890eec1eb1510b7092 [formerly 400d9b4158b49fdd6b6910f772f02fc4f82fd2f6] [formerly 99230db788cdfac4fe4fa7e1266fbe77a54f60bf [formerly 420f56843f]]
Former-commit-id: d780226ab14e3b022d497021ddc66c7d2e1be423 [formerly 6c38cf48fc1889ddef0dd1f9b7c36f0ed6525907]
Former-commit-id: 82e848729b0ea8b8deb5a310847490f5f22ad114
2017-03-22 10:59:48 -06:00
Zack Scholl
f42c0f411b Fit to mobile
Former-commit-id: 25818ef30bed76dc22b9e4ae477054f92c3d73ce [formerly e29a9f2666465ed0ba660e68a1aa52b74fcd0a19] [formerly 15a78d243212e9b4339c3d7074551b5990b761a7 [formerly cf0a8a7f30]]
Former-commit-id: 2952e3a0822a96c7dae375860c5adf11790d4ae6 [formerly 38224960971c35a288044c3fcd3478d6591306f7]
Former-commit-id: ad16df82d5572dbdabe0c95d6af2dc17e703f040
2017-03-22 08:50:45 -06:00
Zack Scholl
59284f2601 Fit to mobile
Former-commit-id: 01f88e62753d2a19d6a2c03fba76c26b473febfe [formerly 1810a3f470c9a4c1f1acb34dbef4092eebe15a54] [formerly 44cf7ff6313f92bc328107415b7d00ac9254e811 [formerly 515a27a9c6]]
Former-commit-id: b8c6bd7f1d3e1fcfd45bb1e2bec72be73f8ca3e2 [formerly 078e1d9356457cb6a057f73e09cb8c6e568fb808]
Former-commit-id: 6b65bc325a1cefa633c663acfc2deb90e9e3e93b
2017-03-22 08:49:51 -06:00
Zack Scholl
d46fe9cb6a New: Flag for port
Former-commit-id: 2d0a3148379cc650552887358558b05b8efd2545 [formerly b5bbb0e6df504588c406ffea0b7f68ff18b34ff9] [formerly 1cded1417754d12f2ea94246e1e22bc8a7c8631a [formerly d3e04ef2ed]]
Former-commit-id: be9e181ffd0c1d00666928618237f709760f8f72 [formerly f6f73dc9e043e6b96b190cbfe9011c3e1c7b83a3]
Former-commit-id: 1a016d36925db45aac5786e552ae7c9f7ccde722
2017-03-22 08:26:34 -06:00
Zack Scholl
64b3fdb0d4 Add raw
Former-commit-id: 4789ed45d9449fea9db6c01c171736d1c20044a2 [formerly 62d03a41e8978454b14e4ff156e5e4cbc6de6149] [formerly f68618c11a4e02f37b14215352a305d5ee9fb65c [formerly 29460a6c26]]
Former-commit-id: d108a21904309b99e95b1d485f48234f78865d0f [formerly b22903c4191a97d021858fb6bb26ca57b09bd571]
Former-commit-id: 4ad94bd008e7cc3532a68f472cfac29e133e7572
2017-03-22 08:21:49 -06:00
Zack Scholl
6031590d87 Show version dates
Former-commit-id: 222b35b37979d677f127aeb9734673f1cac8bfcd [formerly 40e7b691637165d97c9333f8f2f046f38682da7d] [formerly c88082dc6c55be884fb7c6a1c8129e185458cb0c [formerly dfa18bca5a]]
Former-commit-id: 89f8aa21a6e6d1a3ea492104917e96c9d149281b [formerly b51759ae32f00d306eb2b6b17eeeaf2f91a9de3b]
Former-commit-id: 4a57c6e7a79986b9bf55e8a2e2b2ac446a1f8b45
2017-03-22 08:16:16 -06:00
Zack Scholl
4d3385b3f1 Add highlighting
Former-commit-id: 7acb465444aca4f69527137829d652faf6abe671 [formerly ae84e91bd4f267daac6bb60d597a63bdaaedd586] [formerly 7c7022dc26ed2b999f217cb797c71a822e578cf5 [formerly 59c4a95e4d]]
Former-commit-id: 20d0ec0cb14f3b5fc873fc135e8584b5c2c5dbac [formerly 87039afd37157771fa11e4d249c52ce74fb3cfd8]
Former-commit-id: d28f7d56aca2547cf61b3cb51a5422d9555d1c07
2017-03-22 08:09:19 -06:00
Zack Scholl
3ba5537c1e Make sure is not encrypted before performing self destruct
Former-commit-id: e0e540845dd56b55a7f88cddab6f75293318784c [formerly 6304d826ec6c5d7ce7f5c1dc6e821f0ba3488c30] [formerly 50ff4ab9306b5a0f2371699ece8b0baa6e49672f [formerly ff49e21ecc]]
Former-commit-id: 7212147366f26318f0ce4363edbc977fd688da8e [formerly c8604e60d2eae61659622a1b0424cbe6e74bb927]
Former-commit-id: 3fb6fd7b4e514fcd5e9a9867efd3dcd6819cb893
2017-03-22 08:09:09 -06:00
Zack Scholl
8a7803250f Reorganize and add migration
Former-commit-id: 807d525f11b5306c2a4a2e7097a8d92d026fc9df [formerly 9c40fcf478e90dd062c9a173b4d563a4ba15b8bc] [formerly 0c56b23e0782fe14717c243d149983185fe9ad2d [formerly 7f4acdda9a]]
Former-commit-id: 71ae3d9712ec1b7203e6483ad586aeef319fba08 [formerly e633558e9a7491044e324ceeb2cb699b2130f1c8]
Former-commit-id: 8e483f94bf5c75d62d00219085d1e68c4e5683c7
2017-03-21 21:51:52 -06:00
Zack Scholl
97edbd73a8 Fix: Bug with decryption
Former-commit-id: 7fcbc62027b94ec7203cd3bc176db254a5ea4ed6 [formerly 141ae1267e555901984e9b170eafe924189f1d1e] [formerly 7361c4f5dd2331ec3dd9f86326ae43daa0f66afc [formerly 6012c92c96]]
Former-commit-id: 6d89689ca47ca7a1e7b3d1a3dbbee40c055c527d [formerly 6a9175f0309bf4727ed1f5bab0e428fa6652894c]
Former-commit-id: 4210e389bed5bdc229818dce1f1af023c7803ad7
2017-03-21 21:10:41 -06:00
Zack Scholl
79422d1fb3 Add static files, encryption
Former-commit-id: 80a53c01301cf96c28a22e1018efac2ceca7a381 [formerly af1c7ae599f506fcceebc85f87cc345e76329da3] [formerly 1bf3deab458c0e1f376da2296b03ac4fe8fcf8e9 [formerly 5a923ae11a]]
Former-commit-id: e826a5ffd431d22f8c37ac51f1be2193de1c270f [formerly 1deadc5e9c4fc7ff98b48bba18be31b773b8bde7]
Former-commit-id: 7fc964bb4c9d007010b1bb52665818212c0a2a8c
2017-03-21 21:06:35 -06:00
Zack Scholl
0be3c91823 Add static and template
Former-commit-id: 46c13d0c36c98e1c4cd7a0548c561dc70c0952ea [formerly 4a56a0bbffd2bb5b437c2c4e7497da0cd42dc306] [formerly c6e51179179dad88c1014b07d13e83f759ad6b6c [formerly 21cd7d092c]]
Former-commit-id: e17744bea8af56671b35709b358bea7d4c9aaff5 [formerly 40b9fe4727f897ee471af9ffce8cd7780f22a612]
Former-commit-id: 0d2322553b3a177f74d4110044e1f801391daaeb
2017-03-21 20:46:24 -06:00
Zack Scholl
04f1cc87e9 Things are working 2017-03-21 20:46:05 -06:00
Zack
706e4e6fdf Initial commit 2017-03-21 17:52:25 -06:00
Zack Scholl
5e1ac31d13 Updated packages, new fixed Bolt version
Former-commit-id: da2423082a10392910bbafcd7683c1c93d7aa556 [formerly 708ea8f31cde627a1b64a5a49c80b5faf571740e] [formerly f127dbccd73fbba2526cb7763c1fafccc926596c [formerly c8f595b2715bfd2ab8a3ad046d05f79e7b632694 [formerly 4558c48cdf]]]
Former-commit-id: c9d4a6c430c6c5f731e755f270bdf66f89eaa646 [formerly 291db3593d93e63d7234d85f49773ec34c867f1e]
Former-commit-id: d1a21b94fe3760e037c7c02a56ca933123a8cae7
Former-commit-id: 9ad5907b48
2017-02-02 14:32:55 -05:00
Zack Scholl
7d878a18b4 Updated readme to use Godep building
Former-commit-id: 592808cb7fd58931cf9bfd1cac398896490cec5a [formerly 53e317b59452a97d355244515316b4ccb3fc9ae4] [formerly 61b7bb6ec4c0186bd49b0117cf5b6f5881bb28c2 [formerly 8c02a9041f0311c4bf6c577756be07ccf8c3e101 [formerly fe7e8b345d]]]
Former-commit-id: 0782b12f11ee3aedc6a26fbd7e15740fa973dd90 [formerly 5707c85187052f77e396c5d5ad289f05ce11c090]
Former-commit-id: ac9d937aa04dd29ad21e93324036a41e046aafb9
Former-commit-id: 25e76fb242
2017-01-31 08:07:20 -05:00
Zack Scholl
95401434a2 Now vendored, with Bolt v1.2.0
Former-commit-id: 900e1a398fd82aa1cea4f319e89b8088dd81cf6c [formerly f172c22b12c49c0291e0d986dc4af94fcc91d192] [formerly 43c5da81442a5f0ca79a6eabb1dfdfbfb3f22680 [formerly 7a39ef2b52fc10e7c980d377dbd52f5340e4e53a [formerly 2694d0b183]]]
Former-commit-id: fa39d6a984adc4ca8f8c82c5df145c336885a53f [formerly 94543f8081bc18b1a39daf8500cfa7e0b1ba7393]
Former-commit-id: 809aae62e28a3f99a01854f71fcd5a85f89d2972
Former-commit-id: e8a4d30139
2017-01-31 08:05:27 -05:00
Zack
074b776984 Create keystore.js
Former-commit-id: 6e57c4fa824b56c208f0910bd462b7145b3a201d [formerly 6750759dea61eb28bc5cca842d5fb3659fd9795b] [formerly 69062d21361147bfc05d329f26e4ba5167a59565 [formerly 83dfac9923a9ce6869b5b62f34d5282927480cdf [formerly 169e4b41c9]]]
Former-commit-id: fed116cda64134c4b76f2665f283d08176697b1c [formerly 8654e5a8f910d7f5135572eab42c48511e62f38f]
Former-commit-id: 136a617fe456bdea15c6d4173f6abd9bc4bba819
Former-commit-id: ad4ed37898
2016-12-13 06:59:04 -08:00
Zack
4ac089780e Create keystore.go
Former-commit-id: bc371d744dca228255db92d05fa764fbaa157eb2 [formerly ed45c432823c880548e99b37f400a103dc4f91e8] [formerly dcb0bd1f93260429a86ed8abf1ef8f835b0680e7 [formerly 691e6cc496fe41a0699bba697ed6bcf617463a9b [formerly 12ca452230]]]
Former-commit-id: 00e79655127e4308e6f7665486f95a3c417e0025 [formerly 40bfa8fd615cf56c8890120d1f5bc92b40d2e6c9]
Former-commit-id: c47dfb60b3cffe45224be010e30328eb2330277b
Former-commit-id: 239341ee87
2016-12-13 06:58:42 -08:00
Zack Scholl
d0791f3b2e Remove access control
Former-commit-id: bec2c180ee17800de01a6a082d74fd9968e2b55c [formerly bb4d29806f89b26fb1413ec2e68f48f8cb2983f7] [formerly 86c852521132a70a2e83a1e1622b7844bdba20d6 [formerly 157ebfda79bebfa11483d85b9de18ab6d67505c9 [formerly 1432660990]]]
Former-commit-id: 3e2642f169712c3c4e8d18ade497bf7c2a107ea9 [formerly 929f8679ffddd6bb609b11bec10f3dd024ea6349]
Former-commit-id: 84a0347714c097f0b5ecba0541259be456183678
Former-commit-id: a7066dd68c
2016-12-12 19:58:18 -08:00
Zack Scholl
18d002abf4 Fix check origin
Former-commit-id: cceac08c2cb9abce1811910b1477880d10fc5f5f [formerly b221fde742c33a95464a32cd41e3b71449d0c065] [formerly eb4538558611ffa502486fd47cc71ddae32eae7a [formerly fea438080efb3ec93c3c3dd0b9511c6fa10b50b0 [formerly 483d698f3a]]]
Former-commit-id: a2c0d11edc96c26595566c80991a7dfd4e67bfc8 [formerly 3f8e10a9d26fad1a127e59ca94bcc3fb35aad5a0]
Former-commit-id: 8d19a2d69896d55a31d57563c9a323feb34f70ab
Former-commit-id: 7d5af5dd2e
2016-12-12 19:57:33 -08:00
Zack Scholl
4276e4bec3 Added access control header *
Former-commit-id: a426e27bcbc533a15c2a2b0459ed799fadc2a787 [formerly 800b5f52810f6ef875f96c754cb42185a50badc0] [formerly 01b72cb3f3ae23f101d6a6d8273b9b426ce0b7da [formerly 2cf48e3280c86a89c8a9d95b68ee8c727772bf23 [formerly 8c406982f3]]]
Former-commit-id: 95422abadd277c5c5b06257ff15ea35b1fc46740 [formerly 3a2861c4f90c1aa0794840f44af0a1c1a6ecfb49]
Former-commit-id: 7cce559cf40c44ea3695eba5ec9f8c8a2ef4376a
Former-commit-id: bbb33c1f72
2016-12-12 19:55:36 -08:00
Zack Scholl
eca269696f Version bump
Former-commit-id: 1c7bddbee39bcb5b3f44434bcc42b8ac7d1e2eb3 [formerly ec9df5ad73eb3385eb6b0d95b3146e3cc700790c] [formerly fb6f9fbd11856ab8621aa0f8371e3bdf4d63b08e [formerly 0d491e56bd7048276d6fe42e31552b8d20748fd2 [formerly bacee6570d]]]
Former-commit-id: 277132a108412adedd039bbd966e0473655148ff [formerly 5d0a4a9ae1818b9c3e63c4e12b4ba4d7bad88636]
Former-commit-id: c43d882672237b733b47e08f418d33d95c887763
Former-commit-id: 46b3b7b5a0
2016-09-10 07:59:02 -04:00
Zack Scholl
a3a881b65e Passwords stored as hashes instead of on the server
Former-commit-id: 8e42d0aad6b21a4378f2881c80a25786aaec3fca [formerly 1a169ed9ce9372babf129ee16e782cd5a7ebf960] [formerly 23767ee90357ba8a46cf2bcb24f43dabc951dbc7 [formerly 58d10f965428d7898ecae9af9788f34a1ddcab88 [formerly ccfe66e973]]]
Former-commit-id: 2f1dcbda58dec1ff16dd783711ea8401932d1e37 [formerly 6420a2b52256cfec0edf10b478f99483b49b76bb]
Former-commit-id: 7b8c830459c262958272bcb5c9661f7d5a57a86d
Former-commit-id: c7e37649d2
2016-09-10 07:45:36 -04:00
Zack Scholl
09b09f3dbc Fix #57
Former-commit-id: 8a967397a0af8dedcc36f56bb9adca904f77705f [formerly 84097c863b5c0b6036fb4d4757b0b56bdbd41192] [formerly adc17b2404fa552efaebf485f6f30a412ae90f9a [formerly a43305f34b1c5a4a1f29b198604d2dbe1b127bab [formerly 87e5439854]]]
Former-commit-id: bd94b8dacfc04010499567541d5313dae6dc89fa [formerly 874671aa7538960f6ac236a11f4fdff8d2d3a994]
Former-commit-id: 517229eb395c1cda4d125ad2014240112d9fff64
Former-commit-id: 0a4549d3a7
2016-09-10 07:06:20 -04:00
Zack
dba80e26c7 Update README.md
Former-commit-id: 5b8f052dfa442d6c3324bf2bd8e6449cc94c72ac [formerly e6e9c01f402b0793cb57196cd5476a5c7cc195d8] [formerly 0e8afff061cb9d24ac9e06ab221d7ccee4425b60 [formerly debc9dc6e445d426e00cc83a5032ba5eb7852d1e [formerly 4d089ec756]]]
Former-commit-id: 6188a590130df95a855d4e74b47321d239687777 [formerly 6ec294629d6aadc188afd6c305c869e7d54c5896]
Former-commit-id: a99ce73839437542d757a8dbc49d1b95867cf141
Former-commit-id: a25a71e7a2
2016-09-09 16:04:17 -04:00
Zack
7d6cb4910c Update README.md
Former-commit-id: 70eb72785e899e76d32d6733e13d30b003bc5b17 [formerly 68465e3068258198cca447a9fc9c67944ec46bed] [formerly ebbf68ccfe679552a22832fb934e6c0d9a7a8199 [formerly 10cd4b19e27044d732583e60286849ef287d5a57 [formerly 634a321c86]]]
Former-commit-id: fdea4332e61fb3f8839c1a6e9ce5ad8378df10bc [formerly 2e072f20a513f8fadbd273cb74e6541a4962018d]
Former-commit-id: 768fc47c985046b25c750a84da7b8634a995a795
Former-commit-id: a9e89d5230
2016-09-09 15:56:28 -04:00
Zack Scholl
6b5a4d0061 Version bump
Former-commit-id: adc295b095c0b963911c3d0fe63c8a933f34eb29 [formerly 5cc558bafca350ee0870aa796733fa6668add6d3] [formerly 95debc30dbbc8e8b0fec10747964d510d3b3448c [formerly 2ce675e894305b541297ab637c8186bceb2b1396 [formerly f2bc22e8d8]]]
Former-commit-id: a2c396414437d207a7b547d7e15761dd2723d63f [formerly cce67f77ec106ab31fc100c3aadd7db0a64b8063]
Former-commit-id: 1b2f1389b2ff3e63b934966d1f67bc5ef0689f47
Former-commit-id: d5f3ae1b5f
2016-09-09 15:43:19 -04:00
Zack Scholl
629a2a026a Added debug mode, Fix #55
Former-commit-id: f5d1d9dcc70c95c00f2a7d242a3f982e78539e57 [formerly def6a11c20d8c01fd87265d630007117ef4f02f2] [formerly 0015e78ce5c1aea4eb095391ae4e1398f9d5f353 [formerly 31b07b4e760e3de2eb8d69672761355be0369594 [formerly f6ee202630]]]
Former-commit-id: 81f38e3a512c6d8ed92350610964fc91b4cb4aa2 [formerly f7bf932204209270ed361f5a42706489be2cc8cb]
Former-commit-id: 07c9fee1d5b192b213f1d25e524ac01740ea58e5
Former-commit-id: c114a91bb6
2016-09-09 15:39:45 -04:00
Zack Scholl
465b0b3f84 Updated Makefile
Former-commit-id: 567e9474a209c2f18c45184a4b3ea27707b1f8da [formerly 2f0d76d8fcb47f48665a6d9e6dd3a7a62bdb8c3b] [formerly bc4797d56c793bb16baf2ab44dcf3f8d46b491e4 [formerly 6ecaef78577b3416c58e26ca4f6fe8d812e9600a [formerly c10c7b16e2]]]
Former-commit-id: 9beec0c669e6fe5dad80e09d519ab076d3333202 [formerly 9f6e746719f5093312b7c33bae80d5476eabc82b]
Former-commit-id: b483ae83fd9623c758135d25f7c90eecdc88a6f4
Former-commit-id: 14b820f0e4
2016-08-21 11:34:26 -04:00
Zack Scholl
f79e031bbc Merge branch 'master' of github.com:schollz/cowyo
Former-commit-id: 0c5a0227d3c996978241ae125bba416f41284521 [formerly 2e68471c6027279f6e195e99fdafcc47e4154567] [formerly 44f2ad878585e9feac1b9adbe06e1be548b303ee [formerly fe9b388ca99d09134658eb9db310a8d4525799db [formerly 0d2252223d]]]
Former-commit-id: 7794ebbcd50df65483f3e4bf1712a95f6ce19424 [formerly e29b8a5e8dab53c7f359c6a244793106520fbf3a]
Former-commit-id: 08725c514ef4ccbbaf66d6e7c32bc97f457a00f9
Former-commit-id: 9eb8d24c92
2016-08-21 11:29:37 -04:00
Zack Scholl
9570d182e3 Added Dockerfile/supervisor, but need to use environmental variables to change domain name
Former-commit-id: e596931b57c0205389e45da6aa9f3a71fd53d133 [formerly 317f1a4c9a7b67b8f9e5213ab2a8036ea7d69f98] [formerly b20e0910c4dc5c50fbebe94d487368e039aa1637 [formerly 75acd8636503d99abd3ad513d0cad881d2a76afc [formerly b91f25b83c]]]
Former-commit-id: 0e244da8fd48a642e50a38aede3e0455aaeb3282 [formerly 326a4f4009de0135ac9f28db850f05a238738d11]
Former-commit-id: b2e70d7b54a39e1bdd19f1846d42ec16f12d9ec6
Former-commit-id: 66c729195f
2016-08-17 10:25:19 -04:00
Zack Scholl
64d589df44 Extended uhoh timer
Former-commit-id: 01baaecbf19772bdb8feebd385dce23691407c6d [formerly 394cc74f14836ed3bfbba3f4538f5704d4ad766e] [formerly e9ee089494713194286c4c5aacc4af9ab39d9d98 [formerly 3c8f76e520deaef9e58baa9b4fe29fcd59ad1458 [formerly 1fba482800]]]
Former-commit-id: 9ef631e359496c6a09401ad2f78afea7ad7e6d48 [formerly 71e21641898cb9e0e4a59dbf62ba31c796d98efe]
Former-commit-id: b3a11c2c9ec307b510bb10de74a7f1f3055c9f1c
Former-commit-id: 8b874f068b
2016-06-29 20:11:20 -04:00
Zack Scholl
7709b6317d Fixed minor things
Former-commit-id: f1f46069377acbbbaf63a8f02bcab7c59e3a9c84 [formerly 0ce0cfce88ef5e82f40f0f7263746ac21b908689] [formerly 2f801eb7d1c61fb1633b1602e0fa6115c9c4b0b5 [formerly 7ff7bf431462b19cf517b2d59c55647291a82223 [formerly d28a80b08f]]]
Former-commit-id: 50460342e57ee0c45e6d66fca228647c3378cf67 [formerly 678a297f0f6765be3872270400eaa14716519d95]
Former-commit-id: 46a5c459c5b0318fff6a31ddcfd8e13a19a8a69a
Former-commit-id: 6783591017
2016-06-29 20:09:00 -04:00
Zack Scholl
f705f8ee87 Bumped version
Former-commit-id: 233bca65b4c97b6fa9d9994f53d5692c4aaee608 [formerly 42b853d2ef81f0228bb8c6c26acd48017c26615d] [formerly b17adf186b4474a662592cb77a2e1551f8821eb1 [formerly a0f73d2232b5276e02a91954f3db237ebd33f2f6 [formerly bcda5fc69b]]]
Former-commit-id: 5a5a0f15c82c5f23a298dc921197e38b71298424 [formerly 4fdda72b32f570b3be1d5210b0ced6ce0a2682f7]
Former-commit-id: b77e98e3db2abc7ad6a978641086b2c5641224fe
Former-commit-id: 98dbd6a7f0
2016-06-29 20:07:01 -04:00
Zack Scholl
5d97c4651a self-destruct works to Fix #48
Former-commit-id: b24977be1bb118c14e9db3a44a2bebdc9edf9a8f [formerly 2ce16a65abe48ec000f4c4a4cc05bb38b381c916] [formerly d9c16d365414314ce1d09283200c41a5441e9e6b [formerly 33b7d56f0420fae261fcd4044ef6638cf069f82e [formerly fe774bce48]]]
Former-commit-id: 9a9c9b214ebfbbe7766faf0be65c818077dc3673 [formerly c49e25e78efadac5030cbd7e957d169d635a4776]
Former-commit-id: 23993ccf920b06228c8403923bf99f3119caafcb
Former-commit-id: cd08f25300
2016-06-29 20:06:07 -04:00
Zack Scholl
f89c71f013 Added /v /l to Fix #51
Former-commit-id: 32996f7efeb1924839ec83de15e72880a3a4c4da [formerly 73b08b487ebd036d83a97d62102b4fa043084dc1] [formerly 39ce9753f80d3aa08ef9e9db20d2455364b647ef [formerly 4806dad9888611d42d69f130386471b9d5a0688b [formerly 705cdf8b87]]]
Former-commit-id: e2e0c4a0ebc2d817525f3a3e29147bf97e62bb14 [formerly 79e05aae99bab06a9b2f76dd8252cfced37a8242]
Former-commit-id: 50d9800b33eab7df7c74449952ebdaee8860b57c
Former-commit-id: d49f231f83
2016-06-29 19:55:59 -04:00
Zack
1ee8269267 Fixed #49
Former-commit-id: 525ce05350d967ba0903c8f6d48e98f4856e542d [formerly be812ae567cd655feaeeb1ef7473113c4b5f3212] [formerly 58152373be0d18ce8eba0f70bc4bf0cba602c8ff [formerly b0d571adf08ac0090917392d7ad2d4247ef7564b [formerly 684fb3d18f]]]
Former-commit-id: cb9b9c90747f3786790b2c646a40d4b57d6933bd [formerly cab690c9895e1cb99f3e481f321647ee7e33d9d0]
Former-commit-id: 738be03795f6517b7ed8eeeeda10af2e86d8a72a
Former-commit-id: bd276c8ab4
2016-05-27 07:43:48 -04:00
Zack Scholl
c0d4c099d0 Added checkmark/x instead of SAVED/UNSAVED
Former-commit-id: 9c94107d3b7c2be9d68304e09e4a6900629dacff [formerly 1918e7a3c24ceb2c3fab7fdb0acda24019626562] [formerly 76acd89f5890a1f75bd3044f6036d2336dfe4a45 [formerly cb9b7ec9e3a35914ad28ffdf65c91c0a7c7fed18 [formerly 04424b566e]]]
Former-commit-id: 541e213cbad1ea30454782ac3d184d3cc94921a6 [formerly 757c1eb7d14d6fea74b4aed860d6d850a8600f22]
Former-commit-id: 3fbceea2234e5879e7d6e18c992b678fe1012b3b
Former-commit-id: c7559f1b04
2016-04-13 12:49:19 -04:00
Zack Scholl
6f5400eaa1 Bug fix and finished issue #42
Former-commit-id: 5c7671cb5004213cdd374eb96d7010d48637df58 [formerly c302bc14cec2a02c7a5b28e9797e12f75afd0cbd] [formerly eafc74063bb35c0b90d6d06880e004a1154c9572 [formerly eb4c3406ab737c9615cb7b8b3615b13ab3beb652 [formerly 6c0a67f63d]]]
Former-commit-id: 488d3c0d43517fb34373be7d8ca4cb8191229b54 [formerly e55849f075fd14441e88700b898a6f256ebb6919]
Former-commit-id: bf66f6882bfa2133dd8db2dd7257aea064e26c9c
Former-commit-id: aadaa4c9c1
2016-04-10 09:56:22 -04:00
Zack Scholl
24ce00aff9 Added Recent to see recently edited/viewed things
Former-commit-id: f915533dc401cb532111a12ee550438b6265239a [formerly ff18889a0c2dfaca85a44fb0a39c0ab811eb7a2f] [formerly 5063cff7610e06e8e6f9c1dfb333e5d57b2c0cf6 [formerly c07807a85674865be3224fa0492a44efea18b690 [formerly 6987950b78]]]
Former-commit-id: a6b81d4b3d0027fce4ad88bb084a1edcac8b68a6 [formerly a8e46c713549b3dd79febbd58255b1ce66b6f5fb]
Former-commit-id: 413d956e82465767fb93961fb997efabda41b402
Former-commit-id: ee01e10499
2016-04-10 09:50:18 -04:00
Zack Scholl
91c6266664 Used https://getbootstrap.com/customize to change grid-float-breakpoint to 319px.
Now the bar doesn't collapse.

Removed the index button so everything fits on all mobile devices.
y


Former-commit-id: aa72cb55cfdbd6343078e9d145358f91b0eb8078 [formerly 06c6c66e5001c65cd491e665eb7886ab39fbde25] [formerly 76b4cdc06144903e3f14e5c1c8d0d6a4bc082f44 [formerly b4cdee38a09796f986b80ac4923dbf115fc80880 [formerly ea241506f5]]]
Former-commit-id: ebafef049e36a287c150cb84a6cc6f301b761850 [formerly a7809fdd47f9b28e63ec6a5a52b6338d5fdf91d3]
Former-commit-id: 9f4d68bcf856495c64e22353b2e219970b097a55
Former-commit-id: 7c04f13c6f
2016-04-10 09:08:18 -04:00
Zack
2a97331c59 Updated fiddle
Former-commit-id: 6e8e11a04b9099a72e88dec5cccba19a55fdfe01 [formerly 193ff31f0e9041dbf5b39eb71ece16f2a3c314bb] [formerly 3fe8ced9219e9b297fd7f2459754a43ce5c8f6db [formerly e81209dc2807ae7f9a4bb1d4016a2cf64d4a5f62 [formerly 449ca925ae]]]
Former-commit-id: 8e3538cd7f0c68e0fa5b95a3100e7d679c7fb2c2 [formerly c53e44aba2b4820b4bb6c692f30d990ae8e1844f]
Former-commit-id: dc23107c756ab0ed13f707762688c1c23526fe52
Former-commit-id: 9393b9f80d
2016-04-09 14:01:19 -04:00
Zack Scholl
684d7fbe38 Added privacy policy
Former-commit-id: 49e760dfdb7df12390c15ddb9bf90901ce7a09f2 [formerly cb863afaded514e3861ecfc502c8b3ca91a2b0e4] [formerly 23fa460d620770a8f1774906fb1d22d60f6572c3 [formerly f253ff9243a2930232147343878cea501ec88a2e [formerly 9bb09c9cf5]]]
Former-commit-id: c1686ffa4ac9b7007eaad466d840f767975522be [formerly 0e22f65559dd9d334fc37c64a3d650b164269586]
Former-commit-id: 18d84dabea5b118bfc0264af941a766de332ba62
Former-commit-id: af129664d0
2016-04-07 10:15:46 -04:00
Zack
06222774a0 Update privacypolicy.md
Former-commit-id: 26630f831537ad601781964c9c301731946e8cc6 [formerly 87381ae7d194f4d4ff26b2299d9d36ed606d072b] [formerly b89114375fa7bfb751c6c67ae5565af2e5490ec3 [formerly 36605874942787c7a3503a81776cb3405a228771 [formerly f9e600f863]]]
Former-commit-id: c0d30270fec2137e460831aff3ac88bf550a1861 [formerly e1ce307ff71851995956bff6852d24885544f90a]
Former-commit-id: 20acc252407055d3fee7aa8497b81d99d2f4e773
Former-commit-id: dfe55f1ce4
2016-04-07 10:08:40 -04:00
Zack
1febbd1bd9 Create privacypolicy.md
Former-commit-id: 58ad320a93bd2640e0516bce78dcca37d2ac55c8 [formerly 6a55c20125a149e64af5fc4f1acd46bb36cbfe66] [formerly b0c0014a86b8e729a33ff83b5db4bb1a6e98b564 [formerly 77a92d312b0933ab570f22ac2bdbdf0e3b0a353b [formerly 76bb45cfe7]]]
Former-commit-id: 90cf33e44e9af1ce6d34d144acd8da8057461ae8 [formerly 9338b0334ff0e9854b6fd7c32d4e172294b0c2e6]
Former-commit-id: a2195bda554ddb475277ad7348a56e33ab79dd6f
Former-commit-id: 3a77041b25
2016-04-07 10:08:16 -04:00
Zack Scholl
f61590de70 Fixed error with links in lists
Former-commit-id: b67711dfe796fe21944c8546766f300de8f676b2 [formerly a4d179052e2e1a41e8386a25d4e3271212764ff9] [formerly bbaafc6a325179acb67f13a8b586c1c1857aae2e [formerly a0e99753fa97bbd924a126d18ef94251a5714914 [formerly a1fdd16073]]]
Former-commit-id: 5a4f9291ae8d63e95ca5b53daf7f3892308311a3 [formerly 38f184d06b0b4d49fbf27977b247bfa98c92bd1c]
Former-commit-id: 678df5edc9528504cab10aaee24a1a309af2ff4d
Former-commit-id: a35e601dcc
2016-03-31 11:03:00 -04:00
Zack Scholl
d511eb5371 Changed fonts/mobile
Former-commit-id: b75b0c20aac1d9c6c29bad37fa77ec9505681c0f [formerly 611407d9bb79db7adbf00f6fbea025eb8bd6bfc0] [formerly de5344cd08dd12f1250ef6cef1fcfcded44ca798 [formerly 51c001f9cdc554fc18dba657109cd76fe61b31b1 [formerly dc6279a018]]]
Former-commit-id: e3a95185d43d1428494701c8372b8b64e7a42f84 [formerly 45fbc12023a8f7f5a662b87810d21d8a0a2aebbc]
Former-commit-id: 54fc8a082bfbaa158bc9df44485a117caf0e8e00
Former-commit-id: 4e1655c7f7
2016-03-31 09:26:53 -04:00
Zack Scholl
a6e96a5446 Updated .txt suffix
Former-commit-id: 7511a9aef07caf6a743d5e8f66a29290fe6ab919 [formerly 0d1fc564280e837c7f7777beaf4793fb63d72d39] [formerly 8a84a6ec9d8e8646d41864e99399ea3f17a5decf [formerly a4bec42ea68272ec0914f429236f7db4aef0ef6f [formerly bc9fb92a5c]]]
Former-commit-id: 1c0be5813c4f073afdc0449161fde8ea1ca3b0a0 [formerly f7b0345a820e23490e8ff1d9fba036f4d8d021c1]
Former-commit-id: 8944ccbee8627c1c75d0d534914e14e9846e43b6
Former-commit-id: 0ef961a180
2016-03-31 09:06:55 -04:00
Zack
b443193386 960->800
Former-commit-id: a59131aa6a75b36cac4c395c1653e7b9d25eb789 [formerly 1f72c4b074e413f72346bea144099088fae6ffb6] [formerly 88321685c4bf2a545ec9359a57becb5c4bc90000 [formerly a94b22f8d4a0a7422bd636fb70f9f48151b8c7d6 [formerly e8d368065b]]]
Former-commit-id: 7e5d5d1af7a9e0c1fa651c060ad255f6065d053c [formerly af9579d82ac41fc29bb09fabc06e185e05c2a91c]
Former-commit-id: d24a727dd83b206d98c4c2336e13143d4bc2bee7
Former-commit-id: c848de00a4
2016-03-30 13:27:25 -04:00
Zack Scholl
e1a9243a1e 800->960px
Former-commit-id: 56b880a84efd3ac78f2d5b686b66e25d332209ef [formerly d08d502842b204c4b0a751ef62a3c770fedc00ec] [formerly eb250af411c44d4bae5d0781ff4dd12e14b74b31 [formerly 7c0539a4989765d2f9311de444bc5008bfed6feb [formerly fe9521f7b0]]]
Former-commit-id: a87778f820e0d809ee954bd335d37f8264274473 [formerly eb345153b8e59ae942537452b99ddee642702238]
Former-commit-id: a7c6a9bbb5ac50beb15603c4c657153d4e9a39ad
Former-commit-id: 46a1c29772
2016-03-30 13:14:19 -04:00
Zack Scholl
d1904b6158 800->960px
Former-commit-id: cb52bcce9e36fe059872e5298c608040011da5aa [formerly 804a85c4e976173c7e05c2c71e2e191e3f99703a] [formerly 7731ace2dc06dada2037bbb9dce7c53f4c61a32f [formerly 4dd6823e859fe43952599cb7115e91bda8fb479b [formerly 248528a355]]]
Former-commit-id: 758ed4a14ccb3872d95f90048c5c687013d6e374 [formerly 721ef84965ab49b4fb1073d8f5c707b4972cb23f]
Former-commit-id: 22e7b776e2c4d191ea84eae7b1dfcf09fe23acda
Former-commit-id: b887bea41c
2016-03-30 13:11:30 -04:00
Zack Scholl
640e715515 800->960px
Former-commit-id: fe55b127679dedd1d56922693f5d65c78ca9d082 [formerly c53f94c16452e22d0823e0572cbd5102fb95ee3c] [formerly 51e1c5685928e73948a566593f3ec514eec3f8fa [formerly 3aeebeb0c1e95f169c07dee208f12740235d219b [formerly 934eeed055]]]
Former-commit-id: 5ef804303bdd3afb469c278ad85e60765340f239 [formerly 40b91f223a51102f730b4c0ef3d35a7d3586725e]
Former-commit-id: 10344b2864699b428c129536fb935da553ade3f7
Former-commit-id: f27e7c2e33
2016-03-30 13:06:24 -04:00
Zack Scholl
382f53678f Removed some print statements
Former-commit-id: edf9cba62588af9e3fd14556e952af37615110d4 [formerly 9ffee166aa5524044b91d95d300ef5266fe5d521] [formerly 1fbea8584b4c307b42de21027070fdb5dd6783ce [formerly ca20ac38bb295b333f6a2f612c6bda41bd7c0353 [formerly f4adfffe32]]]
Former-commit-id: 439d3a232cb34a3ca8be53eefc0219a9e3038e3c [formerly 19b3ef583bb6af851547c3ca65ea32398723f5eb]
Former-commit-id: b7a45aea66d459633ec9bf79371427144e4b6447
Former-commit-id: 36d67890f2
2016-03-30 12:57:50 -04:00
Zack Scholl
e0ba778263 Fixed error, 800px -> 960px
Former-commit-id: be82fa96be21c9e734cb6fd44f3721409c987aad [formerly f390c4de136336a323b3b00964c637af7fdf5323] [formerly b495ad7f3c20e183e5c641dbb22113c57be67e4a [formerly 2bef6817fbf546e09b75d581a6b1eae1fd676a17 [formerly 501e4fc538]]]
Former-commit-id: c1d47001447ba20b4db513093c652980abc4c56a [formerly d05493a030407b07363d0a4e0c9ee9e88726dcc7]
Former-commit-id: 8c591916890bd7f92d8532491342b1ebfdc0a251
Former-commit-id: e68dfb3a33
2016-03-30 12:55:49 -04:00
Zack Scholl
6fd69965ed Removed some print statements
Former-commit-id: ede1d0443b007b388e9a3f3e466a9885df71ef64 [formerly 0f18dde1fefb41aadde69b63216e54b1e9f85435] [formerly 5935351723aa69890870e602f67946e6e9b4b1fc [formerly c5efcb31743d7583a7023b6d2f5da2ed4fceeeb3 [formerly 0b964047e6]]]
Former-commit-id: 326963feabc89058a5b264063dc3d9cb3ae6c593 [formerly 01e9d78b633099612914a395c47f30f33b56ab3f]
Former-commit-id: c6d7be3ae78549adb7751e7a4ad166103df5bfb7
Former-commit-id: 3aa2ac93bf
2016-03-30 12:53:48 -04:00
Zack Scholl
56b43600b1 Updated, bumped version
Former-commit-id: dcaa24a8b3ad1061e030a199114e37098d7754d1 [formerly 465a8828455861be4eddc8f2b40fd3479f7c8ad0] [formerly a4506a805eccfdb4a06bca1d6b07de52e10cc2a1 [formerly bbd1c22a8da4d25d2a6d2c25831f86a0c6f5074b [formerly 9660d10a3b]]]
Former-commit-id: acd39c54ddbe0ab880be698e6d4e66508e4e915a [formerly 0be1de2e137cf57930b3b7ca2dd3903ade96d521]
Former-commit-id: ef6be0d037258783b9b054e092ce2d0efceb1d6e
Former-commit-id: 2c5d4e1692
2016-03-29 17:56:54 -04:00
Zack Scholl
bd80123a74 Added new help gif
Former-commit-id: e934679fb0c4f23c6b19c4a51e950471a2750ac0 [formerly 37f255c5642380e03c5f0b8039d1ec668a87fe99] [formerly 99fbb110c87abc6e8f25efde321983c637d08df1 [formerly 47b118c53e42f73e49178ce56ecd6de0419c9f55 [formerly 08b845adb3]]]
Former-commit-id: d6fa00a669c04e20a595f7b11703fcd4f0e0072f [formerly ab37c85e60a88c91239eed5e012b3a2bfe95563e]
Former-commit-id: e7e420ff95ce5db949bd06230865f13a6491cf86
Former-commit-id: f3ffe029cc
2016-03-29 17:51:23 -04:00
Zack Scholl
1a8d796e98 Added restoration routes
Former-commit-id: 822e9b62b8c72965c0733f8d2b035291ab4d8613 [formerly cf916cceb9a12def41c854a0b1430ffbf25ef4ca] [formerly f2bf6102389e65d58b6cb6b7c57516d794bb5658 [formerly 9cd15b3ddc279a286d8a0b4e735690f0e304a894 [formerly 796e92eed1]]]
Former-commit-id: 94e2f000d63311cc44d8300f0c931edc01b5ed43 [formerly 71b130845411a9462beee94bcae12ff890d3be96]
Former-commit-id: f99a1f31fa2153a8d0e2c09e8a96562bce107544
Former-commit-id: c89f019084
2016-03-29 17:00:58 -04:00
Zack Scholl
0dacd669c8 Fixed HTML issue
Former-commit-id: 65e937aa022c5fda11c6537da2e7532fd45a8ea3 [formerly 69e54550c74718710ca50ada159c282e1c095cc9] [formerly daefbe079b10dbaf95a4bf57b1393c2ae4bc9c26 [formerly 5635fb16c9143e9cef46f754aca4cad21736c3d7 [formerly 870490403b]]]
Former-commit-id: 74501be5e030e6bfcfe44bf45fb0da72375353f5 [formerly 47928a77265107599634f49e2f4dc777728fb0f1]
Former-commit-id: 3ebbea9701ba26bbe7e912a150be2fc75e5fdadf
Former-commit-id: f23613399f
2016-03-29 16:21:48 -04:00
Zack Scholl
6adb82b7d7 Restructured helptext, readme
Former-commit-id: db3a0d5d035ee1e4ca2a918268d2422994826f06 [formerly c8c26fe5a5f17530f760e580d3120733b9f05aec] [formerly 787c25f6e9f7b298d598e4002f8e7d5f3f82d68f [formerly a6486364d6a1f512c2067825c05ee5d5dc7c12cd [formerly 1fb3282c1c]]]
Former-commit-id: 49b0da7945773cce3c07edb0b1d7a160fea30472 [formerly bdb9d8e6ed376c8216a09b86453c19c326f66f15]
Former-commit-id: 846154396ecd0adedeebe9fa05b3ae8abed803e1
Former-commit-id: ad85ecc1da
2016-03-29 16:09:21 -04:00
Zack Scholl
e56e2d725f Updated readme, added release
Former-commit-id: c0e30a4d572ece65bd89d57bf126d686b3584acd [formerly 820a58b94a0e557506c0f31bfe78211747fbb153] [formerly 28cdf5f2ab5bc9519106f97b619b9a8145bce007 [formerly 8f26959c0e239b5c99ccfda23cedbb3a61b5da95 [formerly b743677ea6]]]
Former-commit-id: 3a6747cf1edb065a9d3c1b1111450f554c1b43be [formerly 2ccb28452e1afcb3af9f1bb30a628a154aceaa0c]
Former-commit-id: 33cc9d8a9f65678aaa1cba65f99a78d4b7e5a162
Former-commit-id: ae87df4b1c
2016-03-29 12:48:07 -04:00
Zack Scholl
c35c2ea1ce Added current version number information (really lazily)
Former-commit-id: 94c07c4ea5425b921b79415dbb532f1557f81d7c [formerly 831d807551fce85448eb75159812c23a8bf3ead3] [formerly 07049a072587969f1fc4632fdd56edd33aae1f31 [formerly 058f893a901fa0c0ddc875ed06668173c58381f5 [formerly 189adc2fe2]]]
Former-commit-id: 0581c8c6ff9af9741dfc1e7c4f2270cba635bd1c [formerly 9f7127a4e6031c2525fa21477b15569c0ac43cd2]
Former-commit-id: fd2a63bad694b3c74728d9c5ecca20f66be1dfaa
Former-commit-id: 639d64bb26
2016-03-29 12:30:31 -04:00
Zack Scholl
53729454e0 New route /raw to use as CDN
Former-commit-id: 9fb29ca76a0086afe4dfcce7b02614e0605fae3d [formerly de075dcebe645f141fc9a1fe20bd28ec51296370] [formerly 10b36428bd20421362fbbe25a18ca4e8fbd36992 [formerly 3ae60e7e6d9e4712f40b16bce39f44a12c393bbf [formerly 1ac06efc51]]]
Former-commit-id: 53c1ebbefa9e9d440f9151d6ed522be894f2762b [formerly 637361e6add81d532302dc3f5ca09145102aa829]
Former-commit-id: 92d9d2ede76263e47abfed5021a58c15b7594966
Former-commit-id: 24f4d873e7
2016-03-29 12:09:38 -04:00
Zack Scholl
61dddac837 Updated for allowing coding stuff
Former-commit-id: 277e13f7c56988ad1b1245c73e4e68f561e6efee [formerly 9ae5239c3d38dbf8517430e06cb649c1e6199e8b] [formerly 11e80c32ed87388112d6856fb5dddfdc9e5ae2c9 [formerly 4289687183a38eb64426a05cf054a8b99b24a6c8 [formerly 65501e95b9]]]
Former-commit-id: fd9e8e3472aa24344c2900bb508e25f348d70770 [formerly 32e29496babb872aa95a97797c5bf82b07912660]
Former-commit-id: 42ebce812a5d08949301c0f01a8b4266cd3a13a6
Former-commit-id: 2be07f5216
2016-03-29 11:50:06 -04:00
Zack
9ee72fddf6 Update index.tmpl
Former-commit-id: 0f967d779ac52eb0f325781378c4f990c5bc8982 [formerly 856f90c92ff4a1c1d39d430349a16f0f1cc6edf0] [formerly a5c979b40e103c7c4bedbb3e3a04c4f68eaad8cc [formerly 98b290e306d2665a11345c1fe14f923cb64cba08 [formerly 47578f526f]]]
Former-commit-id: c170532ca13046fb6aa7705e24b2411920a3bb27 [formerly 0c75585d4af8d996c57594e70a5f64940f48a278]
Former-commit-id: 2aaa2b38e0ac10d11fcd214665c1df61ce8bf861
Former-commit-id: 5157aca02f
2016-03-29 10:37:17 -04:00
root
cb0e6276e5 Fixed error
Former-commit-id: d1b5071a688b93c8084c4c13b8d358680082b587 [formerly 75f7d12336314bd5e2d26ccf072afec6d237f270] [formerly aa0226e04882d1a58d882e0618b90dc68821e5ee [formerly e811bdbfab97d0a0a783dddbc3d194563fb97e71 [formerly f170ff34b8]]]
Former-commit-id: 46532ad247cb1a5aa25bd52f827d2065590ed750 [formerly 16fe2a2c9d8126e41f8eced9475aefc8ae1dbbd2]
Former-commit-id: 6e944c9d0530e942dc6633c75c5b605d0749166c
Former-commit-id: 207a639563
2016-03-28 21:19:30 -04:00
Zack Scholl
7077950bb4 Added coding types
Former-commit-id: 16d3982212d80dfc631e72d114f825fc860985df [formerly 40f4be30fed6c796301cd5d728b8d61a48f5b6e4] [formerly e18904f46decc08c0fb9db23ae877f9915d9eee6 [formerly a12f96618df3fed86bf87951e0407a6283750110 [formerly 6d38da9c02]]]
Former-commit-id: aa4daffeac0023cf80226d03a0381126d0f00e33 [formerly b73298c2652b0bc5cae6d5d6bc714cf7a1a020db]
Former-commit-id: b18129d6af5212a9c4af1c61b9d4572563e824d5
Former-commit-id: b613c3e83a
2016-03-28 21:15:23 -04:00
Zack Scholl
e142daa0f4 Use -L to follow redirects, for HTTPS support
Former-commit-id: 3fd336829a29bfdb92d5daa3cce00e0522e9af2d [formerly 344e6f4e62f7fe43a2175fa5fb79149a8eae8f2c] [formerly 24a9402ca8d44838b5fd748951440674fbf494aa [formerly ef297312a813a02a636be61d47b61988ac9e7752 [formerly bdce4b6198]]]
Former-commit-id: fb22227719a853b70bea3c90741282756071670e [formerly 767071e630c7bc96c412d4e69d5f52464ad5edeb]
Former-commit-id: b92b516bbd21def9e40465957d4e579c9cfd4e97
Former-commit-id: a36af5200b
2016-03-28 20:28:58 -04:00
Zack
616b3cea68 Merge pull request #40 from schollz/upload
CLI support for uploading/downloading via curl

Former-commit-id: 2693cca428a2f42aa85ee42a136250f69555c16f [formerly 3d64052514a02869b91e732cae7a9e07bcbee9f4] [formerly d3935ab9d29fecfefa33d018122693b9acf5391d [formerly 27666aef65cc6c8809f8cfa379750a54d13482e2 [formerly 7e723e65b5]]]
Former-commit-id: 3b635ad54eef64b2b5b867d8ae7bf7d40921e773 [formerly 3488934a111431706a6c48372d79f552ac706eae]
Former-commit-id: 4ed997a716a81a28cbb15ca61047d14dff3b5be8
Former-commit-id: b54feaf247
2016-03-28 20:21:46 -04:00
Zack Scholl
0f34d342d8 Removed extraneous fmt.
Former-commit-id: e14a3f63333e04d7dd36445af59971bf4483e38c [formerly 0d230b0ee7017a88627c3829cb3e25723ce16909] [formerly 448638670a680e4e7d69b43ee8024a9cb09dc743 [formerly 83cc0422e5bbc0f4ee0e5c5d7ca7697a31382549 [formerly 3f3cc1f41a]]]
Former-commit-id: e8c31b3325d1b75a4b18bb9bcf842a00f5cf6ee8 [formerly 52fba3f6529f7271ed2f3ab3f9c7174acb8276c7]
Former-commit-id: 1db89f1ce6fe1d62f73c71baabb01500b9ec0117
Former-commit-id: e9f97aa384
2016-03-28 20:21:06 -04:00
Zack Scholl
380707cbe6 Bumped version, updated README
Former-commit-id: 28b93329d92d3d7d01ebdbb42b7d1c20f5fd0518 [formerly a70573f0f01d5151b5288bd289b399e098317c92] [formerly 33bc07777f90f36c3f9829f9e4971a5e3119cc55 [formerly c2f9c23bb1e6ba22aece91739d79d1f405465941 [formerly a0c57004a8]]]
Former-commit-id: 570e2d901d8732cfc71ffbe95f18a91570e0d00a [formerly 52a740c2799400a2c12dcc1080cb60ca134ba6eb]
Former-commit-id: 7536551aa08126c773bad299754194c8f148adfb
Former-commit-id: 4d34638b81
2016-03-28 20:20:47 -04:00
Zack Scholl
041d674ddc CLI support! You can use curl (only curl at the moment) to
PUT files into the database.


Former-commit-id: 9c6d499403675cb28eb76676a73304e3acd2cc48 [formerly b30cad27b172756fdfcbf55d1e4c7542d90ca710] [formerly f2d936c586cb11525e36421c235bd1eb8909af3a [formerly efc27e723e7ffae0a898e8a59344fba9be0b4fd8 [formerly bd59a69f28]]]
Former-commit-id: c8f9d721fe83366a7545df693bbec7cdf376bf1b [formerly c97362f33772b2fc391d4705cc3d6eaf0f78f26b]
Former-commit-id: 31366a03506e761af053625496c662f675dfeb8d
Former-commit-id: 920ba22309
2016-03-28 20:19:13 -04:00
Zack Scholl
8ebe02f432 curl upload/download
Former-commit-id: 31707169c9c4d67f4b53a4d1f075eadf76502475 [formerly 05b4e61848391ab3a2e3a0821bff1a77643ea350] [formerly 9f6dff7e3dd94dbde69fadaa59fe97139defef79 [formerly f2d4ab4c265dd0b748bffdbdbb76936d628cf592 [formerly f6c287ba24]]]
Former-commit-id: 010fc8f14ddbd3e68a315336dcbafdfe1c07ab94 [formerly 8cedec66735b36c0bf9468383d111b22c770ce69]
Former-commit-id: 02b4b823c8bbf01f46782c4411e3fce319d053ca
Former-commit-id: 360ad6773b
2016-03-28 19:55:25 -04:00
Zack Scholl
b4e3628008 Removed haspassword
Former-commit-id: 4670fa4a1dc343c501f8f76421fa51b54d450cd3 [formerly e3b56e6823a77a388881b388f8f7fff348c04cba] [formerly e8bd41425d5b0a377d0ff687fcead01cab38c98c [formerly a4b29de724db196efc8505bff0b990b469bce019 [formerly 4ffcc1abd5]]]
Former-commit-id: 0850667d5b0245328ca38933359006101d14e9d6 [formerly e7643ddbfe5ec74936760a4b6ffbaeeb71a93275]
Former-commit-id: be2765befe8951bc772c0c04a0583911446c8bb7
Former-commit-id: f12d53de63
2016-03-28 19:29:48 -04:00
Zack Scholl
0f31132a8a Don't need this password checking now
Former-commit-id: 1951dfcb6292d6a9bad533f2cfb28a97e108eb8b [formerly cb098a5f59a9a4c00a3b6db270fea0716d7d5c60] [formerly b4f9bee32bc08a279397a714af9c2230070c00fc [formerly 725abe4412fb4aa7f116c6fc45842c0030a5cd52 [formerly 600dd685f1]]]
Former-commit-id: c1fbbb182163aee133d42475f14dc0ac207b49ad [formerly 465d4f43772c7146419e2a4bd4ef13ec1567ec01]
Former-commit-id: d39d6f868cbeae584c105bc50ad8b7df3172e833
Former-commit-id: 80d4772b7f
2016-03-28 19:29:30 -04:00
Zack Scholl
0a364fd68a Uploading works, needs to be cleaned up
Former-commit-id: a6b599a5745eb9cacafe5057b1520ce13f9b9ad0 [formerly 7ae19693370546ef57f0ce7eebc4d1ba8b27b0ed] [formerly 780e9e395f850306c571135ee71fa6c7de7b3514 [formerly 10fcaa6ece761a02cdaae48c068159505047e421 [formerly 7250ebc0a2]]]
Former-commit-id: f083224c91a11cc2ba967146986811080d380f08 [formerly 9eecf8f5c034a35363d15a3f40cd127e06e72e74]
Former-commit-id: 43edf2a5d2d0e11954a866cc2b3786f4ebd2021c
Former-commit-id: eb8bd29dd7
2016-03-28 10:49:48 -04:00
Zack Scholl
279bacc9e8 Adding transfer ability
Former-commit-id: c7f6a0db52693be7730b29733b28b54a42237e93 [formerly bf89dab668fa14254af014ff00ccd7edec6c5db8] [formerly a4ba75c6c7241dbf9416a84841e7d7ec1c4e1347 [formerly bca9d95f33cc49f0bebdc78ffe08f02b387fe613 [formerly 3a8b6ae64d]]]
Former-commit-id: f56dd635717764f48370bdafef1d32e1b862abf2 [formerly 8042910e988a56fd23454d590afb99ff0cc2ef65]
Former-commit-id: bb17fb1d842e9575e041cf2d11537c0489b3501d
Former-commit-id: 200e2c848e
2016-03-28 10:24:48 -04:00
root
44c2dcec7c Added force wss flag
Former-commit-id: f5be76c42fcbac8ad02fdf3f33fbb778d708a572 [formerly c0ccaf9c27ad8f4f61f73cc49051e5720226cb78] [formerly 3339f1503f89edc1ce65f71ac986cfc06d4a41ac [formerly 972d7b990d303e6b389bea9a462a0db56c34972b [formerly 3c2a64ec09]]]
Former-commit-id: ac62f91a7c5dab5c7a299bbd471f9862ebd048b0 [formerly 94ecb0cebb996c6ed88412c70e45a72e9fd322f0]
Former-commit-id: 2448c0842558e7f04db3b08923b2cb458e767a53
Former-commit-id: a53c5d47b1
2016-03-27 11:54:59 -04:00
Zack Scholl
1c64394639 Use password fields
Former-commit-id: 1c676c9ac22ff9c18dadde2a79dc5284c84a6041 [formerly b3d3aaca6c83b8c063a8b1546da0d42e5343d815] [formerly cfdc17302e7499575390a0c95da2582e602285be [formerly 0b35b062a5707040e63b32419bb1f3ab7d4b949f [formerly 359b9b35f6]]]
Former-commit-id: 5fc9ddb72f0225b005cbe155141fde5b792d8ad4 [formerly 69db9dfed791b8bd0662e227fe0d4d9be972293a]
Former-commit-id: 6f62cd292d2fcb9b37e7c61a851235858e40e133
Former-commit-id: 9d0d28b663
2016-03-22 19:42:18 -04:00
Zack
50382c85b8 Update README.md
Former-commit-id: 202a006c641eb1c55bee617f916dadb80e28b84d [formerly 46fd15c0554a85ed2ef00b96e09f7c8373460a0a] [formerly 54c94e2f53b66d3cb0dc617f72444f7212a0dbc1 [formerly 1944be28d616e9d153492480aad00e1a0eae2e6a [formerly 4d48e0e1ca]]]
Former-commit-id: a2c9c4810189d13b877115fec8e38c6ba7ffc9fb [formerly 538dd4919125655cb46542296157d8882efdfa43]
Former-commit-id: 3c34fa7a16454c6c2aa4c8f73b76c124d4638c35
Former-commit-id: 3b53df670f
2016-03-20 19:03:48 -04:00
Zack
749d455fb4 Update README.md
Former-commit-id: fc565f476b9baa15735c7ef283aef3d1088a9397 [formerly 8c187342bc010015739630161f7b59f2d1d48629] [formerly 5148080698719b778eb6acbb897f4461274cb298 [formerly 735ed0530007647d6b918c2c87ffe919ab1d252b [formerly 57b85e782f]]]
Former-commit-id: 98fa19af8bf31e943747b263aa82314e77a174dd [formerly 6e6bdbd6984ddcc5096db24eb5cde9b3f9edc076]
Former-commit-id: 20184cb7a15567c8d80a37c8907b405a8ce62d37
Former-commit-id: c11de9e8b6
2016-03-19 11:52:09 -04:00
Zack
c058bc09f1 Update README.md
Former-commit-id: 2828da38e662059cbc7ca063e086af1a9f0bf993 [formerly f124ba1f00cb221f8841621b13567f8efcf4fcf2] [formerly 7add2449990ae546a9a1da958c0c3511a92d10be [formerly 93483b0e9b01ccf4bc140b8159f9d31a0013cbdd [formerly 5a506c78e9]]]
Former-commit-id: d524ef95be29252a4416d5bbf30749ce5b2c0cb1 [formerly 53bdefe3aa4e7177c4f2209def3dccde1253a8c9]
Former-commit-id: 18244f8fdc34620024775255ae88d204efcec33c
Former-commit-id: db2dbaaaeb
2016-03-19 11:47:18 -04:00
Zack
4b6189f831 Update README.md
Former-commit-id: a700069a38bdeb22e70ce486fcfd1ef46bf3b3d6 [formerly 6c81e7a248e6dbf40117fb4aba702f773eac4cde] [formerly a7c5d9577435681f4aa869458791eda59015b5b5 [formerly b98e81f3e4c9b1ac53a120705a3c1a2519921724 [formerly b6bb77d6b8]]]
Former-commit-id: 8830b6995992900807a176a7695e2b015c3cff78 [formerly 5adc8827c2c833af1e5ca1d650fe43943568cfd0]
Former-commit-id: 4ed4494dbc8ae89e1185e60cccd6747cf60c54ec
Former-commit-id: 7e24f3a159
2016-03-19 11:47:04 -04:00
Zack Scholl
57771c742c Spelling
Former-commit-id: 48f8e7fcd5b4922c54aa222589f19ee383585b5f [formerly 915392153601b2035547b53c4a4d9d143dd5d845] [formerly 6f3b4cddeab74dae3f49253dd3fef55f035f98ab [formerly c610b7397a8bc438a23d142e931779bf9a418193 [formerly db92c60be5]]]
Former-commit-id: 748fefa94f7ced8138f457a6211542be64ada1d4 [formerly c24be73119aa8e41b4e4d663f994dd58fdedda89]
Former-commit-id: 9d6a9698096778fe3ffc4c2d6f4882c750498747
Former-commit-id: fd2af7a85f
2016-03-19 11:33:31 -04:00
Zack Scholl
f82b1d4369 Removed ~
Former-commit-id: 29eee59130b02f9bb9033138ee052ba720fcda1e [formerly 3d90801f2a731afebef1cdb915ab118096ce8469] [formerly b28d4c4de6b0de9f947a45a1430a79fbb31ae037 [formerly 7034b6899b9437147b03dee0621f3b51257dc87d [formerly e04fe77c12]]]
Former-commit-id: 00c07b3e06b9dec926f7c6c7fcef8fce0ec15f8a [formerly f7ac93a564315020dcc807bff0a447ace7ce5960]
Former-commit-id: dac8f850c3a3fbbc6a4235b99b541983628db263
Former-commit-id: c789b56966
2016-03-19 11:32:31 -04:00
Zack Scholl
8ff9589dde Removed ~
Former-commit-id: 5ac3ff1192e2b716aff7cb46778a6f08c7a421db [formerly f16abccc3e56df5faaa292ecb7a809fc207398ba] [formerly 1f3e0eafcbba530968b77a2479d08fd97d3d332a [formerly 0b49ca63ddc5aa9f3a55bec22531cda2cf69eadf [formerly 1851a441e3]]]
Former-commit-id: d0019238de14cf4a2bd134db6a5141f5d4c8d38c [formerly 342f01e7e634210bd7edf346ea6eaf2984be1474]
Former-commit-id: b2c53989e60ad04d9ddb8403e96e5e20a4e13507
Former-commit-id: 57d0e3cd87
2016-03-19 11:32:18 -04:00
Zack Scholl
59955afa78 Updated and renamed
Former-commit-id: b5ac59cb19d2bc8c7a86560aca55250af5f0c13f [formerly 327bf636df25e46bda09fed20352a548d6922e3e] [formerly 207656a9b061ecd5f5def1dd0ef57e7e17d93524 [formerly 41f107c876b02912e1f8a454862f200193c9ab76 [formerly 8d4d68c840]]]
Former-commit-id: e1b78b6df1d5ce2d6d2de334bf2cda9060057558 [formerly a109361bc20bba2b4917e7b174fca02e68642169]
Former-commit-id: 8268b6f2e664d64a308bfcc0593756a96761afc6
Former-commit-id: 7e3dd5a83d
2016-03-19 11:31:47 -04:00
Zack Scholl
f5b10f8c2e "awwkoala -> cowyo"
Former-commit-id: 9c773dc7ec43d1d433009fe469e284b135f65e6e [formerly ff79169c6e0ee8a8fda8da6d1bf3eebb242c64cd] [formerly 48dd767a560f1d539cf69197601c859ceda15f09 [formerly 7dc8e7161d73230525a32eaf97020a85406f5f37 [formerly b1f7805ece]]]
Former-commit-id: 8ecf66ef3fd4b1676c23dad8ac575639912fa83c [formerly 5fb43ee803ac2a3c9be1b760b87e754300360ea2]
Former-commit-id: c4e99e9af4a23af149bfe49e0718bf81a1f4c12f
Former-commit-id: ccbbeda71d
2016-03-19 11:27:27 -04:00
Zack Scholl
5d3c81cda0 awwkoala -> cowyo
Former-commit-id: ff7f37722f73e0271faefe1e9530ef6229ba2eb7 [formerly cd8fb0492bda08a01a82f380fd91935c764c79d9] [formerly 6661abd4af87c27912e0bf6e6f0eeca24e64e192 [formerly 7a97df345b4fb9d1d3546239cf6eabe8533e5775 [formerly e15dbf6bae]]]
Former-commit-id: b647f6cf1ed446d7e0d0941f6570f78cad1c30ec [formerly f80be33aa360b3e1feb701704c7e67f6c46fc2d0]
Former-commit-id: 1b5c02d2520721d7ea70891b187a47202c534926
Former-commit-id: a931361b83
2016-03-19 11:26:08 -04:00
Zack Scholl
d8d7509aa8 Updated about page
Former-commit-id: 816409d43e5dcd1ece4cd9aa98b6aa42670aeca6 [formerly b9553e03598f886ce0d8ad1cb3ee3b596759caa0] [formerly edc5b4bf3453917566b5ff928e97a017186a3aa6 [formerly cf9baa12dfea0dd2c2d253e3736bad3623650de0 [formerly c1ae66d10a]]]
Former-commit-id: 229f65e28cb91235de8c5efc857c707ea0c8a661 [formerly cdcc19cd70755bf7d73c16e339a51062ab026dc5]
Former-commit-id: 9d346b2c6621537756897b66f9d3f297c4ef4d9c
Former-commit-id: a37dbb59cd
2016-03-19 11:11:09 -04:00
Zack Scholl
5b57696333 New helps
Former-commit-id: ddea9eba54f66aa998051229b64dcf8f0afbef0c [formerly 8314c80f1a73db6fc7aa0e003cafea78b37df497] [formerly 4ed22e15308b01ede1c5343f541ee09bcf67f13b [formerly a0c551fc6617709f0dbbc970a70e544af51ceb06 [formerly c8d6d95d48]]]
Former-commit-id: ca032d029714b4836b2e990a77be647e7d124184 [formerly ef7a0c426bcb181f0a584dcb13b5040fd846b8ce]
Former-commit-id: 9a39f23dcd34a707fa9e415605b16956e30f5c20
Former-commit-id: b3de802132
2016-03-19 10:53:02 -04:00
Zack Scholl
7225e2a8fb Updated
Former-commit-id: cbe64569004c261c84d354a101b55a1c476102f4 [formerly 8ff33b850e26a0bd81eaeac47d430fb72635ca18] [formerly 22f975b39a51f321dffde53e49e45e83cbe9dbbb [formerly 3d30891edf410556b4c98bb7fd0e10fbf38ebfc2 [formerly 3958d63656]]]
Former-commit-id: 2483dc479915c14ee6583b5907d8f787e403dbdc [formerly 8d74992204ce7cbf0cb0d3b0ddb407bb8f2b9e3a]
Former-commit-id: 10e39e66f3679a7f005856ce71af54a7241aee20
Former-commit-id: 84c29ea268
2016-03-19 10:52:27 -04:00
Zack Scholl
27de2fb3b2 Added better icons
Former-commit-id: 9fb97e9307c0c972b2dab22118a9a43f0261d2c1 [formerly 205f29cb04971b4e8b07e8f090a7cbeddd78f7a2] [formerly 4a17d15566caba0c49b07aa99a3a1899b34907b0 [formerly 54ac8a78ebb9aa6017242c61a609eb6280a04c32 [formerly c63912a77a]]]
Former-commit-id: 590e1e99952e08697b16a7f413aa71ca1ac6b441 [formerly 69930047464008284fe5e9584eef769f35eab820]
Former-commit-id: 67a77bc2da5b44aae71171db689d0513929b866b
Former-commit-id: d24e5d5bae
2016-03-19 10:30:02 -04:00
Zack Scholl
6eae8f49e1 Simplified message
Former-commit-id: 5a8565abf28e7ec595dc38fa5b86b3cc024c7aec [formerly cb012c2fe70280c89075eec6ded4ae3ad0d4140d] [formerly b18aa12203e6c910d4cd6eaec4a437575541626a [formerly fc3ef4f05b3d3144c3faeaf8b6a3d578d3da534e [formerly ecbaf8b114]]]
Former-commit-id: 0ee7ff873052fa1ff8dd7a8a534807e336a626da [formerly 82c29d64cdcb691ecf49d9714e3b3ae5b5c2baca]
Former-commit-id: 40162f47d3ebef7202329270cc51bdb30751ecd2
Former-commit-id: 0ccaf084d9
2016-03-18 08:42:36 -04:00
Zack Scholl
d04f57e7a7 Improved robots, added sitemap. Locking is simpler now and allows direct click to edit.
Former-commit-id: 09ad353e7940058aad4e578949b2e4a58cb6a044 [formerly 52f9d99e471a7b490f6c0915a0d49593d6b51916] [formerly f0e82719115da8fd767cc99c8981c59094a69ca3 [formerly b38d7c56ffe9ba3d4f939dc75c87c1d62dd8a66f [formerly 9ec76efd33]]]
Former-commit-id: e9bb713ba99798071e3f9376e790417d36d34c31 [formerly 69a662985ced356cc3f8657fa4b98117beec9f48]
Former-commit-id: d1f51141039bc8656e8a9ae906a2389e7103081c
Former-commit-id: cbc14d7014
2016-03-18 08:39:41 -04:00
Zack Scholl
c48d175c02 Updated page locking
Former-commit-id: cdb45541d3db1bacccbff220cbe4088e0f7f59eb [formerly 1106e0eb98b70694e0a59427a646160c224e5d88] [formerly 07e9b03344d1c33a4a720dd53e78ccb88b61de89 [formerly f4ef156de0a88e4df4b0c14fe51954394047d50f [formerly 12fc7b1b78]]]
Former-commit-id: 52d43ace1ce213cc3ab545b843dbff5140ba6cdd [formerly 9126617e8f64187e8816578ad97fa9d80b9b1bea]
Former-commit-id: cf573955ac8c2f9ed5e75c4ddea99e2d7779c952
Former-commit-id: 580d6cba68
2016-03-17 20:13:20 -04:00
Zack Scholl
2a0c9efa18 Added locking gif
Former-commit-id: 108d88dcca6477f380a1085d70a7a30d7723aa30 [formerly 5b1182431edc2ebfe85c3ddf91d10c48d8d7cbe9] [formerly 6b2f43e6d38f6f9a47702a4bfb35a7ec64bf7aec [formerly 5f8b50a4afce6d8a1cc117d1689330c5e77307f0 [formerly 248f9afd71]]]
Former-commit-id: 4e1de50131cd54ac22ea3b70588145515f763396 [formerly 6a5d227d522e6db28bf08cadd38df43420e11f32]
Former-commit-id: 0711199ec17b7db53df7758bed4f7683d3ef0b26
Former-commit-id: 260c0139fd
2016-03-17 20:11:49 -04:00
Zack
b6ce06037d Create .gitattributes
Former-commit-id: 230a233eac0eef57bbd6288ed02c74395bbbf753 [formerly f4ed3cd06e4962d581548f8b846f8a284a5e6a84] [formerly 6162931d089fc91130520b62e7b97074ba279bc4 [formerly 7a9651cd44f2c850f0ede855de5974f7b1300af9 [formerly b281cf27a0]]]
Former-commit-id: fd5b14f9a5e4d799cf6c040cf09240f69d1fb93f [formerly af4b6f2b872cfa8a7882fd425288c6ba77604be7]
Former-commit-id: 50c23bfc4d54c9a8b0a88883d18fabc0093581b8
Former-commit-id: 7c86bdd5fc
2016-03-15 20:51:09 -04:00
269 changed files with 10931 additions and 18698 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
static/* linguist-vendored

8
.travis.yml Normal file
View File

@@ -0,0 +1,8 @@
language: go
go:
- tip
before_install:
- go get -u github.com/schollz/cowyo
- go get -u github.com/jteeuwen/go-bindata/...

View File

@@ -1,6 +1,6 @@
The MIT License (MIT)
MIT License
Copyright (c) 2016 Zack
Copyright (c) 2017 Zack
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1,51 +1,35 @@
ADDRESS = awwkoala.com
PORT = 8003
# Make a release with
# make -j4 release
CUR_DIR = $(shell bash -c 'pwd')
USERCUR = $(shell bash -c 'whoami')
VERSION=$(shell git describe)
LDFLAGS=-ldflags "-s -w -X main.version=${VERSION}"
make:
.PHONY: build
build:
go-bindata static/... templates/...
go build
install:
rm -rf jinstall
mkdir jinstall
cp install/awwkoala.nginx jinstall/awwkoala.nginx
sed -i 's/PORT/$(PORT)/g' jinstall/awwkoala.nginx
sed -i 's/ADDRESS/$(ADDRESS)/g' jinstall/awwkoala.nginx
sed -i 's^CUR_DIR^$(CUR_DIR)^g' jinstall/awwkoala.nginx
cp install/awwkoala.init jinstall/awwkoala.init
sed -i 's/EXT_ADDRESS/$(ADDRESS)/g' jinstall/awwkoala.init
sed -i 's^CUR_DIR^$(CUR_DIR)^g' jinstall/awwkoala.init
sed -i 's^USERCUR^$(USERCUR)^g' jinstall/awwkoala.init
sed -i 's^PORT^$(PORT)^g' jinstall/awwkoala.init
cp jinstall/awwkoala.init /etc/init.d/awwkoala.init
chmod +x /etc/init.d/awwkoala.init
cp jinstall/awwkoala.nginx /etc/nginx/sites-available/awwkoala.nginx
ln -fs /etc/nginx/sites-available/awwkoala.nginx /etc/nginx/sites-enabled/awwkoala.nginx
/etc/init.d/nginx reload
/etc/init.d/nginx restart
/etc/init.d/awwkoala.init restart
rm -rf jinstall
.PHONY: linuxarm
linuxarm:
env GOOS=linux GOARCH=arm go build ${LDFLAGS} -o dist/cowyo_linux_arm
cd dist && upx --brute cowyo_linux_arm
binaries:
rm -rf binaries
rm -f awwkoala
mkdir binaries
env GOOS=linux GOARCH=amd64 go build -o awwkoala -v *.go
zip -9 -r awwkoala-linux-64bit.zip awwkoala static/* templates/*
rm -f awwkoala
env GOOS=windows GOARCH=amd64 go build -o awwkoala.exe -v *.go
zip -9 -r awwkoala-windows-64bit.zip awwkoala.exe static/* templates/*
rm -f awwkoala.exe
env GOOS=linux GOARCH=arm go build -o awwkoala -v *.go
zip -9 -r awwkoala-raspberrypi.zip awwkoala static/* templates/*
rm -f awwkoala
env GOOS=darwin GOARCH=amd64 go build -o awwkoala -v *.go
zip -9 -r awwkoala-macosx-64bit.zip awwkoala static/* templates/*
rm -f awwkoala
mv *.zip binaries/
.PHONY: linux64
linux64:
env GOOS=linux GOARCH=amd64 go build ${LDFLAGS} -o dist/cowyo_linux_amd64
cd dist && upx --brute cowyo_linux_amd64
.PHONY: windows
windows:
env GOOS=windows GOARCH=amd64 go build ${LDFLAGS} -o dist/cowyo_windows_amd64.exe
cd dist && upx --brute cowyo_windows_amd64.exe
.PHONY: osx
osx:
env GOOS=darwin GOARCH=amd64 go build ${LDFLAGS} -o dist/cowyo_osx_amd64
cd dist && upx --brute cowyo_osx_amd64
.PHONY: release
release: osx windows linux64 linuxarm
.PHONY: install
.PHONY: binaries

157
README.md
View File

@@ -1,129 +1,78 @@
![Logo](https://i.imgur.com/ixnBYOl.png)
# AwwKoala - [Demo](http://awwkoala.com/)
## A Websocket Wiki and Kind Of A List Application
[![Version 0.94](https://img.shields.io/badge/version-0.94-brightgreen.svg)]() [![Go Report Card](https://goreportcard.com/badge/github.com/schollz/AwwKoala)](https://goreportcard.com/report/github.com/schollz/AwwKoala) [![Join the chat at https://gitter.im/schollz/AwwKoala](https://badges.gitter.im/schollz/AwwKoala.svg)](https://gitter.im/schollz/AwwKoala?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
This is a self-contained wiki 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 [`/`](http://AwwKoala.com/) 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 [`/`](http://AwwKoala.com/) 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`](http://AwwKoala.com/AnythingYouWant). All pages can be rendered into HTML by adding `/view`. For example, the page [`/AnythingYouWant`](http://AwwKoala.com/AnythingYouWant) is rendered at [`/AnythingYouWant/view`](http://AwwKoala.com/AnythingYouWant/view). You can write in HTML or [Markdown](https://daringfireball.net/projects/markdown/) for page rendering. To quickly link to `/view` pages, just use `[[AnythingYouWnat]]`.
![Simply type to edit.](https://raw.githubusercontent.com/schollz/awwkoala/master/static/img/Main1.gif)
<p align="center">
<img
src="/static/img/logo.png"
width="260" height="80" border="0" alt="linkcrawler">
<br>
<a href="https://travis-ci.org/schollz/cowyo"><img src="https://img.shields.io/travis/schollz/cowyo.svg?style=flat-square" alt="Build Status"></a>
<a href="https://github.com/schollz/cowyo/releases/latest"><img src="https://img.shields.io/badge/version-2.1.0-brightgreen.svg?style=flat-square" alt="Version"></a>
</p>
**Listifying**. If you are writing a list and you want to tick off things really easily, just add `/list`. For example, after editing [`/grocery`](http://AwwKoala.com/grocery), goto [`/grocery/list`](http://AwwKoala.com/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.
<p align="center">A feature-rich wiki for minimalists</a></p>
![Lists are easy to make.](https://raw.githubusercontent.com/schollz/awwkoala/master/static/img/Main3.gif)
*cowyo* is a self-contained wiki server that makes jotting notes easy and _fast_. The most important feature here is _simplicity_. Other features include versioning, page locking, self-destructing messages, encryption, and listifying. You can [download *cowyo* as a single executable](https://github.com/schollz/cowyo/releases/latest) or install it with Go. Try it out at https://cowyo.com.
<br>
Getting Started
===============
**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).
## Install
![Versioning is easy.](https://raw.githubusercontent.com/schollz/awwkoala/master/static/img/Main2.gif)
<br>
**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`".
![Simply type to edit.](https://raw.githubusercontent.com/schollz/awwkoala/master/static/img/Main4.gif)
<br>
**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_).
![Simply type to edit.](https://raw.githubusercontent.com/schollz/awwkoala/master/static/img/Main7.gif)
<br>
**Page locking**. You can apply a password to a page to allow further edits from being available. The whole version tree will still be available. _Note_: This is not available for list mode.
**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](https://github.com/Khan/KaTeX) using `$\frac{1}{2}$` for inline equations and `$$\frac{1}{2}$$` for regular equations.
# 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 have go
```
git clone https://github.com/schollz/awwkoala.git
cd awwkoala
make
./awwkoala -p :8001 LOCALIPADDRESS
go get -u -v github.com/schollz/cowyo
```
and then goto the address `http://LOCALIPADDRESS:8001/`
or just download from the [latest releases](https://github.com/schollz/cowyo/releases/latest).
## To access from anywhere...
## Run
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:
To run just double click or from the command line:
```
git clone https://github.com/schollz/awwkoala.git
cd awwkoala
nano Makefile <--- EDIT this Makefile to include YOUR EXTERNAL ADDRESS
make && sudo make install
cowyo
```
Now the program starts and stops with
## Usage
```
sudo /etc/init.d/AwwKoala start|stop|restart
```
*cowyo* is straightforward to use. Here are some of the basic features:
Edit your crontab (`sudo crontab -e`) to start on boot:
### Editing
```
@reboot /etc/init.d/AwwKoala start
```
When you open a document you'll be directed to an alliterative animal (which is supposed to be easy to remember). You can write in Markdown. Saving is performed as soon as you stop writing.
# Usage
![Editing](http://i.imgur.com/vEs2U8z.gif)
```
$ awwkoala --help
awwkoala: 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: 'awwkoala localhost'
Example: 'awwkoala -p :8080 localhost:8080'
Example: 'awwkoala -db /var/lib/awwkoala/db.bolt localhost:8003'
Example: 'awwkoala -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/awwkoala/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")
```
### History
If you set the admin flag, `-a` you can access a list of all the current files by going to `/ls/WhateverYouSetTheFlagTo`.
You can easily see previous versions of your documents.
# 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/AwwKoala/issues). Any other comments, questions or anything at all, just <a href="https://twitter.com/intent/tweet?screen_name=zack_118" class="twitter-mention-button" data-related="zack_118">tweet me @zack_118</a>
![History](http://i.imgur.com/CxhRkyo.gif)
# Contributors
Thanks to [tscholl2](https://github.com/tscholl2).
### Lists
You can easily make lists and check them off.
![Lists](http://i.imgur.com/7xbauy8.gif)
### Locking
Locking prevents other users from editing your pages without a passphrase.
![Locking](http://i.imgur.com/xwUFV8b.gif)
### Encryption
Encryption is performed using AES-256.
![Encryption](http://i.imgur.com/rWoqoLB.gif)
### Self-destructing pages
Just like in mission impossible.
![Self-destructing](http://i.imgur.com/upMxFQh.gif)
## License
MIT

View File

@@ -0,0 +1 @@
0689ef697703381e56db9e318921ec13f34f56f5

222
db.go
View File

@@ -1,222 +0,0 @@
package main
import (
"encoding/json"
"fmt"
"log"
"strings"
"time"
"github.com/boltdb/bolt"
"github.com/sergi/go-diff/diffmatchpatch"
)
var db *bolt.DB
var open bool
// Open to create the database and open
func Open(filename string) error {
var err error
config := &bolt.Options{Timeout: 30 * time.Second}
db, err = bolt.Open(filename, 0600, config)
if err != nil {
fmt.Println("Opening BoltDB timed out")
log.Fatal(err)
}
open = true
return nil
}
// Close database
func Close() {
open = false
db.Close()
}
// WikiData is data for storing in DB
type WikiData struct {
Title string
CurrentText string
Diffs []string
Timestamps []string
Encrypted bool
Locked string
}
func hasPassword(title string) (bool, error) {
title = strings.ToLower(title)
if !open {
Open(RuntimeArgs.DatabaseLocation)
defer Close()
}
hasPassword := false
err := db.View(func(tx *bolt.Tx) error {
var err error
b := tx.Bucket([]byte("datas"))
if b == nil {
return fmt.Errorf("db must be opened before loading")
}
k := []byte(title)
val := b.Get(k)
if val == nil {
return nil
}
var p WikiData
err = p.decode(val)
if err != nil {
return err
}
for _, line := range strings.Split(p.CurrentText, "\n") {
if strings.Contains(line, "<") == true && strings.Contains(line, ">") == true && strings.Contains(line, "user") == true && strings.Contains(line, "password") == true && strings.Contains(line, "public") == true {
hasPassword = true
}
}
return nil
})
if err != nil {
fmt.Printf("Could not get WikiData: %s", err)
return false, err
}
return hasPassword, nil
}
func getCurrentText(title string, version int) (string, []versionsInfo, bool, time.Duration, bool, string) {
Open(RuntimeArgs.DatabaseLocation)
defer Close()
title = strings.ToLower(title)
var vi []versionsInfo
totalTime := time.Now().Sub(time.Now())
isCurrent := true
currentText := ""
encrypted := false
locked := ""
if !open {
return currentText, vi, isCurrent, totalTime, encrypted, locked
}
err := db.View(func(tx *bolt.Tx) error {
var err error
b := tx.Bucket([]byte("datas"))
if b == nil {
return fmt.Errorf("db must be opened before loading")
}
k := []byte(title)
val := b.Get(k)
if val == nil {
return nil
}
var p WikiData
err = p.decode(val)
if err != nil {
return err
}
currentText = p.CurrentText
encrypted = p.Encrypted
locked = p.Locked
if version > -1 && version < len(p.Diffs) {
// get that version of text instead
currentText = rebuildTextsToDiffN(p, version)
isCurrent = false
}
vi, totalTime = getImportantVersions(p)
log.Println(totalTime)
return nil
})
if err != nil {
fmt.Printf("Could not get WikiData: %s", err)
}
return currentText, vi, isCurrent, totalTime, encrypted, locked
}
func (p *WikiData) load(title string) error {
title = strings.ToLower(title)
if !open {
Open(RuntimeArgs.DatabaseLocation)
defer Close()
}
err := db.View(func(tx *bolt.Tx) error {
var err error
b := tx.Bucket([]byte("datas"))
if b == nil {
return nil
}
k := []byte(title)
val := b.Get(k)
if val == nil {
// make new one
p.Title = title
p.CurrentText = ""
p.Diffs = []string{}
p.Timestamps = []string{}
return nil
}
err = p.decode(val)
if err != nil {
return err
}
return nil
})
if err != nil {
fmt.Printf("Could not get WikiData: %s", err)
return err
}
return nil
}
func (p *WikiData) save(newText string) error {
if !open {
Open(RuntimeArgs.DatabaseLocation)
defer Close()
}
err := db.Update(func(tx *bolt.Tx) error {
bucket, err := tx.CreateBucketIfNotExists([]byte("datas"))
if err != nil {
return fmt.Errorf("create bucket: %s", err)
}
// find diffs
dmp := diffmatchpatch.New()
diffs := dmp.DiffMain(p.CurrentText, newText, true)
delta := dmp.DiffToDelta(diffs)
p.CurrentText = newText
p.Timestamps = append(p.Timestamps, time.Now().Format(time.ANSIC))
p.Diffs = append(p.Diffs, delta)
enc, err := p.encode()
if err != nil {
return fmt.Errorf("could not encode WikiData: %s", err)
}
p.Title = strings.ToLower(p.Title)
err = bucket.Put([]byte(p.Title), enc)
if err != nil {
return fmt.Errorf("could add to bucket: %s", err)
}
return err
})
// // Add the new name to the programdata so its not randomly generated
// if err == nil && len(p.Timestamps) > 0 && len(p.CurrentText) > 0 {
// err2 := db.Update(func(tx *bolt.Tx) error {
// b := tx.Bucket([]byte("programdata"))
// id, _ := b.NextSequence()
// idInt := int(id)
// return b.Put(itob(idInt), []byte(p.Title))
// })
// if err2 != nil {
// return fmt.Errorf("could not add to programdata: %s", err)
// }
// }
return err
}
func (p *WikiData) encode() ([]byte, error) {
enc, err := json.Marshal(p)
if err != nil {
return nil, err
}
return enc, nil
}
func (p *WikiData) decode(data []byte) error {
err := json.Unmarshal(data, &p)
if err != nil {
return err
}
return nil
}

View File

@@ -1,73 +0,0 @@
package main
import (
"bytes"
"errors"
"io/ioutil"
"log"
"golang.org/x/crypto/openpgp"
"golang.org/x/crypto/openpgp/armor"
)
var encryptionType string
func init() {
encryptionType = "PGP SIGNATURE"
}
func encryptString(encryptionText string, encryptionPassphraseString string) string {
encryptionPassphrase := []byte(encryptionPassphraseString)
encbuf := bytes.NewBuffer(nil)
w, err := armor.Encode(encbuf, encryptionType, nil)
if err != nil {
log.Fatal(err)
}
plaintext, err := openpgp.SymmetricallyEncrypt(w, encryptionPassphrase, nil, nil)
if err != nil {
log.Fatal(err)
}
message := []byte(encryptionText)
_, err = plaintext.Write(message)
plaintext.Close()
w.Close()
return encbuf.String()
}
func decryptString(decryptionString string, encryptionPassphraseString string) (string, error) {
encryptionPassphrase := []byte(encryptionPassphraseString)
decbuf := bytes.NewBuffer([]byte(decryptionString))
result, err := armor.Decode(decbuf)
if err != nil {
return "", err
}
alreadyPrompted := false
md, err := openpgp.ReadMessage(result.Body, nil, func(keys []openpgp.Key, symmetric bool) ([]byte, error) {
if alreadyPrompted {
return nil, errors.New("Could not decrypt using passphrase")
} else {
alreadyPrompted = true
}
return encryptionPassphrase, nil
}, nil)
if err != nil {
return "", err
}
bytes, err := ioutil.ReadAll(md.UnverifiedBody)
if err != nil {
return "", err
}
return string(bytes), nil
}
// func main() {
// test := encryptString("This is some string", "golang")
// fmt.Println(test)
// testD := decryptString(test, "golang")
// fmt.Println(testD)
//
// }

376
handlers.go Executable file
View File

@@ -0,0 +1,376 @@
package main
import (
"html/template"
"net/http"
"strconv"
"strings"
"time"
// "github.com/gin-contrib/static"
"github.com/gin-contrib/multitemplate"
"github.com/gin-gonic/gin"
)
func serve(port string) {
gin.SetMode(gin.ReleaseMode)
router := gin.Default()
router.HTMLRender = loadTemplates("index.tmpl")
// router.Use(static.Serve("/static/", static.LocalFile("./static", true)))
router.GET("/", func(c *gin.Context) {
c.Redirect(302, "/"+randomAlliterateCombo())
})
router.GET("/:page", func(c *gin.Context) {
page := c.Param("page")
c.Redirect(302, "/"+page+"/edit")
})
router.GET("/:page/*command", handlePageRequest)
router.POST("/update", handlePageUpdate)
router.POST("/prime", handlePrime)
router.POST("/lock", handleLock)
router.POST("/encrypt", handleEncrypt)
router.DELETE("/oldlist", handleClearOldListItems)
router.DELETE("/listitem", deleteListItem)
router.Run(":" + port)
}
func loadTemplates(list ...string) multitemplate.Render {
r := multitemplate.New()
for _, x := range list {
templateString, err := Asset("templates/" + x)
if err != nil {
panic(err)
}
tmplMessage, err := template.New(x).Parse(string(templateString))
if err != nil {
panic(err)
}
r.Add(x, tmplMessage)
}
return r
}
func handlePageRequest(c *gin.Context) {
page := c.Param("page")
command := c.Param("command")
if len(command) < 2 {
command = "/ "
}
// Serve static content from memory
if page == "static" {
filename := page + command
data, err := Asset(filename)
if err != nil {
c.String(http.StatusInternalServerError, "Could not find data")
}
c.Data(http.StatusOK, contentType(filename), data)
return
}
version := c.DefaultQuery("version", "ajksldfjl")
p := Open(page)
// Disallow anything but viewing locked/encrypted pages
if (p.IsEncrypted || p.IsLocked) &&
(command[0:2] != "/v" && command[0:2] != "/r") {
c.Redirect(302, "/"+page+"/view")
return
}
// Destroy page if it is opened and primed
if p.IsPrimedForSelfDestruct && !p.IsLocked && !p.IsEncrypted {
p.Update("*This page has self-destructed. You can not return to it.*\n\n" + p.Text.GetCurrent())
p.Erase()
}
if command == "/erase" {
if !p.IsLocked && !p.IsEncrypted {
p.Erase()
c.Redirect(302, "/"+page+"/edit")
} else {
c.Redirect(302, "/"+page+"/view")
}
return
}
rawText := p.Text.GetCurrent()
rawHTML := p.RenderedPage
// Check to see if an old version is requested
versionInt, versionErr := strconv.Atoi(version)
if versionErr == nil && versionInt > 0 {
versionText, err := p.Text.GetPreviousByTimestamp(int64(versionInt))
if err == nil {
rawText = versionText
rawHTML = GithubMarkdownToHTML(rawText)
}
}
// Get history
var versionsInt64 []int64
var versionsChangeSums []int
var versionsText []string
if command[0:2] == "/h" {
versionsInt64, versionsChangeSums = p.Text.GetMajorSnapshotsAndChangeSums(60) // get snapshots 60 seconds apart
versionsText = make([]string, len(versionsInt64))
for i, v := range versionsInt64 {
versionsText[i] = time.Unix(v/1000000000, 0).Format("Mon Jan 2 15:04:05 MST 2006")
}
versionsText = reverseSliceString(versionsText)
versionsInt64 = reverseSliceInt64(versionsInt64)
versionsChangeSums = reverseSliceInt(versionsChangeSums)
}
if command[0:2] == "/r" {
c.Writer.Header().Set("Content-Type", contentType(p.Name))
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Max-Age", "86400")
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, X-Max")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
c.Data(200, contentType(p.Name), []byte(rawText))
return
}
log.Debug(command)
log.Debug("%v", command[0:2] != "/e" &&
command[0:2] != "/v" &&
command[0:2] != "/l" &&
command[0:2] != "/h")
var FileNames, FileLastEdited []string
var FileSizes, FileNumChanges []int
if page == "ls" {
command = "/view"
FileNames, FileSizes, FileNumChanges, FileLastEdited = DirectoryList()
}
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"EditPage": command[0:2] == "/e", // /edit
"ViewPage": command[0:2] == "/v", // /view
"ListPage": command[0:2] == "/l", // /list
"HistoryPage": command[0:2] == "/h", // /history
"DontKnowPage": command[0:2] != "/e" &&
command[0:2] != "/v" &&
command[0:2] != "/l" &&
command[0:2] != "/h",
"DirectoryPage": page == "ls",
"FileNames": FileNames,
"FileSizes": FileSizes,
"FileNumChanges": FileNumChanges,
"FileLastEdited": FileLastEdited,
"Page": page,
"RenderedPage": template.HTML([]byte(rawHTML)),
"RawPage": rawText,
"Versions": versionsInt64,
"VersionsText": versionsText,
"VersionsChangeSums": versionsChangeSums,
"IsLocked": p.IsLocked,
"IsEncrypted": p.IsEncrypted,
"ListItems": renderList(rawText),
"Route": "/" + page + command,
"HasDotInName": strings.Contains(page, "."),
})
}
func handlePageUpdate(c *gin.Context) {
type QueryJSON struct {
Page string `json:"page"`
NewText string `json:"new_text"`
}
var json QueryJSON
if c.BindJSON(&json) != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Wrong JSON"})
return
}
if len(json.NewText) > 100000 {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Too much"})
return
}
log.Trace("Update: %v", json)
p := Open(json.Page)
var message string
if p.IsLocked {
message = "Locked"
} else if p.IsEncrypted {
message = "Encrypted"
} else {
p.Update(json.NewText)
p.Save()
message = "Saved"
}
c.JSON(http.StatusOK, gin.H{"success": true, "message": message})
}
func handlePrime(c *gin.Context) {
type QueryJSON struct {
Page string `json:"page"`
}
var json QueryJSON
if c.BindJSON(&json) != nil {
c.String(http.StatusBadRequest, "Problem binding keys")
return
}
log.Trace("Update: %v", json)
p := Open(json.Page)
if p.IsLocked {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Locked"})
return
} else if p.IsEncrypted {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Encrypted"})
return
}
p.IsPrimedForSelfDestruct = true
p.Save()
c.JSON(http.StatusOK, gin.H{"success": true, "message": "Primed"})
}
func handleLock(c *gin.Context) {
type QueryJSON struct {
Page string `json:"page"`
Passphrase string `json:"passphrase"`
}
var json QueryJSON
if c.BindJSON(&json) != nil {
c.String(http.StatusBadRequest, "Problem binding keys")
return
}
p := Open(json.Page)
if p.IsEncrypted {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Encrypted"})
return
}
var message string
if p.IsLocked {
err2 := CheckPasswordHash(json.Passphrase, p.PassphraseToUnlock)
if err2 != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Can't unlock"})
return
}
p.IsLocked = false
message = "Unlocked"
} else {
p.IsLocked = true
p.PassphraseToUnlock = HashPassword(json.Passphrase)
message = "Locked"
}
p.Save()
c.JSON(http.StatusOK, gin.H{"success": true, "message": message})
}
func handleEncrypt(c *gin.Context) {
type QueryJSON struct {
Page string `json:"page"`
Passphrase string `json:"passphrase"`
}
var json QueryJSON
if c.BindJSON(&json) != nil {
c.String(http.StatusBadRequest, "Problem binding keys")
return
}
p := Open(json.Page)
if p.IsLocked {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Locked"})
return
}
q := Open(json.Page)
var message string
if p.IsEncrypted {
decrypted, err2 := DecryptString(p.Text.GetCurrent(), json.Passphrase)
if err2 != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Wrong password"})
return
}
q.Erase()
q = Open(json.Page)
q.Update(decrypted)
q.IsEncrypted = false
q.IsLocked = p.IsLocked
q.IsPrimedForSelfDestruct = p.IsPrimedForSelfDestruct
message = "Decrypted"
} else {
currentText := p.Text.GetCurrent()
encrypted, _ := EncryptString(currentText, json.Passphrase)
q.Erase()
q = Open(json.Page)
q.Update(encrypted)
q.IsEncrypted = true
q.IsLocked = p.IsLocked
q.IsPrimedForSelfDestruct = p.IsPrimedForSelfDestruct
message = "Encrypted"
}
q.Save()
c.JSON(http.StatusOK, gin.H{"success": true, "message": message})
}
func deleteListItem(c *gin.Context) {
lineNum, err := strconv.Atoi(c.DefaultQuery("lineNum", "None"))
page := c.Query("page") // shortcut for c.Request.URL.Query().Get("lastname")
if err == nil {
p := Open(page)
_, listItems := reorderList(p.Text.GetCurrent())
newText := p.Text.GetCurrent()
for i, lineString := range listItems {
// fmt.Println(i, lineString, lineNum)
if i+1 == lineNum {
// fmt.Println("MATCHED")
if strings.Contains(lineString, "~~") == false {
// fmt.Println(p.Text, "("+lineString[2:]+"\n"+")", "~~"+lineString[2:]+"~~"+"\n")
newText = strings.Replace(newText+"\n", lineString[2:]+"\n", "~~"+strings.TrimSpace(lineString[2:])+"~~"+"\n", 1)
} else {
newText = strings.Replace(newText+"\n", lineString[2:]+"\n", lineString[4:len(lineString)-2]+"\n", 1)
}
p.Update(newText)
break
}
}
c.JSON(200, gin.H{
"success": true,
"message": "Done.",
})
} else {
c.JSON(200, gin.H{
"success": false,
"message": err.Error(),
})
}
}
func handleClearOldListItems(c *gin.Context) {
type QueryJSON struct {
Page string `json:"page"`
}
var json QueryJSON
if c.BindJSON(&json) != nil {
c.String(http.StatusBadRequest, "Problem binding keys")
return
}
p := Open(json.Page)
if p.IsEncrypted {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Encrypted"})
return
}
if p.IsLocked {
c.JSON(http.StatusOK, gin.H{"success": false, "message": "Locked"})
return
}
lines := strings.Split(p.Text.GetCurrent(), "\n")
newLines := make([]string, len(lines))
newLinesI := 0
for _, line := range lines {
if strings.Count(line, "~~") != 2 {
newLines[newLinesI] = line
newLinesI++
}
}
p.Update(strings.Join(newLines[0:newLinesI], "\n"))
p.Save()
c.JSON(http.StatusOK, gin.H{"success": true, "message": "Cleared"})
}

View File

@@ -1,101 +0,0 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides: awwkoala
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# This should be placed in /etc/init.d directory
# start with
# sudo /etc/init.d/awwkoala start
# stop with
# sudo /etc/init.d/awwkoala start
dir="CUR_DIR"
user="USERCUR"
cmd="./awwkoala -p :PORT EXT_ADDRESS"
name="awwkoala"
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid() {
cat "$pid_file"
}
is_running() {
[ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}
case "$1" in
start)
if is_running; then
echo "Already started"
else
echo "Starting $name"
cd "$dir"
sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
echo $! > "$pid_file"
if ! is_running; then
echo "Unable to start, see $stdout_log and $stderr_log"
exit 1
fi
fi
;;
stop)
if is_running; then
echo -n "Stopping $name.."
kill `get_pid`
for i in {1..10}
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; may still be shutting down or shutdown may have failed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file" ]; then
rm "$pid_file"
fi
fi
else
echo "Not running"
fi
;;
restart)
$0 stop
if is_running; then
echo "Unable to stop, will not attempt to start"
exit 1
fi
$0 start
;;
status)
if is_running; then
echo "Running"
else
echo "Stopped"
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0

View File

@@ -1,41 +0,0 @@
server {
# SERVER BLOCK FOR awwkoala
listen 80; ## listen for ipv4; this line is default and implied
access_log /etc/nginx/logs/access-awwkoala.log;
error_log /etc/nginx/logs/error-awwkoala.log info;
root CUR_DIR;
server_name ADDRESS;
# Media: images, icons, video, audio, HTC
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
# CSS and Javascript
location ~* \.(?:css|js)$ {
expires 1y;
access_log off;
add_header Cache-Control "public";
}
location ^~ /static {
try_files $uri $uri/ =404;
}
location ~ ^/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:PORT;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

View File

@@ -1,31 +0,0 @@
ADDRESS = yourserver.com
PORT = 8003
CUR_DIR = $(shell bash -c 'pwd')
USERCUR = $(shell bash -c 'whoami')
make:
go build
install:
rm -rf jinstall
mkdir jinstall
cp awwkoala.ssl.nginx awwkoala.ssl.nginx.temp
sed -i 's/PORT/$(PORT)/g' awwkoala.ssl.nginx.temp
sed -i 's/ADDRESS/$(ADDRESS)/g' awwkoala.ssl.nginx.temp
sed -i 's^CUR_DIR^$(CUR_DIR)^g' awwkoala.ssl.nginx.temp
cp awwkoala.init awwkoala.init.temp
sed -i 's/EXT_ADDRESS/$(ADDRESS)/g' awwkoala.init.temp
sed -i 's^CUR_DIR^$(CUR_DIR)^g' awwkoala.init.temp
sed -i 's^USERCUR^$(USERCUR)^g' awwkoala.init.temp
sed -i 's^PORT^$(PORT)^g' awwkoala.init.temp
cp awwkoala.init.temp /etc/init.d/awwkoala.init
chmod +x /etc/init.d/awwkoala.init
cp awwkoala.ssl.nginx.temp /etc/nginx/sites-available/awwkoala.nginx
ln -fs /etc/nginx/sites-available/awwkoala.nginx /etc/nginx/sites-enabled/awwkoala.nginx
/etc/init.d/nginx reload
/etc/init.d/nginx restart
/etc/init.d/awwkoala.init restart
rm -rf *.temp
.PHONY: install

View File

@@ -1,17 +0,0 @@
First install the NGINX block in this directory. (There is an experimental Makefile that will do this, just try `sudo make install`.
To use letsencrypt follow these steps:
```
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
sudo service nginx stop
sudo ./letsencrypt-auto certonly --standalone --email youremail@somewhere.com -d yourserver.com
sudo service nginx start
```
Then startup `awwkoala` with
```bash
sudo ./awwkoala -p :8001 -key /etc/letsencrypt/live/yourserver.com/privkey.pem -crt /etc/letsencrypt/live/yourserver.com/cert.pem yourserver.com
```

View File

@@ -1,101 +0,0 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides: awwkoala
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# This should be placed in /etc/init.d directory
# start with
# sudo /etc/init.d/awwkoala start
# stop with
# sudo /etc/init.d/awwkoala start
dir="CUR_DIR"
user="USERCUR"
cmd="./awwkoala -p :PORT -key /etc/letsencrypt/live/EXT_ADDRESS/privkey.pem -crt /etc/letsencrypt/live/EXT_ADDRESS/cert.pem yourserver.com./awwkoala EXT_ADDRESS"
name="awwkoala"
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid() {
cat "$pid_file"
}
is_running() {
[ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}
case "$1" in
start)
if is_running; then
echo "Already started"
else
echo "Starting $name"
cd "$dir"
sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
echo $! > "$pid_file"
if ! is_running; then
echo "Unable to start, see $stdout_log and $stderr_log"
exit 1
fi
fi
;;
stop)
if is_running; then
echo -n "Stopping $name.."
kill `get_pid`
for i in {1..10}
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; may still be shutting down or shutdown may have failed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file" ]; then
rm "$pid_file"
fi
fi
else
echo "Not running"
fi
;;
restart)
$0 stop
if is_running; then
echo "Unable to stop, will not attempt to start"
exit 1
fi
$0 start
;;
status)
if is_running; then
echo "Running"
else
echo "Stopped"
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0

View File

@@ -1,50 +0,0 @@
server {
listen 80;
server_name ADDRESS;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
# SERVER BLOCK FOR ADDRESS
listen 443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/ADDRESS/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ADDRESS/privkey.pem;
access_log /etc/nginx/logs/access-ADDRESS.log;
error_log /etc/nginx/logs/error-ADDRESS.log info;
root CUR_DIR;
server_name ADDRESS;
# Media: images, icons, video, audio, HTC
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
# CSS and Javascript
location ~* \.(?:css|js)$ {
expires 1y;
access_log off;
add_header Cache-Control "public";
}
location ^~ /static {
try_files $uri $uri/ =404;
}
location ~ ^/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass https://127.0.0.1:PORT;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

62
listify.go Normal file
View File

@@ -0,0 +1,62 @@
package main
import (
"html/template"
"strconv"
"strings"
)
func reorderList(text string) ([]template.HTML, []string) {
listItemsString := ""
for _, lineString := range strings.Split(text, "\n") {
if len(lineString) > 1 {
if string(lineString[0]) != "-" {
listItemsString += "- " + lineString + "\n"
} else {
listItemsString += lineString + "\n"
}
}
}
// get ordering of template.HTML for rendering
renderedListString := MarkdownToHtml(listItemsString)
listItems := []template.HTML{}
endItems := []template.HTML{}
for _, lineString := range strings.Split(renderedListString, "\n") {
if len(lineString) > 1 {
if strings.Contains(lineString, "<del>") || strings.Contains(lineString, "</ul>") {
endItems = append(endItems, template.HTML(lineString))
} else {
listItems = append(listItems, template.HTML(lineString))
}
}
}
// get ordering of strings for deleting
listItemsStringArray := []string{}
endItemsStringArray := []string{}
for _, lineString := range strings.Split(listItemsString, "\n") {
if len(lineString) > 1 {
if strings.Contains(lineString, "~~") {
endItemsStringArray = append(endItemsStringArray, lineString)
} else {
listItemsStringArray = append(listItemsStringArray, lineString)
}
}
}
return append(listItems, endItems...), append(listItemsStringArray, endItemsStringArray...)
}
func renderList(currentRawText string) []template.HTML {
listItems, _ := reorderList(currentRawText)
for i := range listItems {
newHTML := strings.Replace(string(listItems[i]), "</a>", "</a>"+`<span id="`+strconv.Itoa(i)+`" class="deletable">`, -1)
newHTML = strings.Replace(newHTML, "<a href=", "</span><a href=", -1)
newHTML = strings.Replace(newHTML, "<li>", "<li>"+`<span id="`+strconv.Itoa(i)+`" class="deletable">`, -1)
newHTML = strings.Replace(newHTML, "</li>", "</span></li>", -1)
newHTML = strings.Replace(newHTML, "<li>"+`<span id="`+strconv.Itoa(i)+`" class="deletable"><del>`, "<li><del>"+`<span id="`+strconv.Itoa(i)+`" class="deletable">`, -1)
newHTML = strings.Replace(newHTML, "</del></span></li>", "</span></del></li>", -1)
listItems[i] = template.HTML([]byte(newHTML))
}
return listItems
}

173
main.go Normal file → Executable file
View File

@@ -1,122 +1,79 @@
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"path"
"time"
"github.com/boltdb/bolt"
"github.com/gin-gonic/gin"
"gopkg.in/urfave/cli.v1"
)
// AllowedIPs is a white/black list of
// IP addresses allowed to access awwkoala
var AllowedIPs = map[string]bool{
"192.168.1.13": true,
"192.168.1.12": true,
"192.168.1.2": true,
}
// RuntimeArgs contains all runtime
// arguments available
var RuntimeArgs struct {
WikiName string
ExternalIP string
Port string
DatabaseLocation string
ServerCRT string
ServerKey string
SourcePath string
AdminKey string
Socket string
}
var VersionNum string
var version string
var pathToData string
func main() {
VersionNum = "0.94"
// _, executableFile, _, _ := runtime.Caller(0) // get full path of this file
cwd, _ := os.Getwd()
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.WikiName, "w", "AwwKoala", "custom name for wiki")
dumpDataset := flag.Bool("dump", false, "flag to dump all data to 'dump' directory")
flag.CommandLine.Usage = func() {
fmt.Println(`AwwKoala (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).
Example: 'awwkoala yourserver.com'
Example: 'awwkoala -p :8080 localhost:8080'
Example: 'awwkoala -db /var/lib/awwkoala/db.bolt localhost:8003'
Example: 'awwkoala -p :8080 -crt ssl/server.crt -key ssl/server.key localhost:8080'
Options:`)
flag.CommandLine.PrintDefaults()
}
flag.Parse()
if *dumpDataset {
fmt.Println("Dumping data to 'dump' folder...")
dumpEverything()
os.Exit(1)
}
RuntimeArgs.ExternalIP = flag.Arg(0)
if RuntimeArgs.ExternalIP == "" {
RuntimeArgs.ExternalIP = GetLocalIP() + RuntimeArgs.Port
}
RuntimeArgs.SourcePath = cwd
// create programdata bucket
Open(RuntimeArgs.DatabaseLocation)
err := db.Update(func(tx *bolt.Tx) error {
_, err := tx.CreateBucketIfNotExists([]byte("programdata"))
if err != nil {
return fmt.Errorf("create bucket: %s", err)
app := cli.NewApp()
app.Name = "cowyo"
app.Usage = "a simple wiki"
app.Version = version
app.Compiled = time.Now()
app.Action = func(c *cli.Context) error {
if !c.GlobalBool("debug") {
turnOffDebugger()
}
return err
})
if err != nil {
panic(err)
pathToData = c.GlobalString("data")
os.MkdirAll(pathToData, 0755)
fmt.Printf("\nRunning cowyo server (version %s) at http://%s:%s\n\n", version, GetLocalIP(), c.GlobalString("port"))
serve(c.GlobalString("port"))
return nil
}
Close()
// Default page
aboutFile, _ := ioutil.ReadFile(path.Join(RuntimeArgs.SourcePath, "templates/aboutpage.md"))
p := WikiData{"help", "", []string{}, []string{}, false, "zzz"}
p.save(string(aboutFile))
// var q WikiData
// q.load("about")
// fmt.Println(getImportantVersions(q))
r := gin.Default()
r.LoadHTMLGlob(path.Join(RuntimeArgs.SourcePath, "templates/*"))
r.GET("/", newNote)
r.HEAD("/", func(c *gin.Context) { c.Status(200) })
r.GET("/:title", editNote)
r.GET("/:title/*option", everythingElse)
r.POST("/:title/*option", encryptionRoute)
r.DELETE("/listitem", deleteListItem)
r.DELETE("/deletepage", deletePage)
if RuntimeArgs.ServerCRT != "" && RuntimeArgs.ServerKey != "" {
RuntimeArgs.Socket = "wss"
fmt.Println("--------------------------")
fmt.Println("AwwKoala (version " + VersionNum + ") is up and running on https://" + RuntimeArgs.ExternalIP)
fmt.Println("Admin key: " + RuntimeArgs.AdminKey)
fmt.Println("--------------------------")
r.RunTLS(RuntimeArgs.Port, RuntimeArgs.ServerCRT, RuntimeArgs.ServerKey)
} else {
RuntimeArgs.Socket = "ws"
fmt.Println("--------------------------")
fmt.Println("AwwKoala (version " + VersionNum + ") is up and running on http://" + RuntimeArgs.ExternalIP)
fmt.Println("Admin key: " + RuntimeArgs.AdminKey)
fmt.Println("--------------------------")
r.Run(RuntimeArgs.Port)
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "data",
Value: "data",
Usage: "data folder to use",
},
cli.StringFlag{
Name: "olddata",
Value: "",
Usage: "data folder for migrating",
},
cli.StringFlag{
Name: "port,p",
Value: "8050",
Usage: "port to use",
},
cli.BoolFlag{
Name: "debug, d",
Usage: "turn on debugging",
},
}
app.Commands = []cli.Command{
{
Name: "migrate",
Aliases: []string{"m"},
Usage: "migrate from the old cowyo",
Action: func(c *cli.Context) error {
if !c.GlobalBool("debug") {
turnOffDebugger()
}
pathToData = c.GlobalString("data")
pathToOldData := c.GlobalString("olddata")
if len(pathToOldData) == 0 {
fmt.Printf("You need to specify folder with -olddata")
return nil
}
os.MkdirAll(pathToData, 0755)
if !exists(pathToOldData) {
fmt.Printf("Can not find '%s', does it exist?", pathToOldData)
return nil
}
migrate(pathToOldData, pathToData)
return nil
},
},
}
app.Run(os.Args)
}

View File

@@ -1,59 +0,0 @@
import os
"""DEFUNCT
darwin arm
darwin arm64
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux arm64
linux ppc64le
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
openbsd arm
plan9 386
plan9 amd64
solaris amd64
windows 386
darwin 386
darwin amd64
linux arm
linux ppc64
windows amd64"""
arches = """linux amd64
windows amd64
linux arm
darwin amd64"""
arches = arches.split("\n")
version = "1.0"
programName = "awwkoala"
try:
os.system("rm -rf builds")
except:
pass
os.mkdir("builds")
for arch in arches:
goos = arch.split()[0]
goarch = arch.split()[1]
exe = ""
if "windows" in goos:
exe = ".exe"
cmd1 = 'env GOOS=%(goos)s GOARCH=%(goarch)s go build -o builds/%(programName)s%(exe)s' % {'goos':goos,'goarch':goarch,'exe':exe,'programName':programName}
cmd2 = 'zip -r %(programName)s-%(version)s-%(goos)s-%(goarch)s.zip %(programName)s%(exe)s ../templates ../static' % {'goos':goos,'goarch':goarch,'exe':exe,'version':version,'programName':programName}
print(cmd1)
os.system(cmd1)
os.chdir("builds")
print(cmd2)
os.system(cmd2)
cmd3 = 'rm %(programName)s%(exe)s' % {'exe':exe,'programName':programName}
print(cmd3)
os.system(cmd3)
os.chdir("../")

25
migrate.go Executable file
View File

@@ -0,0 +1,25 @@
package main
import (
"fmt"
"io/ioutil"
"path"
)
func migrate(pathToOldData, pathToData string) error {
files, _ := ioutil.ReadDir(pathToOldData)
for _, f := range files {
fmt.Printf("Migrating %s", f.Name())
p := Open(f.Name())
bData, err := ioutil.ReadFile(path.Join(pathToOldData, f.Name()))
if err != nil {
return err
}
err = p.Update(string(bData))
if err != nil {
return err
}
p.Save()
}
return nil
}

96
page.go Executable file
View File

@@ -0,0 +1,96 @@
package main
import (
"encoding/json"
"io/ioutil"
"os"
"path"
"regexp"
"strings"
"time"
"github.com/schollz/versionedtext"
)
// Page is the basic struct
type Page struct {
Name string
Text versionedtext.VersionedText
RenderedPage string
IsLocked bool
PassphraseToUnlock string
IsEncrypted bool
IsPrimedForSelfDestruct bool
}
func Open(name string) (p *Page) {
p = new(Page)
p.Name = name
p.Text = versionedtext.NewVersionedText("")
p.Render()
bJSON, err := ioutil.ReadFile(path.Join(pathToData, encodeToBase32(strings.ToLower(name))+".json"))
if err != nil {
return
}
err = json.Unmarshal(bJSON, &p)
if err != nil {
p = new(Page)
}
return p
}
func DirectoryList() (names []string, lengths []int, numchanges []int, lastEdited []string) {
files, _ := ioutil.ReadDir(pathToData)
names = make([]string, len(files))
lengths = make([]int, len(files))
numchanges = make([]int, len(files))
lastEdited = make([]string, len(files))
for i, f := range files {
names[i] = DecodeFileName(f.Name())
p := Open(names[i])
lengths[i] = len(p.Text.GetCurrent())
numchanges[i] = p.Text.NumEdits()
lastEdited[i] = time.Unix(p.Text.LastEditTime()/1000000000, 0).Format("Mon Jan 2 15:04:05 MST 2006")
}
return
}
func DecodeFileName(s string) string {
s2, _ := decodeFromBase32(strings.Split(s, ".")[0])
return s2
}
func (p *Page) Update(newText string) error {
p.Text.Update(newText)
p.Render()
return p.Save()
}
func (p *Page) Render() {
if p.IsEncrypted {
p.RenderedPage = "<code>" + p.Text.GetCurrent() + "</code>"
return
}
// Convert [[page]] to [page](/page/view)
r, _ := regexp.Compile("\\[\\[(.*?)\\]\\]")
currentText := p.Text.GetCurrent()
for _, s := range r.FindAllString(currentText, -1) {
currentText = strings.Replace(currentText, s, "["+s[2:len(s)-2]+"](/"+s[2:len(s)-2]+"/view)", 1)
}
p.Text.Update(currentText)
p.RenderedPage = MarkdownToHtml(p.Text.GetCurrent())
}
func (p *Page) Save() error {
bJSON, err := json.MarshalIndent(p, "", " ")
if err != nil {
return err
}
return ioutil.WriteFile(path.Join(pathToData, encodeToBase32(strings.ToLower(p.Name))+".json"), bJSON, 0755)
}
func (p *Page) Erase() error {
log.Trace("Erasing " + p.Name)
return os.Remove(path.Join(pathToData, encodeToBase32(strings.ToLower(p.Name))+".json"))
}

49
page_test.go Executable file
View File

@@ -0,0 +1,49 @@
package main
import (
// "fmt"
"os"
"strings"
"testing"
)
func TestListFiles(t *testing.T) {
pathToData = "testdata"
os.MkdirAll(pathToData, 0755)
defer os.RemoveAll(pathToData)
p := Open("testpage")
p.Update("Some data")
p = Open("testpage2")
p.Update("A different bunch of data")
p = Open("testpage3")
p.Update("Not much else")
n, l := DirectoryList()
if strings.Join(n, " ") != "testpage testpage2 testpage3" {
t.Errorf("Names: %s, Lengths: %d", n, l)
}
}
func TestGeneral(t *testing.T) {
pathToData = "testdata"
os.MkdirAll(pathToData, 0755)
defer os.RemoveAll(pathToData)
p := Open("testpage")
err := p.Update("**bold**")
if err != nil {
t.Error(err)
}
if strings.TrimSpace(p.RenderedPage) != "<p><strong>bold</strong></p>" {
t.Errorf("Did not render: '%s'", p.RenderedPage)
}
err = p.Update("**bold** and *italic*")
if err != nil {
t.Error(err)
}
p.Save()
p2 := Open("testpage")
if strings.TrimSpace(p2.RenderedPage) != "<p><strong>bold</strong> and <em>italic</em></p>" {
t.Errorf("Did not render: '%s'", p2.RenderedPage)
}
}

485
routes.go
View File

@@ -1,485 +0,0 @@
package main
import (
"fmt"
"html/template"
"io/ioutil"
"net/http"
"os"
"path"
"regexp"
"strconv"
"strings"
"time"
"github.com/boltdb/bolt"
"github.com/gin-gonic/gin"
"github.com/microcosm-cc/bluemonday"
"github.com/russross/blackfriday"
)
type EncryptionPost struct {
Text string `form:"text" json:"text" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
func encryptionRoute(c *gin.Context) {
title := c.Param("title")
option := c.Param("option")
fmt.Println(option, title)
var jsonLoad EncryptionPost
if option == "/decrypt" {
if c.BindJSON(&jsonLoad) == nil {
var err error
currentText, _, _, _, encrypted, _ := getCurrentText(title, -1)
if encrypted == true {
currentText, err = decryptString(currentText, jsonLoad.Password)
if err != nil {
c.JSON(200, gin.H{
"status": "Inorrect passphrase.",
"title": title,
"option": option,
"success": false,
})
} else {
p := WikiData{strings.ToLower(title), "", []string{}, []string{}, false, ""}
p.save(currentText)
c.JSON(200, gin.H{
"status": "posted",
"title": title,
"option": option,
"success": true,
})
}
}
} else {
c.JSON(200, gin.H{
"status": "Could not bind",
"title": title,
"option": option,
"success": false,
})
}
}
if option == "/encrypt" {
if c.BindJSON(&jsonLoad) == nil {
p := WikiData{strings.ToLower(title), "", []string{}, []string{}, true, ""}
p.save(encryptString(jsonLoad.Text, jsonLoad.Password))
c.JSON(200, gin.H{
"status": "posted",
"title": title,
"option": option,
"success": true,
})
} else {
c.JSON(200, gin.H{
"status": "posted",
"title": title,
"option": option,
"success": false,
})
}
}
if option == "/lock" {
if c.BindJSON(&jsonLoad) == nil {
var p WikiData
err := p.load(strings.ToLower(title))
if err != nil {
panic(err)
}
p.Locked = jsonLoad.Password
p.save(p.CurrentText)
c.JSON(200, gin.H{
"status": "posted",
"title": title,
"option": option,
"success": true,
})
} else {
c.JSON(200, gin.H{
"status": "posted",
"title": title,
"option": option,
"success": false,
})
}
}
if option == "/unlock" {
if c.BindJSON(&jsonLoad) == nil {
var p WikiData
err := p.load(strings.ToLower(title))
if err != nil {
panic(err)
}
if len(p.Locked) > 0 && p.Locked == jsonLoad.Password {
p.Locked = ""
p.save(p.CurrentText)
c.JSON(200, gin.H{
"status": "Unlocked!",
"title": title,
"option": option,
"success": true,
})
} else {
c.JSON(200, gin.H{
"status": "Incorrect password!",
"title": title,
"option": option,
"success": false,
})
}
} else {
c.JSON(200, gin.H{
"status": "posted",
"title": title,
"option": option,
"success": false,
})
}
}
}
func newNote(c *gin.Context) {
title := randomAlliterateCombo()
c.Redirect(302, "/"+title)
}
func editNote(c *gin.Context) {
title := c.Param("title")
if title == "ws" {
wshandler(c.Writer, c.Request)
} else if title == "robots.txt" {
c.Data(200, "text/plain", []byte(robotsTxt))
} else if strings.ToLower(title) == "help" { //}&& strings.Contains(AllowedIPs, c.ClientIP()) != true {
c.Redirect(302, "/Help/view")
} else {
locked, _ := hasPassword(title)
if locked {
c.Redirect(302, "/"+title+"/view")
} else {
version := c.DefaultQuery("version", "-1")
versionNum, _ := strconv.Atoi(version)
currentText, versions, currentVersion, totalTime, encrypted, locked := getCurrentText(title, versionNum)
if encrypted || len(locked) > 0 {
c.Redirect(302, "/"+title+"/view")
}
if strings.Contains(currentText, "self-destruct\n") || strings.Contains(currentText, "\nself-destruct") {
c.Redirect(302, "/"+title+"/view")
}
numRows := len(strings.Split(currentText, "\n")) + 10
totalTimeString := totalTime.String()
if totalTime.Seconds() < 1 {
totalTimeString = "< 1 s"
}
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"Title": title,
"WikiName": RuntimeArgs.WikiName,
"ExternalIP": RuntimeArgs.ExternalIP,
"CurrentText": currentText,
"NumRows": numRows,
"Versions": versions,
"TotalTime": totalTimeString,
"SocketType": RuntimeArgs.Socket,
"NoEdit": !currentVersion,
})
}
}
}
func everythingElse(c *gin.Context) {
option := c.Param("option")
title := c.Param("title")
if option == "/view" {
version := c.DefaultQuery("version", "-1")
noprompt := c.DefaultQuery("noprompt", "-1")
versionNum, _ := strconv.Atoi(version)
if strings.ToLower(title) == "help" {
versionNum = -1
}
currentText, versions, _, totalTime, encrypted, locked := getCurrentText(title, versionNum)
if (strings.Contains(currentText, "self-destruct\n") || strings.Contains(currentText, "\nself-destruct")) && strings.ToLower(title) != "help" {
currentText = strings.Replace(currentText, "self-destruct\n", `> *This page has been deleted, you cannot return after closing.*`+"\n", 1)
currentText = strings.Replace(currentText, "\nself-destruct", "\n"+`> *This page has been deleted, you cannot return after closing.*`, 1)
p := WikiData{strings.ToLower(title), "", []string{}, []string{}, false, ""}
p.save("")
}
renderMarkdown(c, currentText, title, versions, "", totalTime, encrypted, noprompt == "-1", len(locked) > 0)
} else if title == "ls" && option == "/"+RuntimeArgs.AdminKey && len(RuntimeArgs.AdminKey) > 1 {
renderMarkdown(c, listEverything(), "ls", nil, RuntimeArgs.AdminKey, time.Now().Sub(time.Now()), false, false, false)
} else if option == "/list" {
renderList(c, title)
} else if title == "static" {
serveStaticFile(c, option)
} else {
c.Redirect(302, "/"+title)
}
}
func serveStaticFile(c *gin.Context, option string) {
staticFile, err := ioutil.ReadFile(path.Join(RuntimeArgs.SourcePath, "static") + option)
if err != nil {
c.AbortWithStatus(404)
} else {
c.Data(200, contentType(option), []byte(staticFile))
}
}
func renderMarkdown(c *gin.Context, currentText string, title string, versions []versionsInfo, AdminKey string, totalTime time.Duration, encrypted bool, noprompt bool, locked bool) {
r, _ := regexp.Compile("\\[\\[(.*?)\\]\\]")
for _, s := range r.FindAllString(currentText, -1) {
currentText = strings.Replace(currentText, s, "["+s[2:len(s)-2]+"](/"+s[2:len(s)-2]+"/view)", 1)
}
unsafe := blackfriday.MarkdownCommon([]byte(currentText))
pClean := bluemonday.UGCPolicy()
pClean.AllowElements("img")
pClean.AllowAttrs("alt").OnElements("img")
pClean.AllowAttrs("src").OnElements("img")
pClean.AllowAttrs("class").OnElements("a")
pClean.AllowAttrs("href").OnElements("a")
pClean.AllowAttrs("id").OnElements("a")
pClean.AllowDataURIImages()
html := pClean.SanitizeBytes(unsafe)
html2 := string(html)
r, _ = regexp.Compile("\\$\\$(.*?)\\$\\$")
for _, s := range r.FindAllString(html2, -1) {
html2 = strings.Replace(html2, s, "<span class='texp' data-expr='"+s[2:len(s)-2]+"'></span>", 1)
}
r, _ = regexp.Compile("\\$(.*?)\\$")
for _, s := range r.FindAllString(html2, -1) {
html2 = strings.Replace(html2, s, "<span class='texi' data-expr='"+s[1:len(s)-1]+"'></span>", 1)
}
html2 = strings.Replace(html2, "&amp;#36;", "&#36;", -1)
html2 = strings.Replace(html2, "&amp;#91;", "&#91;", -1)
html2 = strings.Replace(html2, "&amp;#93;", "&#93;", -1)
html2 = strings.Replace(html2, "&amp35;", "&#35;", -1)
totalTimeString := totalTime.String()
if totalTime.Seconds() < 1 {
totalTimeString = "< 1 s"
}
c.HTML(http.StatusOK, "view.tmpl", gin.H{
"Title": title,
"WikiName": RuntimeArgs.WikiName,
"Body": template.HTML([]byte(html2)),
"Versions": versions,
"TotalTime": totalTimeString,
"AdminKey": AdminKey,
"Encrypted": encrypted,
"Locked": locked,
"Prompt": noprompt,
"LockedOrEncrypted": locked || encrypted,
})
}
func reorderList(text string) ([]template.HTML, []string) {
listItemsString := ""
for _, lineString := range strings.Split(text, "\n") {
if len(lineString) > 1 {
if string(lineString[0]) != "-" {
listItemsString += "- " + lineString + "\n"
} else {
listItemsString += lineString + "\n"
}
}
}
// get ordering of template.HTML for rendering
renderedListString := string(blackfriday.MarkdownCommon([]byte(listItemsString)))
listItems := []template.HTML{}
endItems := []template.HTML{}
for _, lineString := range strings.Split(renderedListString, "\n") {
if len(lineString) > 1 {
if strings.Contains(lineString, "<del>") || strings.Contains(lineString, "</ul>") {
endItems = append(endItems, template.HTML(lineString))
} else {
listItems = append(listItems, template.HTML(lineString))
}
}
}
// get ordering of strings for deleting
listItemsStringArray := []string{}
endItemsStringArray := []string{}
for _, lineString := range strings.Split(listItemsString, "\n") {
if len(lineString) > 1 {
if strings.Contains(lineString, "~~") {
endItemsStringArray = append(endItemsStringArray, lineString)
} else {
listItemsStringArray = append(listItemsStringArray, lineString)
}
}
}
return append(listItems, endItems...), append(listItemsStringArray, endItemsStringArray...)
}
func renderList(c *gin.Context, title string) {
if strings.ToLower(title) == "help" { //}&& strings.Contains(AllowedIPs, c.ClientIP()) != true {
c.Redirect(302, "/Help/view")
}
var p WikiData
err := p.load(strings.ToLower(title))
if err != nil {
panic(err)
}
currentText := p.CurrentText
if strings.Contains(currentText, "self-destruct\n") || strings.Contains(currentText, "\nself-destruct") {
c.Redirect(302, "/"+title+"/view")
}
if p.Encrypted || len(p.Locked) > 0 {
c.Redirect(302, "/"+title+"/view")
}
pClean := bluemonday.UGCPolicy()
pClean.AllowElements("img")
pClean.AllowAttrs("alt").OnElements("img")
pClean.AllowAttrs("src").OnElements("img")
pClean.AllowAttrs("class").OnElements("a")
pClean.AllowAttrs("href").OnElements("a")
pClean.AllowAttrs("id").OnElements("a")
pClean.AllowDataURIImages()
text := pClean.SanitizeBytes([]byte(p.CurrentText))
listItems, _ := reorderList(string(text))
fmt.Println(string(text))
c.HTML(http.StatusOK, "list.tmpl", gin.H{
"Title": title,
"WikiName": RuntimeArgs.WikiName,
"ListItems": listItems,
})
}
func deleteListItem(c *gin.Context) {
lineNum, err := strconv.Atoi(c.DefaultQuery("lineNum", "None"))
title := c.Query("title") // shortcut for c.Request.URL.Query().Get("lastname")
if err == nil {
var p WikiData
err := p.load(strings.ToLower(title))
if err != nil {
panic(err)
}
_, listItems := reorderList(p.CurrentText)
newText := p.CurrentText
for i, lineString := range listItems {
// fmt.Println(i, lineString, lineNum)
if i+1 == lineNum {
// fmt.Println("MATCHED")
if strings.Contains(lineString, "~~") == false {
// fmt.Println(p.Text, "("+lineString[2:]+"\n"+")", "~~"+lineString[2:]+"~~"+"\n")
newText = strings.Replace(newText+"\n", lineString[2:]+"\n", "~~"+strings.TrimSpace(lineString[2:])+"~~"+"\n", 1)
} else {
newText = strings.Replace(newText+"\n", lineString[2:]+"\n", lineString[4:len(lineString)-2]+"\n", 1)
}
p.save(newText)
break
}
}
c.JSON(200, gin.H{
"message": "Done.",
})
} else {
c.JSON(404, gin.H{
"message": "?",
})
}
}
func deletePage(c *gin.Context) {
deleteName := c.DefaultQuery("DeleteName", "None")
adminKey := c.DefaultQuery("AdminKey", "None")
fmt.Println(adminKey)
fmt.Println(deleteName)
// if adminKey == RuntimeArgs.AdminKey || true == true {
if strings.ToLower(deleteName) != "help" {
p := WikiData{strings.ToLower(deleteName), "", []string{}, []string{}, false, ""}
p.save("")
}
// // remove from program data
// var deleteKey []byte
// foundKey := false
// err := db.View(func(tx *bolt.Tx) error {
// b := tx.Bucket([]byte("programdata"))
// c := b.Cursor()
// for k, v := c.First(); k != nil; k, v = c.Next() {
// if strings.ToLower(string(v)) == strings.ToLower(deleteName) {
// fmt.Println("FOUND " + string(v))
// deleteKey = k
// foundKey = true
// break
// }
// }
// return nil
// })
// if err != nil {
// panic(err)
// }
// if foundKey == true {
// fmt.Println(len([]string{}))
// fmt.Println(deleteKey)
// db.View(func(tx *bolt.Tx) error {
// b := tx.Bucket([]byte("programdata"))
// err := b.Delete(deleteKey)
// return err
// })
// }
// return OKAY
c.JSON(200, gin.H{
"message": "Done.",
})
// } else {
// c.JSON(404, gin.H{
// "message": "?",
// })
// }
}
func listEverything() string {
Open(RuntimeArgs.DatabaseLocation)
defer Close()
everything := `| Title | Current size | Changes | Total Size | |
| --------- |-------------| -----| ------------- | ------------- |
`
db.View(func(tx *bolt.Tx) error {
// Assume bucket exists and has keys
b := tx.Bucket([]byte("datas"))
c := b.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
var p WikiData
p.load(string(k))
if len(p.CurrentText) > 1 {
contentSize := strconv.Itoa(len(p.CurrentText))
numChanges := strconv.Itoa(len(p.Diffs))
totalSize := strconv.Itoa(len(v))
everything += "| [" + p.Title + "](/" + p.Title + "/view) | " + contentSize + " | " + numChanges + " | " + totalSize + ` | <a class="deleteable" id="` + p.Title + `">Delete</a> | ` + "\n"
}
}
return nil
})
return everything
}
func dumpEverything() {
Open(RuntimeArgs.DatabaseLocation)
defer Close()
err := os.MkdirAll("dump", 0777)
if err != nil {
fmt.Println("Already exists")
}
db.View(func(tx *bolt.Tx) error {
// Assume bucket exists and has keys
b := tx.Bucket([]byte("datas"))
c := b.Cursor()
for k, _ := c.First(); k != nil; k, _ = c.Next() {
var p WikiData
p.load(string(k))
fmt.Println(string(k), len(p.CurrentText))
ioutil.WriteFile(path.Join("dump", string(k)+".md"), []byte(p.CurrentText), 0644)
}
return nil
})
}

11
static/css/base-min.css vendored Normal file
View File

@@ -0,0 +1,11 @@
/*!
Pure v0.6.2
Copyright 2013 Yahoo!
Licensed under the BSD License.
https://github.com/yahoo/pure/blob/master/LICENSE.md
*/
/*!
normalize.css v^3.0 | MIT License | git.io/normalize
Copyright (c) Nicolas Gallagher and Jonathan Neal
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */img,legend{border:0}legend,td,th{padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}table{border-collapse:collapse;border-spacing:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}

6584
static/css/bootstrap.css vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More