From 4b13c95108dc7f6d802fec113ef579a9024f5a2a Mon Sep 17 00:00:00 2001 From: jeffail Date: Fri, 27 Mar 2015 22:42:07 +0000 Subject: [PATCH] Reorganise the repo layout --- Makefile | 19 +-- README.md | 15 +- client/unit_tests/test_client_stories.js | 4 +- config/leaps_ace_example.yaml | 2 +- config/leaps_example.yaml | 2 +- config/leaps_files.yaml | 2 +- config/leaps_mysql.yaml | 2 +- config/leaps_postgres.yaml | 2 +- data/binder_stories.js | 45 ----- data/client_stories.js | 169 ------------------ data/transform_stories.js | 171 ------------------- docs | 2 +- leaps.go | 17 ++ lib/binder.go | 3 +- lib/binder_test.go | 2 +- lib/curator.go | 3 +- lib/document.go | 4 +- lib/file_authenticator.go | 16 -- lib/model_text_test.go | 2 +- {util => lib}/uuid_gen.go | 2 +- net/http_server_test.go | 2 +- scripts/README.md | 2 +- scripts/flood_binder.go | 71 -------- scripts/flood_service.js | 71 -------- {config => scripts}/init.d/leaps | 0 scripts/{install.sh => install-linux.sh} | 9 +- scripts/{uninstall.sh => uninstall-linux.sh} | 0 static/example/index.html | 2 +- static/example/leaps-textarea.js | 1 - static/example/leaps.js | 1 + static/example_ace/README.md | 1 - static/example_ace/dl_ace.sh | 14 ++ static/example_ace/index.html | 9 +- static/example_ace/leaps-ace.js | 1 - static/example_ace/leaps.js | 1 + static/example_file/index.html | 2 +- static/example_file/leaps-textarea.js | 1 - static/example_file/leaps.js | 1 + static/share_dir/index.html | 2 +- static/share_dir/leaps-all-min.js | 1 - static/share_dir/leaps.js | 1 + util/README.md | 4 - 42 files changed, 79 insertions(+), 602 deletions(-) delete mode 100644 data/binder_stories.js delete mode 100644 data/client_stories.js delete mode 100644 data/transform_stories.js rename {util => lib}/uuid_gen.go (99%) delete mode 100644 scripts/flood_binder.go delete mode 100644 scripts/flood_service.js rename {config => scripts}/init.d/leaps (100%) rename scripts/{install.sh => install-linux.sh} (66%) rename scripts/{uninstall.sh => uninstall-linux.sh} (100%) delete mode 120000 static/example/leaps-textarea.js create mode 120000 static/example/leaps.js delete mode 100644 static/example_ace/README.md create mode 100755 static/example_ace/dl_ace.sh delete mode 120000 static/example_ace/leaps-ace.js create mode 120000 static/example_ace/leaps.js delete mode 120000 static/example_file/leaps-textarea.js create mode 120000 static/example_file/leaps.js delete mode 120000 static/share_dir/leaps-all-min.js create mode 120000 static/share_dir/leaps.js delete mode 100644 util/README.md diff --git a/Makefile b/Makefile index ab17bfe..b63a441 100644 --- a/Makefile +++ b/Makefile @@ -27,8 +27,6 @@ JS_CLIENT := $(JS_PATH)/leapclient.js BIN := ./bin JS_BIN := $(BIN)/js -JS_BIN_FILES = $(shell ls $(JS_BIN)) - VERSION := $(shell git describe --tags || echo "v0.0.0") DATE := $(shell date +"%c" | tr ' :' '__') @@ -43,21 +41,9 @@ build: check @go build -o $(BIN)/$(PROJECT) $(GOFLAGS) @cp $(BIN)/$(PROJECT) $$GOPATH/bin @echo "copying/compressing js libraries into $(JS_BIN)" - @cp $(JS_CLIENT) $(JS_BIN)/leaps.js; \ + @cat $(JS_CLIENT) $(JS_PATH)/leap-bind-*.js > $(JS_BIN)/leaps.js; \ cat $(JS_PATH)/LICENSE > "$(JS_BIN)/leaps-min.js"; \ uglifyjs "$(JS_BIN)/leaps.js" >> "$(JS_BIN)/leaps-min.js"; - @cat $(JS_CLIENT) $(JS_PATH)/leap-bind-*.js > $(JS_BIN)/leaps-all.js; \ - cat $(JS_PATH)/LICENSE > "$(JS_BIN)/leaps-all-min.js"; \ - uglifyjs "$(JS_BIN)/leaps-all.js" >> "$(JS_BIN)/leaps-all-min.js"; - @cat $(JS_CLIENT) $(JS_PATH)/leap-bind-ace.js > $(JS_BIN)/leaps-ace.js; \ - cat $(JS_PATH)/LICENSE > "$(JS_BIN)/leaps-ace-min.js"; \ - uglifyjs "$(JS_BIN)/leaps-ace.js" >> "$(JS_BIN)/leaps-ace-min.js"; - @cat $(JS_CLIENT) $(JS_PATH)/leap-bind-codemirror.js > $(JS_BIN)/leaps-codemirror.js; \ - cat $(JS_PATH)/LICENSE > "$(JS_BIN)/leaps-codemirror-min.js"; \ - uglifyjs "$(JS_BIN)/leaps-codemirror.js" >> "$(JS_BIN)/leaps-codemirror-min.js"; - @cat $(JS_CLIENT) $(JS_PATH)/leap-bind-textarea.js > $(JS_BIN)/leaps-textarea.js; \ - cat $(JS_PATH)/LICENSE > "$(JS_BIN)/leaps-textarea-min.js"; \ - uglifyjs "$(JS_BIN)/leaps-textarea.js" >> "$(JS_BIN)/leaps-textarea-min.js"; GOLINT=$(shell golint .) lint: @@ -98,8 +84,7 @@ package_builds = $(foreach platform, $(PLATFORMS), \ cp -LR "$(BIN)/js" "./releases/$(VERSION)/$(PROJECT)"; \ cp -LR "./config" "./releases/$(VERSION)/$(PROJECT)"; \ cp -LR "./static" "./releases/$(VERSION)/$(PROJECT)"; \ - cp -LR "./scripts/install.sh" "./releases/$(VERSION)/$(PROJECT)"; \ - cp -LR "./scripts/uninstall.sh" "./releases/$(VERSION)/$(PROJECT)"; \ + cp -LR "./scripts" "./releases/$(VERSION)/$(PROJECT)"; \ cd "./releases/$(VERSION)"; \ tar -czf "$${a_name}.tar.gz" "./$(PROJECT)"; \ rm -r "./$(PROJECT)"; \ diff --git a/README.md b/README.md index 6c02d1c..ed052b3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ To read more and find examples check out the wiki: [leaps wiki](https://github.c ##How to run -Leaps is a single binary, with no runtime dependencies, everything is set through a single config file. Just download a release package for your OS and do the following to set up an example: +Leaps is a single binary, with no runtime dependencies, everything is set through a single config file. Just download a release package for your OS and do the following to run an example: ```bash tar -xvf ./leaps-linux_amd64-v0.1.2.tar.gz @@ -29,12 +29,14 @@ To generate a configuration file of all default values: ##Customizing your service +There are lots of example configuration files in ./config to check out for various use cases. + To learn how to customize your leaps service read here: [leaps service wiki](https://github.com/Jeffail/leaps/wiki/Service) ##Leaps clients -The leaps client is written in JavaScript and is ready to simply drop into your website. You can read about it here: +The leaps client is written in JavaScript and is ready to simply drop into a website. You can read about it here: [leaps client wiki](https://github.com/Jeffail/leaps/wiki/Clients) The files to include can be found in the release packages at ./js, or in a built repository at ./bin/js. Here's a short example of using leaps to turn a textarea into a shared leaps editor: @@ -71,15 +73,14 @@ Windows x86_64 | Supported ##How to build -Dependencies: +Leaps has a Makefile that can lint, run tests, generate the client libraries and package leaps builds into archives. However, if you only wish to get a leaps binary then you can simply use `go get github.com/jeffail/leaps`. + +Build dependencies for Makefile: - Golang 1.2+ - [golint](https://github.com/golang/lint "golint") - -To build clients: - - nodejs -- npm (uglifyjs, jshint, nodeunit) +- npm (global install of uglifyjs, jshint, nodeunit) To build and then start up an example server do the following: diff --git a/client/unit_tests/test_client_stories.js b/client/unit_tests/test_client_stories.js index 34f323e..29fdacc 100644 --- a/client/unit_tests/test_client_stories.js +++ b/client/unit_tests/test_client_stories.js @@ -28,7 +28,9 @@ var fs = require('fs'), lc = require('../leapclient').client, la = require('../leapclient').apply; -var client_stories_text = fs.readFileSync(path.resolve(__dirname, "./../../data/", "./client_stories.js"), "utf8"); +var client_stories_text = fs.readFileSync( + path.resolve(__dirname, "./../../test/stories/", "./client_stories.js"), "utf8"); + var stories = JSON.parse(client_stories_text).client_stories; var run_story = function(story, test) { diff --git a/config/leaps_ace_example.yaml b/config/leaps_ace_example.yaml index a90283e..f1ca819 100644 --- a/config/leaps_ace_example.yaml +++ b/config/leaps_ace_example.yaml @@ -24,7 +24,7 @@ curator: http_server: static_path: / socket_path: /socket - address: :8080 + address: :8001 www_dir: ./static/example_ace binder: bind_send_timeout_ms: 10 diff --git a/config/leaps_example.yaml b/config/leaps_example.yaml index 4ad8693..51552be 100644 --- a/config/leaps_example.yaml +++ b/config/leaps_example.yaml @@ -24,7 +24,7 @@ curator: http_server: static_path: / socket_path: /socket - address: :8080 + address: :8001 www_dir: ./static/example binder: bind_send_timeout_ms: 10 diff --git a/config/leaps_files.yaml b/config/leaps_files.yaml index 618be14..d5bb6c5 100644 --- a/config/leaps_files.yaml +++ b/config/leaps_files.yaml @@ -20,7 +20,7 @@ curator: http_server: static_path: / socket_path: /socket - address: :8080 + address: :8001 www_dir: ./static/example_file binder: bind_send_timeout_ms: 10 diff --git a/config/leaps_mysql.yaml b/config/leaps_mysql.yaml index a751ad6..54fe5b2 100644 --- a/config/leaps_mysql.yaml +++ b/config/leaps_mysql.yaml @@ -29,7 +29,7 @@ curator: http_server: static_path: / socket_path: /socket - address: :8080 + address: :8001 www_dir: ./static/example binder: bind_send_timeout_ms: 10 diff --git a/config/leaps_postgres.yaml b/config/leaps_postgres.yaml index f8a9f33..6262642 100644 --- a/config/leaps_postgres.yaml +++ b/config/leaps_postgres.yaml @@ -29,7 +29,7 @@ curator: http_server: static_path: / socket_path: /socket - address: :8080 + address: :8001 www_dir: ./static/example binder: bind_send_timeout_ms: 10 diff --git a/data/binder_stories.js b/data/binder_stories.js deleted file mode 100644 index d504d13..0000000 --- a/data/binder_stories.js +++ /dev/null @@ -1,45 +0,0 @@ -{ "binder_stories" : [ -{ - "name" : "story1", - "content" : "hello world", - "result" : "helwhenwat world", - "transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "wat", "version" : 2 }, - { "position" : 3, "num_delete" : 2, "insert" : "when", "version" : 3 } - ], - "corrected_transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "wat", "version" : 2 }, - { "position" : 3, "num_delete" : 2, "insert" : "when", "version" : 3 } - ] -} -,{ - "name" : "story2", - "content" : "hello world", - "result" : "hellwhenwatworld", - "transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "wat", "version" : 2 }, - { "position" : 4, "num_delete" : 2, "insert" : "when", "version" : 2 } - ], - "corrected_transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "wat", "version" : 2 }, - { "position" : 4, "num_delete" : 5, "insert" : "whenwat", "version" : 3 } - ] -} -,{ - "name" : "story3", - "content" : "hello world, it was fun.", - "result" : "goodbye cruel world, it wasn't fun.", - "transforms" : [ - { "position" : 0, "num_delete" : 5, "insert" : "good", "version" : 2 }, - { "position" : 4, "num_delete" : 0, "insert" : "bye", "version" : 3 }, - { "position" : 5, "num_delete" : 0, "insert" : " cruel", "version" : 2 }, - { "position" : 19, "num_delete" : 0, "insert" : "n't", "version" : 2 } - ], - "corrected_transforms" : [ - { "position" : 0, "num_delete" : 5, "insert" : "good", "version" : 2 }, - { "position" : 4, "num_delete" : 0, "insert" : "bye", "version" : 3 }, - { "position" : 7, "num_delete" : 0, "insert" : " cruel", "version" : 4 }, - { "position" : 27, "num_delete" : 0, "insert" : "n't", "version" : 5 } - ] -} -] } diff --git a/data/client_stories.js b/data/client_stories.js deleted file mode 100644 index 098c24a..0000000 --- a/data/client_stories.js +++ /dev/null @@ -1,169 +0,0 @@ -{ "client_stories" : [ -{ - "name" : "verybasictest", - "content" : "hello world", - "result" : "hello crazy dumb internet", - "epochs" : [ - { - "send" : [ - { "position" : 6, "num_delete" : 0, "insert" : "crazy " } - ], - "receive" : [ - { - "response_type" : "correction", - "version" : 2 - }, - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 12, "num_delete" : 0, "insert" : "dumb ", "version" : 3 }, - { "position" : 17, "num_delete" : 5, "insert" : "internet", "version" : 4 } - ] - } - ], - "result" : "hello crazy dumb internet" - } - ] -}, -{ - "name" : "verybasictest2", - "content" : "hello world", - "result" : "hello crazy dumb internet", - "epochs" : [ - { - "send" : [], - "receive" : [ - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 6, "num_delete" : 0, "insert" : "dumb ", "version" : 2 }, - { "position" : 11, "num_delete" : 5, "insert" : "internet", "version" : 3 } - ] - }, - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 6, "num_delete" : 0, "insert" : "crazy ", "version" : 4 } - ] - } - ], - "result" : "hello crazy dumb internet" - } - ] -}, -{ - "name" : "fraggedreqtest", - "content" : "hello world", - "result" : "hello stupid internet you fool", - "epochs" : [ - { - "send" : [ - { "position" : 11, "num_delete" : 0, "insert" : " you fool" } - ], - "receive" : [ - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 6, "num_delete" : 5, "insert" : "", "version" : 2 }, - { "position" : 6, "num_delete" : 0, "insert" : "internet", "version" : 3 } - ] - }, - { - "response_type" : "correction", - "version" : 4 - }, - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 6, "num_delete" : 0, "insert" : "stupid ", "version" : 5 } - ] - } - ], - "result" : "hello stupid internet you fool" - } - ] -}, -{ - "name" : "simpleepochstest", - "content" : "hello world", - "result" : "hello one two three four five six world", - "epochs" : [ - { - "send" : [], - "receive" : [ - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 6, "num_delete" : 0, "insert" : "two ", "version" : 2 }, - { "position" : 6, "num_delete" : 0, "insert" : "one ", "version" : 3 } - ] - }, - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 14, "num_delete" : 0, "insert" : "five ", "version" : 4 } - ] - } - ], - "result" : "hello one two five world" - }, - { - "send" : [], - "receive" : [ - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 14, "num_delete" : 0, "insert" : "three ", "version" : 5 }, - { "position" : 19, "num_delete" : 0, "insert" : " four", "version" : 6 } - ] - }, - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 30, "num_delete" : 0, "insert" : "six ", "version" : 7 } - ] - } - ], - "result" : "hello one two three four five six world" - } - ] -}, -{ - "name" : "fraggedtest", - "content" : "hello world", - "result" : "heyo testing world you poor fool", - "epochs" : [ - { - "send" : [ - { "position" : 6, "num_delete" : 0, "insert" : "testing " } - ], - "receive" : [ - { - "response_type" : "correction", - "version" : 6 - }, - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 11, "num_delete" : 0, "insert" : " you fool", "version" : 2 }, - { "position" : 2, "num_delete" : 3, "insert" : "y", "version" : 3 } - ] - }, - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 13, "num_delete" : 0, "insert" : " poor", "version" : 4 } - ] - }, - { - "response_type" : "transforms", - "transforms" : [ - { "position" : 3, "num_delete" : 0, "insert" : "o", "version" : 5 } - ] - } - ], - "result" : "heyo testing world you poor fool" - } - ] -} -] } diff --git a/data/transform_stories.js b/data/transform_stories.js deleted file mode 100644 index 9357943..0000000 --- a/data/transform_stories.js +++ /dev/null @@ -1,171 +0,0 @@ -{ "stories" : [ -{ - "name" : "genstory1", - "content" : "hello world", - "result" : "helwhenwat world", - "transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "wat", "version" : 2 }, - { "position" : 3, "num_delete" : 2, "insert" : "when", "version" : 3 } - ], - "corrected_transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "wat", "version" : 2 }, - { "position" : 3, "num_delete" : 2, "insert" : "when", "version" : 3 } - ] -}, -{ - "name" : "genstory2", - "content" : "hello world", - "result" : "hellwhenwatworld", - "transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "wat", "version" : 2 }, - { "position" : 4, "num_delete" : 2, "insert" : "when", "version" : 2 } - ], - "corrected_transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "wat", "version" : 2 }, - { "position" : 4, "num_delete" : 5, "insert" : "whenwat", "version" : 3 } - ] -}, -{ - "name" : "genstory3", - "content" : "hello world", - "result" : "hekopjippyp", - "transforms" : [ - { "position" : 3, "num_delete" : 0, "insert" : "jip", "version" : 2 }, - { "position" : 2, "num_delete" : 6, "insert" : "kop", "version" : 2 }, - { "position" : 4, "num_delete" : 7, "insert" : "pyp", "version" : 2 } - ] -}, -{ - "name" : "genstory4", - "content" : "hello world", - "result" : "hekopjiprld", - "transforms" : [ - { "position" : 3, "num_delete" : 4, "insert" : "jip", "version" : 2 }, - { "position" : 2, "num_delete" : 6, "insert" : "kop", "version" : 2 } - ] -}, -{ - "name" : "genstory5", - "content" : "hello world", - "result" : "hekopjiprld", - "transforms" : [ - { "position" : 2, "num_delete" : 6, "insert" : "kop", "version" : 2 }, - { "position" : 3, "num_delete" : 4, "insert" : "jip", "version" : 2 } - ] -}, -{ - "name" : "genstory6", - "content" : "hello world", - "result" : "hekopjiprld", - "transforms" : [ - { "position" : 2, "num_delete" : 6, "insert" : "kop", "version" : 2 }, - { "position" : 2, "num_delete" : 2, "insert" : "jip", "version" : 2 } - ] -}, -{ - "name" : "genstory7", - "content" : "hello world hello world", - "result" : "hkoptesting world hello world", - "transforms" : [ - { "position" : 2, "num_delete" : 2, "insert" : "testing", "version" : 2 }, - { "position" : 1, "num_delete" : 4, "insert" : "kop", "version" : 2 } - ] -}, -{ - "name" : "genstory8", - "content" : "hello world hello world", - "result" : "hkoptesting hello world", - "transforms" : [ - { "position" : 2, "num_delete" : 9, "insert" : "testing", "version" : 2 }, - { "position" : 1, "num_delete" : 4, "insert" : "kop", "version" : 2 } - ] -}, -{ - "name" : "genstory9", - "content" : "hello world", - "result" : "hejipkoprld", - "transforms" : [ - { "position" : 2, "num_delete" : 2, "insert" : "jip", "version" : 2 }, - { "position" : 2, "num_delete" : 6, "insert" : "kop", "version" : 2 } - ] -}, -{ - "name" : "genstory10", - "content" : "hello world", - "result" : "hjipkopld", - "transforms" : [ - { "position" : 3, "num_delete" : 6, "insert" : "kop", "version" : 2 }, - { "position" : 1, "num_delete" : 2, "insert" : "jip", "version" : 2 } - ] -}, -{ - "name" : "genstory11", - "content" : "hello world", - "result" : "hekopjippyp", - "transforms" : [ - { "position" : 3, "num_delete" : 0, "insert" : "jip", "version" : 2 }, - { "position" : 2, "num_delete" : 9, "insert" : "kop", "version" : 2 }, - { "position" : 4, "num_delete" : 7, "insert" : "pyp", "version" : 2 }, - { "position" : 4, "num_delete" : 6, "insert" : "", "version" : 3 } - ] -}, -{ - "name" : "genstory12", - "content" : "hello world", - "result" : "helDERYIPld", - "transforms" : [ - { "position" : 3, "num_delete" : 6, "insert" : "DER", "version" : 2 }, - { "position" : 5, "num_delete" : 2, "insert" : "YIP", "version" : 2 } - ] -}, -{ - "name" : "genstory13", - "content" : "hello world", - "result" : "helloDERYIP world", - "transforms" : [ - { "position" : 5, "num_delete" : 0, "insert" : "DER", "version" : 2 }, - { "position" : 5, "num_delete" : 0, "insert" : "YIP", "version" : 2 } - ] -}, -{ - "name" : "genstory14", - "content" : "hello world", - "result" : "hello herpy1 derpy1 herpy2 derpy2 herpy3 derpy3 herpy4 derpy4 TEST FOOBAR world", - "flushes" : [ 3 ], - "transforms" : [ - { "position" : 6, "num_delete" : 0, "insert" : "herpy1 ", "version" : 2 }, - { "position" : 13, "num_delete" : 0, "insert" : "derpy1 ", "version" : 3 }, - { "position" : 20, "num_delete" : 0, "insert" : "herpy2 ", "version" : 4 }, - { "position" : 27, "num_delete" : 0, "insert" : "derpy2 ", "version" : 5 }, - { "position" : 34, "num_delete" : 0, "insert" : "herpy3 ", "version" : 6 }, - { "position" : 41, "num_delete" : 0, "insert" : "derpy3 ", "version" : 7 }, - { "position" : 48, "num_delete" : 0, "insert" : "herpy4 ", "version" : 8 }, - { "position" : 55, "num_delete" : 0, "insert" : "derpy4 ", "version" : 9 }, - { "position" : 41, "num_delete" : 0, "insert" : "TEST ", "version" : 7 }, - { "position" : 13, "num_delete" : 0, "insert" : "FOOBAR ", "version" : 3 } - ] -}, -{ - "name" : "genstory15", - "content" : "The quick brown fox jumps over the lazy dog.", - "result" : "The slow brown dog jumps over all lazy dogs.", - "transforms" : [ - { "position" : 4, "num_delete" : 5, "insert" : "slow", "version" : 2 }, - { "position" : 30, "num_delete" : 3, "insert" : "all", "version" : 3 }, - { "position" : 15, "num_delete" : 3, "insert" : "dog", "version" : 3 }, - { "position" : 43, "num_delete" : 0, "insert" : "s", "version" : 2 } - ] -}, -{ - "name" : "genstory16", - "content" : "The quick brown fox jumps over the lazy dog.", - "result" : "The slow brown * dog jumps over all lazy dogs.", - "transforms" : [ - { "position" : 4, "num_delete" : 5, "insert" : "slow", "version" : 2 }, - { "position" : 30, "num_delete" : 3, "insert" : "all", "version" : 3 }, - { "position" : 15, "num_delete" : 4, "insert" : "dog ", "version" : 3 }, - { "position" : 14, "num_delete" : 5, "insert" : " * ", "version" : 3 }, - { "position" : 43, "num_delete" : 0, "insert" : "s", "version" : 2 } - ] -} -] } diff --git a/docs b/docs index bf269c3..eb0fcd4 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit bf269c38ffc54af3662edd1eda789377712fc218 +Subproject commit eb0fcd4b588e033830645c4e6a7dee5c2f691618 diff --git a/leaps.go b/leaps.go index 41a4458..d5448e5 100644 --- a/leaps.go +++ b/leaps.go @@ -23,6 +23,7 @@ THE SOFTWARE. package main import ( + "flag" "fmt" "os" "os/signal" @@ -54,6 +55,17 @@ type LeapsConfig struct { StatsServerConfig log.StatsServerConfig `json:"stats_server" yaml:"stats_server"` } +/*-------------------------------------------------------------------------------------------------- + */ + +var ( + sharePathOverride *string +) + +func init() { + sharePathOverride = flag.String("share", "", "Override the path for file system sharing configs") +} + /*-------------------------------------------------------------------------------------------------- */ @@ -90,6 +102,11 @@ func main() { return } + if len(*sharePathOverride) > 0 { + leapsConfig.AuthenticatorConfig.FileConfig.SharePath = *sharePathOverride + leapsConfig.StoreConfig.StoreDirectory = *sharePathOverride + } + runtime.GOMAXPROCS(leapsConfig.NumProcesses) logger := log.NewLogger(os.Stdout, leapsConfig.LoggerConfig) diff --git a/lib/binder.go b/lib/binder.go index b609c75..5241f23 100644 --- a/lib/binder.go +++ b/lib/binder.go @@ -27,7 +27,6 @@ import ( "fmt" "time" - "github.com/jeffail/leaps/util" "github.com/jeffail/util/log" ) @@ -170,7 +169,7 @@ the subscription was unsuccessful the BinderPortal will contain an error. */ func (b *Binder) Subscribe(token string) BinderPortal { if len(token) == 0 { - token = util.GenerateStampedUUID() + token = GenerateStampedUUID() } retChan := make(chan BinderPortal, 1) bundle := BinderSubscribeBundle{ diff --git a/lib/binder_test.go b/lib/binder_test.go index 5a67b4a..11a0960 100644 --- a/lib/binder_test.go +++ b/lib/binder_test.go @@ -301,7 +301,7 @@ func TestBinderStories(t *testing.T) { nClients := 10 logger, stats := getLoggerAndStats() - bytes, err := ioutil.ReadFile("../data/binder_stories.js") + bytes, err := ioutil.ReadFile("../test/stories/binder_stories.js") if err != nil { t.Errorf("Read file error: %v", err) return diff --git a/lib/curator.go b/lib/curator.go index 97a8b37..8635f63 100644 --- a/lib/curator.go +++ b/lib/curator.go @@ -26,7 +26,6 @@ import ( "fmt" "sync" - "github.com/jeffail/leaps/util" "github.com/jeffail/util/log" ) @@ -213,7 +212,7 @@ func (c *Curator) CreateDocument(token string, userID string, doc Document) (Bin c.stats.Incr("curator.create.accepted_client", 1) // Always generate a fresh ID - doc.ID = util.GenerateStampedUUID() + doc.ID = GenerateStampedUUID() if err := c.store.Create(doc.ID, doc); err != nil { c.stats.Incr("curator.create_new.failed", 1) diff --git a/lib/document.go b/lib/document.go index d060aae..838ffa1 100644 --- a/lib/document.go +++ b/lib/document.go @@ -22,8 +22,6 @@ THE SOFTWARE. package lib -import "github.com/jeffail/leaps/util" - /*-------------------------------------------------------------------------------------------------- */ @@ -43,7 +41,7 @@ NewDocument - Create a fresh leap document with a title, description, type and t */ func NewDocument(content string) (*Document, error) { doc := &Document{ - ID: util.GenerateStampedUUID(), + ID: GenerateStampedUUID(), Content: content, } return doc, nil diff --git a/lib/file_authenticator.go b/lib/file_authenticator.go index 2903fb6..6f529f3 100644 --- a/lib/file_authenticator.go +++ b/lib/file_authenticator.go @@ -2,7 +2,6 @@ package lib import ( "encoding/json" - "flag" "net/http" "os" "path" @@ -14,17 +13,6 @@ import ( "github.com/jeffail/util/log" ) -/*-------------------------------------------------------------------------------------------------- - */ - -var ( - sharePathOverride *string -) - -func init() { - sharePathOverride = flag.String("share", "", "Override config curator.authenticator.file_config.share_path") -} - /*-------------------------------------------------------------------------------------------------- */ @@ -136,10 +124,6 @@ type FileAuthenticator struct { NewFileAuthenticator - Creates an FileAuthenticator using the provided configuration. */ func NewFileAuthenticator(config TokenAuthenticatorConfig, logger *log.Logger) *FileAuthenticator { - // Do any overrides. - if len(*sharePathOverride) > 0 { - config.FileConfig.SharePath = *sharePathOverride - } fa := FileAuthenticator{ logger: logger.NewModule("[fs_auth]"), config: config, diff --git a/lib/model_text_test.go b/lib/model_text_test.go index 7bc38d6..f2bfc40 100644 --- a/lib/model_text_test.go +++ b/lib/model_text_test.go @@ -118,7 +118,7 @@ type storiesContainer struct { } func TestTransformStories(t *testing.T) { - bytes, err := ioutil.ReadFile("../data/transform_stories.js") + bytes, err := ioutil.ReadFile("../test/stories/transform_stories.js") if err != nil { t.Errorf("Read file error: %v", err) return diff --git a/util/uuid_gen.go b/lib/uuid_gen.go similarity index 99% rename from util/uuid_gen.go rename to lib/uuid_gen.go index da2530a..2ea5d4f 100644 --- a/util/uuid_gen.go +++ b/lib/uuid_gen.go @@ -20,7 +20,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package util +package lib import ( "encoding/hex" diff --git a/net/http_server_test.go b/net/http_server_test.go index f1522d4..5b982a2 100644 --- a/net/http_server_test.go +++ b/net/http_server_test.go @@ -228,7 +228,7 @@ func authAndStore(logger *log.Logger) (lib.TokenAuthenticator, lib.DocumentStore } func TestHttpServer(t *testing.T) { - bytes, err := ioutil.ReadFile("../data/binder_stories.js") + bytes, err := ioutil.ReadFile("../test/stories/binder_stories.js") if err != nil { t.Errorf("Read file error: %v", err) return diff --git a/scripts/README.md b/scripts/README.md index 8356e78..d5900a9 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,4 +1,4 @@ Scripts ======= -Contains miscellaneous scripts for various actions, including installation and deployment stress testing. +Contains miscellaneous scripts for various actions, including installation and deployment stress testing. You should run these scripts from the parent directory. diff --git a/scripts/flood_binder.go b/scripts/flood_binder.go deleted file mode 100644 index 81384f8..0000000 --- a/scripts/flood_binder.go +++ /dev/null @@ -1,71 +0,0 @@ -package main - -import ( - "fmt" - "os" - "time" - - "github.com/jeffail/leaps/lib" - "github.com/jeffail/util/log" -) - -func main() { - logConf := log.DefaultLoggerConfig() - logConf.LogLevel = "INFO" - - logger := log.NewLogger(os.Stdout, logConf) - stats := log.NewStats(log.DefaultStatsConfig()) - - errChan := make(chan lib.BinderError) - doc, err := lib.NewDocument("helibo world 123") - if err != nil { - fmt.Printf("error: %v\n", err) - return - } - - store, _ := lib.GetMemoryStore(lib.DocumentStoreConfig{}) - - binderConfig := lib.DefaultBinderConfig() - binderConfig.RetentionPeriod = 1 - - if err := store.Create(doc.ID, *doc); err != nil { - fmt.Printf("error: %v\n", err) - return - } - binder, err := lib.NewBinder(doc.ID, store, binderConfig, errChan, logger, stats) - if err != nil { - fmt.Printf("error: %v\n", err) - return - } - - go func() { - for err := range errChan { - fmt.Printf("From error channel: %v\n", err.Err) - } - }() - - portal, portal2 := binder.Subscribe(""), binder.Subscribe("") - - go func() { - for _ = range portal2.TransformRcvChan { - } - }() - - time.Sleep(time.Second * 2) - targetV := 2 - - for { - if v, err := portal.SendTransform( - lib.OTransform{ - Position: 0, - Version: targetV, - Delete: 11, - Insert: "helibo world", - }, - time.Second, - ); v != targetV || err != nil { - fmt.Printf("Send Transform error, targetV: %v, v: %v, err: %v\n", targetV, v, err) - } - targetV++ - } -} diff --git a/scripts/flood_service.js b/scripts/flood_service.js deleted file mode 100644 index 373347f..0000000 --- a/scripts/flood_service.js +++ /dev/null @@ -1,71 +0,0 @@ -var client = new (require('../leapclient/leapclient.js').client)(); -var ws = require('ws'); - -var mock_socket = function() { - var socket = new ws('ws://localhost:8080/socket'); - this.readyState = 0; - - this.send = function(data) { - socket.send.apply(socket, [ data ]); - } - - this.close = function() { - socket.close.apply(socket, [ arguments ]); - } - - var _mock = this; - - socket.on('message', function(data) { - if ( typeof(_mock.onmessage) === "function" ) { - _mock.onmessage.apply(_mock, [ { data: data } ]); - } - }); - - socket.on('open', function(data) { - _mock.readyState = 1; - if ( typeof(_mock.onopen) === "function" ) { - _mock.onopen.apply(_mock); - } - }); - - socket.on('close', function(data) { - if ( typeof(_mock.onclose) === "function" ) { - _mock.onclose.apply(_mock); - } - }); -}; - -var spammer; -var socket = new mock_socket(); - -client.on("connect", function() { - console.log("joining document..."); - var err = client.join_document("test_document"); - if ( err !== undefined ) { - console.error(JSON.stringify(err)); - } -}); - -client.on("document", function() { - console.log("spamming..."); - spammer = setInterval(function() { - client.send_transform({ - position: 0, - insert: "hello world", - num_delete: 11 - }); - }, 10); -}); - - -client.on("error", function(err) { - console.error("Error" + JSON.stringify(err)); -}); - -client.on("disconnect", function() { - console.log("disconnected"); - clearInterval(spammer); -}); - -console.log("connecting..."); -client.connect("", socket); diff --git a/config/init.d/leaps b/scripts/init.d/leaps similarity index 100% rename from config/init.d/leaps rename to scripts/init.d/leaps diff --git a/scripts/install.sh b/scripts/install-linux.sh similarity index 66% rename from scripts/install.sh rename to scripts/install-linux.sh index 46c4e19..38d52f6 100755 --- a/scripts/install.sh +++ b/scripts/install-linux.sh @@ -12,13 +12,18 @@ if [ ! -f /etc/leaps/config.yaml ]; then ./leaps --print-yaml > /etc/leaps/config.yaml fi -if [[ "$1" == "--daemon" ]]; then +if [[ "$1" == "--init-daemon" ]]; then echo "Setting up init.d script and leaps user ..." id -u leaps &>/dev/null || (useradd -s /bin/bash leaps && echo leaps:leaps | chpasswd) - cp ./config/init.d/leaps /etc/init.d/leaps + cp ./scripts/init.d/leaps /etc/init.d/leaps chmod 755 /etc/init.d/leaps chown root:root /etc/init.d/leaps update-rc.d leaps start 30 2 3 4 5 . stop 30 0 1 6 . +elif [[ "$1" == "--supervisor" ]]; then + echo "Setting up supervisor script and leaps user ..." + id -u leaps &>/dev/null || (useradd -s /bin/bash leaps && echo leaps:leaps | chpasswd) + + #TODO fi diff --git a/scripts/uninstall.sh b/scripts/uninstall-linux.sh similarity index 100% rename from scripts/uninstall.sh rename to scripts/uninstall-linux.sh diff --git a/static/example/index.html b/static/example/index.html index 079fb83..72b904a 100644 --- a/static/example/index.html +++ b/static/example/index.html @@ -1,6 +1,6 @@ - + diff --git a/static/example/leaps-textarea.js b/static/example/leaps-textarea.js deleted file mode 120000 index 838aa4f..0000000 --- a/static/example/leaps-textarea.js +++ /dev/null @@ -1 +0,0 @@ -../../bin/js/leaps-textarea.js \ No newline at end of file diff --git a/static/example/leaps.js b/static/example/leaps.js new file mode 120000 index 0000000..2b5e2ed --- /dev/null +++ b/static/example/leaps.js @@ -0,0 +1 @@ +../../bin/js/leaps.js \ No newline at end of file diff --git a/static/example_ace/README.md b/static/example_ace/README.md deleted file mode 100644 index a460ac6..0000000 --- a/static/example_ace/README.md +++ /dev/null @@ -1 +0,0 @@ -For this example you need to download a copy of ace.js from somewhere (https://github.com/ajaxorg/ace-builds/raw/master/src-min-noconflict/ace.js) into this directory. diff --git a/static/example_ace/dl_ace.sh b/static/example_ace/dl_ace.sh new file mode 100755 index 0000000..bb2a616 --- /dev/null +++ b/static/example_ace/dl_ace.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +ACE_VERSION="1.1.8" +ACE_ARCHIVE="ace-builds-${ACE_VERSION}" + +mkdir -p ./ace + +wget https://github.com/ajaxorg/ace-builds/archive/v${ACE_VERSION}.tar.gz -O tmp_ace.tar.gz +tar -xvf "./tmp_ace.tar.gz" + +( cd "./${ACE_ARCHIVE}" && rsync -a ./src-min/ ../ace ) + +rm -rf "./${ACE_ARCHIVE}" +rm "./tmp_ace.tar.gz" diff --git a/static/example_ace/index.html b/static/example_ace/index.html index d1400ff..4f61545 100644 --- a/static/example_ace/index.html +++ b/static/example_ace/index.html @@ -1,7 +1,12 @@ - - + + + diff --git a/static/example_ace/leaps-ace.js b/static/example_ace/leaps-ace.js deleted file mode 120000 index 5ad92fd..0000000 --- a/static/example_ace/leaps-ace.js +++ /dev/null @@ -1 +0,0 @@ -../../bin/js/leaps-ace.js \ No newline at end of file diff --git a/static/example_ace/leaps.js b/static/example_ace/leaps.js new file mode 120000 index 0000000..2b5e2ed --- /dev/null +++ b/static/example_ace/leaps.js @@ -0,0 +1 @@ +../../bin/js/leaps.js \ No newline at end of file diff --git a/static/example_file/index.html b/static/example_file/index.html index d2dc5b5..5b2d861 100644 --- a/static/example_file/index.html +++ b/static/example_file/index.html @@ -1,6 +1,6 @@ - + diff --git a/static/example_file/leaps-textarea.js b/static/example_file/leaps-textarea.js deleted file mode 120000 index 838aa4f..0000000 --- a/static/example_file/leaps-textarea.js +++ /dev/null @@ -1 +0,0 @@ -../../bin/js/leaps-textarea.js \ No newline at end of file diff --git a/static/example_file/leaps.js b/static/example_file/leaps.js new file mode 120000 index 0000000..2b5e2ed --- /dev/null +++ b/static/example_file/leaps.js @@ -0,0 +1 @@ +../../bin/js/leaps.js \ No newline at end of file diff --git a/static/share_dir/index.html b/static/share_dir/index.html index 91643e4..1c167fe 100644 --- a/static/share_dir/index.html +++ b/static/share_dir/index.html @@ -6,7 +6,7 @@ document.write(' - + diff --git a/static/share_dir/leaps-all-min.js b/static/share_dir/leaps-all-min.js deleted file mode 120000 index ae125a6..0000000 --- a/static/share_dir/leaps-all-min.js +++ /dev/null @@ -1 +0,0 @@ -../../bin/js/leaps-all-min.js \ No newline at end of file diff --git a/static/share_dir/leaps.js b/static/share_dir/leaps.js new file mode 120000 index 0000000..2b5e2ed --- /dev/null +++ b/static/share_dir/leaps.js @@ -0,0 +1 @@ +../../bin/js/leaps.js \ No newline at end of file diff --git a/util/README.md b/util/README.md deleted file mode 100644 index 72dc6b0..0000000 --- a/util/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Util -==== - -For small utilities that don't fit anywhere else.