From eaf322374fca58661d0a0f2ab93316505ed6fbb4 Mon Sep 17 00:00:00 2001 From: viktor Date: Mon, 26 Jun 2017 23:24:10 +0300 Subject: [PATCH] Refactoring --- .gitignore | 2 + web/app.js | 23 +- web/controllers/index.js | 237 +- web/helpers/basicauthhttpprovider.js | 146 + web/helpers/commonHelper.js | 11 + web/helpers/etherHelper.js | 277 +- web/public/css/index.css | 24 +- .../loader/stylesheets => css}/loader.css | 2 +- .../materialize => }/css/materialize.css | 0 .../materialize => }/css/materialize.min.css | 0 .../sweetalert/dist => css}/sweetalert.css | 0 web/public/gulpfile.js | 29 + .../{libs/loader/images => img}/loader.png | Bin web/public/javascripts/application.js | 9 + .../application/addPhoneToWallet.js | 26 + .../application/getAddressByPhone.js | 27 + .../application/getPhoneByAddress.js | 28 + .../application}/getQueryParamsHelper.js | 0 .../application/index.js} | 181 +- .../javascripts/application/sendCodeBySMS.js | 23 + .../application/verifyCodeFromSMS.js | 27 + .../vendor}/ZeroClipboard.js | 0 web/public/javascripts/vendor/index.js | 4 + .../vendor}/jquery.min.js | 0 .../vendor}/materialize.min.js | 0 .../vendor}/sweetalert.min.js | 0 web/public/js/savedData | 61 - .../_links.scssc | Bin 1189 -> 0 bytes .../_lists.scssc | Bin 1321 -> 0 bytes .../_text.scssc | Bin 1282 -> 0 bytes .../_units.scssc | Bin 69173 -> 0 bytes .../_vertical_rhythm.scssc | Bin 85901 -> 0 bytes .../_animation.scssc | Bin 31870 -> 0 bytes .../_appearance.scssc | Bin 4509 -> 0 bytes .../_background-clip.scssc | Bin 11721 -> 0 bytes .../_background-origin.scssc | Bin 11796 -> 0 bytes .../_background-size.scssc | Bin 4729 -> 0 bytes .../_border-radius.scssc | Bin 25907 -> 0 bytes .../_box-shadow.scssc | Bin 32892 -> 0 bytes .../_box-sizing.scssc | Bin 4489 -> 0 bytes .../_columns.scssc | Bin 31646 -> 0 bytes .../_deprecated-support.scssc | Bin 74013 -> 0 bytes .../_filter.scssc | Bin 9763 -> 0 bytes .../_flexbox.scssc | Bin 26065 -> 0 bytes .../_font-face.scssc | Bin 10888 -> 0 bytes .../_hyphenation.scssc | Bin 8613 -> 0 bytes .../_images.scssc | Bin 43336 -> 0 bytes .../_inline-block.scssc | Bin 11210 -> 0 bytes .../_opacity.scssc | Bin 8463 -> 0 bytes .../_regions.scssc | Bin 5312 -> 0 bytes .../_text-shadow.scssc | Bin 26449 -> 0 bytes .../_transform.scssc | Bin 133553 -> 0 bytes .../_transition.scssc | Bin 54536 -> 0 bytes .../_user-interface.scssc | Bin 16209 -> 0 bytes .../_ellipsis.scssc | Bin 7879 -> 0 bytes .../_force-wrap.scssc | Bin 4524 -> 0 bytes .../_nowrap.scssc | Bin 1623 -> 0 bytes .../_replacement.scssc | Bin 18843 -> 0 bytes .../_color.scssc | Bin 935 -> 0 bytes .../_general.scssc | Bin 1517 -> 0 bytes .../_sprites.scssc | Bin 1058 -> 0 bytes .../_tables.scssc | Bin 1219 -> 0 bytes .../_grid-background.scssc | Bin 54345 -> 0 bytes .../_hover-link.scssc | Bin 2559 -> 0 bytes .../_link-colors.scssc | Bin 9805 -> 0 bytes .../_unstyled-link.scssc | Bin 3071 -> 0 bytes .../animation.scssc | Bin 2787 -> 0 bytes .../ie.scssc | Bin 1214 -> 0 bytes .../loader.scssc | Bin 15542 -> 0 bytes .../print.scssc | Bin 1099 -> 0 bytes .../screen.scssc | Bin 1383 -> 0 bytes .../_utilities.scssc | Bin 45163 -> 0 bytes .../_compass.scssc | Bin 1161 -> 0 bytes .../_clearfix.scssc | Bin 7525 -> 0 bytes .../_float.scssc | Bin 9194 -> 0 bytes .../_hacks.scssc | Bin 21783 -> 0 bytes .../_min.scssc | Bin 4270 -> 0 bytes .../_reset.scssc | Bin 1131 -> 0 bytes .../_tag-cloud.scssc | Bin 8486 -> 0 bytes .../_alternating-rows-and-columns.scssc | Bin 9825 -> 0 bytes .../_borders.scssc | Bin 16499 -> 0 bytes .../_scaffolding.scssc | Bin 3303 -> 0 bytes .../stylesheets/_compass.scssc | Bin 749 -> 0 bytes .../stylesheets/compass/_support.scssc | Bin 757 -> 0 bytes .../compass/css3/_background-size.scssc | Bin 770 -> 0 bytes .../stylesheets/compass/css3/_images.scssc | Bin 761 -> 0 bytes .../compass/css3/_inline-block.scssc | Bin 767 -> 0 bytes .../compass/typography/_links.scssc | Bin 766 -> 0 bytes .../compass/typography/_lists.scssc | Bin 766 -> 0 bytes .../compass/typography/_text.scssc | Bin 765 -> 0 bytes .../compass/typography/lists/_bullets.scssc | Bin 774 -> 0 bytes .../typography/lists/_horizontal-list.scssc | Bin 782 -> 0 bytes .../typography/text/_replacement.scssc | Bin 777 -> 0 bytes .../compass/utilities/general/_clearfix.scssc | Bin 776 -> 0 bytes .../compass/utilities/general/_float.scssc | Bin 773 -> 0 bytes .../compass/utilities/general/_hacks.scssc | Bin 773 -> 0 bytes .../compass/utilities/general/_reset.scssc | Bin 773 -> 0 bytes .../Sites/loader/sass/animation.scssc | Bin 559 -> 0 bytes .../_base.scssc | Bin 30240 -> 0 bytes .../_sprite-img.scssc | Bin 21770 -> 0 bytes .../_bullets.scssc | Bin 8218 -> 0 bytes .../_horizontal-list.scssc | Bin 15348 -> 0 bytes .../_inline-block-list.scssc | Bin 8241 -> 0 bytes .../_inline-list.scssc | Bin 10127 -> 0 bytes .../_css3.scssc | Bin 3298 -> 0 bytes .../_reset.scssc | Bin 1105 -> 0 bytes .../_support.scssc | Bin 164976 -> 0 bytes .../_typography.scssc | Bin 1312 -> 0 bytes .../_utilities.scssc | Bin 1801 -> 0 bytes .../_brightness.scssc | Bin 6751 -> 0 bytes .../_contrast.scssc | Bin 13328 -> 0 bytes web/public/libs/loader/config.rb | 25 - web/public/libs/loader/index.html | 18 - web/public/libs/loader/sass/loader.scss | 57 - web/public/libs/materialize/LICENSE | 21 - web/public/libs/materialize/README.md | 63 - .../materialize/css/materializeDefault.css | 11256 ---------------- .../font/material-design-icons/LICENSE.txt | 428 - .../Material-Design-Icons.eot | Bin 102112 -> 0 bytes .../Material-Design-Icons.svg | 769 -- .../Material-Design-Icons.ttf | Bin 101892 -> 0 bytes .../Material-Design-Icons.woff | Bin 101968 -> 0 bytes .../Material-Design-Icons.woff2 | Bin 33220 -> 0 bytes .../materialize/font/roboto/Roboto-Bold.eot | Bin 20966 -> 0 bytes .../materialize/font/roboto/Roboto-Bold.ttf | Bin 127744 -> 0 bytes .../materialize/font/roboto/Roboto-Bold.woff | Bin 62876 -> 0 bytes .../materialize/font/roboto/Roboto-Bold.woff2 | Bin 49976 -> 0 bytes .../materialize/font/roboto/Roboto-Light.eot | Bin 20940 -> 0 bytes .../materialize/font/roboto/Roboto-Light.ttf | Bin 126792 -> 0 bytes .../materialize/font/roboto/Roboto-Light.woff | Bin 62316 -> 0 bytes .../font/roboto/Roboto-Light.woff2 | Bin 49380 -> 0 bytes .../materialize/font/roboto/Roboto-Medium.eot | Bin 21364 -> 0 bytes .../materialize/font/roboto/Roboto-Medium.ttf | Bin 127488 -> 0 bytes .../font/roboto/Roboto-Medium.woff | Bin 62980 -> 0 bytes .../font/roboto/Roboto-Medium.woff2 | Bin 50224 -> 0 bytes .../font/roboto/Roboto-Regular.eot | Bin 21320 -> 0 bytes .../font/roboto/Roboto-Regular.ttf | Bin 126072 -> 0 bytes .../font/roboto/Roboto-Regular.woff | Bin 61736 -> 0 bytes .../font/roboto/Roboto-Regular.woff2 | Bin 49236 -> 0 bytes .../materialize/font/roboto/Roboto-Thin.eot | Bin 21659 -> 0 bytes .../materialize/font/roboto/Roboto-Thin.ttf | Bin 127584 -> 0 bytes .../materialize/font/roboto/Roboto-Thin.woff | Bin 61628 -> 0 bytes .../materialize/font/roboto/Roboto-Thin.woff2 | Bin 48524 -> 0 bytes web/public/libs/materialize/js/materialize.js | 6830 ---------- web/public/libs/sweetalert/.editorconfig | 11 - web/public/libs/sweetalert/.gitignore | 5 - web/public/libs/sweetalert/.jshintrc | 11 - web/public/libs/sweetalert/.travis.yml | 8 - web/public/libs/sweetalert/LICENSE | 22 - web/public/libs/sweetalert/README.md | 157 - web/public/libs/sweetalert/bower.json | 25 - .../sweetalert/dev/gulpfile-wrap-template.js | 18 - web/public/libs/sweetalert/dev/ie9.css | 23 - .../libs/sweetalert/dev/loader-animation.css | 209 - .../sweetalert/dev/modules/default-params.js | 26 - .../sweetalert/dev/modules/handle-click.js | 128 - .../libs/sweetalert/dev/modules/handle-dom.js | 161 - .../libs/sweetalert/dev/modules/handle-key.js | 73 - .../sweetalert/dev/modules/handle-swal-dom.js | 148 - .../sweetalert/dev/modules/injected-html.js | 69 - .../libs/sweetalert/dev/modules/set-params.js | 221 - .../libs/sweetalert/dev/modules/utils.js | 71 - .../libs/sweetalert/dev/sweetalert.es6.js | 311 - .../libs/sweetalert/dev/sweetalert.scss | 648 - .../libs/sweetalert/dist/sweetalert-dev.js | 1285 -- .../libs/sweetalert/example/example.css | 442 - .../libs/sweetalert/example/example.scss | 580 - .../sweetalert/example/images/logo_big.png | Bin 17162 -> 0 bytes .../sweetalert/example/images/logo_big@2x.png | Bin 37467 -> 0 bytes .../sweetalert/example/images/logo_small.png | Bin 4459 -> 0 bytes .../example/images/logo_small@2x.png | Bin 9760 -> 0 bytes .../example/images/te-logo-small.svg | 12 - .../sweetalert/example/images/thumbs-up.jpg | Bin 30052 -> 0 bytes .../sweetalert/example/images/vs_icon.png | Bin 3873 -> 0 bytes .../sweetalert/example/images/vs_icon@2x.png | Bin 8254 -> 0 bytes web/public/libs/sweetalert/gulpfile.js | 108 - web/public/libs/sweetalert/index.html | 584 - .../sweetalert/lib/modules/default-params.js | 32 - .../sweetalert/lib/modules/handle-click.js | 135 - .../libs/sweetalert/lib/modules/handle-dom.js | 191 - .../libs/sweetalert/lib/modules/handle-key.js | 79 - .../sweetalert/lib/modules/handle-swal-dom.js | 167 - .../sweetalert/lib/modules/injected-html.js | 42 - .../libs/sweetalert/lib/modules/set-params.js | 225 - .../libs/sweetalert/lib/modules/utils.js | 73 - web/public/libs/sweetalert/lib/sweetalert.js | 303 - web/public/libs/sweetalert/package.json | 46 - web/public/libs/sweetalert/sweetalert.gif | Bin 495936 -> 0 bytes web/public/libs/sweetalert/test/index.html | 25 - web/public/libs/sweetalert/test/tests.js | 141 - .../sweetalert/themes/facebook/facebook.css | 111 - .../sweetalert/themes/facebook/facebook.scss | 146 - .../libs/sweetalert/themes/google/google.css | 115 - .../libs/sweetalert/themes/google/google.scss | 148 - .../sweetalert/themes/twitter/twitter.css | 140 - .../sweetalert/themes/twitter/twitter.scss | 177 - web/public/libs/zeroclipboard/.gitignore | 10 - web/public/libs/zeroclipboard/.jshintrc | 62 - web/public/libs/zeroclipboard/.npmignore | 3 - web/public/libs/zeroclipboard/.spmignore | 3 - web/public/libs/zeroclipboard/.travis.yml | 5 - web/public/libs/zeroclipboard/CONTRIBUTING.md | 29 - web/public/libs/zeroclipboard/Gruntfile.js | 357 - web/public/libs/zeroclipboard/LICENSE | 8 - web/public/libs/zeroclipboard/README.md | 92 - web/public/libs/zeroclipboard/bower.json | 43 - web/public/libs/zeroclipboard/component.json | 37 - web/public/libs/zeroclipboard/composer.json | 49 - web/public/libs/zeroclipboard/dist/.jshintrc | 70 - .../zeroclipboard/dist/ZeroClipboard.Core.js | 2017 --- .../dist/ZeroClipboard.Core.min.js | 10 - .../dist/ZeroClipboard.Core.min.map | 1 - .../zeroclipboard/dist/ZeroClipboard.min.js | 10 - .../zeroclipboard/dist/ZeroClipboard.min.map | 1 - .../libs/zeroclipboard/dist/ZeroClipboard.swf | Bin 6580 -> 0 bytes .../docs/api/ZeroClipboard.Core.md | 903 -- .../zeroclipboard/docs/api/ZeroClipboard.md | 1081 -- .../libs/zeroclipboard/docs/instructions.md | 579 - web/public/libs/zeroclipboard/docs/roadmap.md | 9 - .../libs/zeroclipboard/docs/security.md | 32 - web/public/libs/zeroclipboard/package.json | 82 - .../src/flash/ClipboardInjector.as | 219 - .../libs/zeroclipboard/src/flash/JsProxy.as | 373 - .../libs/zeroclipboard/src/flash/XssUtils.as | 104 - .../zeroclipboard/src/flash/ZeroClipboard.as | 401 - .../libs/zeroclipboard/src/js/client/api.js | 180 - .../zeroclipboard/src/js/client/private.js | 507 - .../libs/zeroclipboard/src/js/client/state.js | 60 - .../libs/zeroclipboard/src/js/core/api.js | 211 - .../libs/zeroclipboard/src/js/core/private.js | 1975 --- .../libs/zeroclipboard/src/js/core/state.js | 256 - web/public/libs/zeroclipboard/src/js/end.js | 21 - .../zeroclipboard/src/js/shared/private.js | 317 - .../libs/zeroclipboard/src/js/shared/state.js | 44 - web/public/libs/zeroclipboard/src/js/start.js | 2 - .../libs/zeroclipboard/src/meta/LICENSE.tmpl | 8 - .../zeroclipboard/src/meta/bower.json.tmpl | 18 - .../src/meta/component.json.tmpl | 12 - .../zeroclipboard/src/meta/composer.json.tmpl | 47 - .../zeroclipboard/src/meta/source-banner.tmpl | 8 - web/public/libs/zeroclipboard/test/.jshintrc | 68 - .../test/built/ZeroClipboard.Core.tests.js | 67 - .../built/ZeroClipboard.Core.tests.js.html | 43 - .../test/built/ZeroClipboard.tests.js | 288 - .../test/built/ZeroClipboard.tests.js.html | 73 - .../zeroclipboard/test/client/api.tests.js | 1521 --- .../test/client/api.tests.js.html | 83 - .../test/client/private.tests.js | 40 - .../test/client/private.tests.js.html | 53 - .../libs/zeroclipboard/test/core/api.tests.js | 441 - .../zeroclipboard/test/core/api.tests.js.html | 77 - .../zeroclipboard/test/core/private.tests.js | 516 - .../test/core/private.tests.js.html | 68 - web/public/libs/zeroclipboard/test/index.html | 28 - .../test/shared/private.tests.js | 911 -- .../test/shared/private.tests.js.html | 28 - web/public/package.json | 38 + web/views/index.pug | 14 +- 258 files changed, 646 insertions(+), 42223 deletions(-) create mode 100755 web/helpers/basicauthhttpprovider.js rename web/public/{libs/loader/stylesheets => css}/loader.css (98%) rename web/public/{libs/materialize => }/css/materialize.css (100%) rename web/public/{libs/materialize => }/css/materialize.min.css (100%) rename web/public/{libs/sweetalert/dist => css}/sweetalert.css (100%) create mode 100755 web/public/gulpfile.js rename web/public/{libs/loader/images => img}/loader.png (100%) create mode 100644 web/public/javascripts/application.js create mode 100644 web/public/javascripts/application/addPhoneToWallet.js create mode 100644 web/public/javascripts/application/getAddressByPhone.js create mode 100644 web/public/javascripts/application/getPhoneByAddress.js rename web/public/{js => javascripts/application}/getQueryParamsHelper.js (100%) rename web/public/{js/indexClient.js => javascripts/application/index.js} (80%) create mode 100644 web/public/javascripts/application/sendCodeBySMS.js create mode 100644 web/public/javascripts/application/verifyCodeFromSMS.js rename web/public/{libs/zeroclipboard/dist => javascripts/vendor}/ZeroClipboard.js (100%) create mode 100644 web/public/javascripts/vendor/index.js rename web/public/{libs => javascripts/vendor}/jquery.min.js (100%) rename web/public/{libs/materialize/js => javascripts/vendor}/materialize.min.js (100%) rename web/public/{libs/sweetalert/dist => javascripts/vendor}/sweetalert.min.js (100%) delete mode 100644 web/public/js/savedData delete mode 100644 web/public/libs/loader/.sass-cache/0db2a53e6d2a046fdf708c4889dc8cf6d9b06188/_links.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0db2a53e6d2a046fdf708c4889dc8cf6d9b06188/_lists.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0db2a53e6d2a046fdf708c4889dc8cf6d9b06188/_text.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0db2a53e6d2a046fdf708c4889dc8cf6d9b06188/_units.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0db2a53e6d2a046fdf708c4889dc8cf6d9b06188/_vertical_rhythm.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_animation.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_appearance.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_background-clip.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_background-origin.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_background-size.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_border-radius.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_box-shadow.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_box-sizing.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_columns.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_deprecated-support.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_filter.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_flexbox.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_font-face.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_hyphenation.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_images.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_inline-block.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_opacity.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_regions.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_text-shadow.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_transform.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_transition.scssc delete mode 100644 web/public/libs/loader/.sass-cache/0e55e0c2f03ada79e8e9c154aef7b8440c943d5b/_user-interface.scssc delete mode 100644 web/public/libs/loader/.sass-cache/188401d77a0950e562c6e7084196cdcbf6a7ce0a/_ellipsis.scssc delete mode 100644 web/public/libs/loader/.sass-cache/188401d77a0950e562c6e7084196cdcbf6a7ce0a/_force-wrap.scssc delete mode 100644 web/public/libs/loader/.sass-cache/188401d77a0950e562c6e7084196cdcbf6a7ce0a/_nowrap.scssc delete mode 100644 web/public/libs/loader/.sass-cache/188401d77a0950e562c6e7084196cdcbf6a7ce0a/_replacement.scssc delete mode 100644 web/public/libs/loader/.sass-cache/1c69eb53feb5e2ff4e0ff12cb64ba6c4ab25f516/_color.scssc delete mode 100644 web/public/libs/loader/.sass-cache/1c69eb53feb5e2ff4e0ff12cb64ba6c4ab25f516/_general.scssc delete mode 100644 web/public/libs/loader/.sass-cache/1c69eb53feb5e2ff4e0ff12cb64ba6c4ab25f516/_sprites.scssc delete mode 100644 web/public/libs/loader/.sass-cache/1c69eb53feb5e2ff4e0ff12cb64ba6c4ab25f516/_tables.scssc delete mode 100644 web/public/libs/loader/.sass-cache/2073d29559d07e2c330945789cca13b13045a7d2/_grid-background.scssc delete mode 100644 web/public/libs/loader/.sass-cache/2c9a6e87a4973fce66281a3b12e2ebd7794dc84b/_hover-link.scssc delete mode 100644 web/public/libs/loader/.sass-cache/2c9a6e87a4973fce66281a3b12e2ebd7794dc84b/_link-colors.scssc delete mode 100644 web/public/libs/loader/.sass-cache/2c9a6e87a4973fce66281a3b12e2ebd7794dc84b/_unstyled-link.scssc delete mode 100644 web/public/libs/loader/.sass-cache/361f2c7aa4574a083816e1061ca3b67db3ba32a1/animation.scssc delete mode 100644 web/public/libs/loader/.sass-cache/361f2c7aa4574a083816e1061ca3b67db3ba32a1/ie.scssc delete mode 100644 web/public/libs/loader/.sass-cache/361f2c7aa4574a083816e1061ca3b67db3ba32a1/loader.scssc delete mode 100644 web/public/libs/loader/.sass-cache/361f2c7aa4574a083816e1061ca3b67db3ba32a1/print.scssc delete mode 100644 web/public/libs/loader/.sass-cache/361f2c7aa4574a083816e1061ca3b67db3ba32a1/screen.scssc delete mode 100644 web/public/libs/loader/.sass-cache/3aa78c834a4a7fb58d9e6df7a0dfc272342c91cd/_utilities.scssc delete mode 100644 web/public/libs/loader/.sass-cache/43ef5fe47aaf1bffb31c223bb7557021ecf6b963/_compass.scssc delete mode 100644 web/public/libs/loader/.sass-cache/4a2a372ebf19c708f82131b980a6b392f94950e1/_clearfix.scssc delete mode 100644 web/public/libs/loader/.sass-cache/4a2a372ebf19c708f82131b980a6b392f94950e1/_float.scssc delete mode 100644 web/public/libs/loader/.sass-cache/4a2a372ebf19c708f82131b980a6b392f94950e1/_hacks.scssc delete mode 100644 web/public/libs/loader/.sass-cache/4a2a372ebf19c708f82131b980a6b392f94950e1/_min.scssc delete mode 100644 web/public/libs/loader/.sass-cache/4a2a372ebf19c708f82131b980a6b392f94950e1/_reset.scssc delete mode 100644 web/public/libs/loader/.sass-cache/4a2a372ebf19c708f82131b980a6b392f94950e1/_tag-cloud.scssc delete mode 100644 web/public/libs/loader/.sass-cache/5118331935e6a4d8b2bec2053c7d1cd8282bf297/_alternating-rows-and-columns.scssc delete mode 100644 web/public/libs/loader/.sass-cache/5118331935e6a4d8b2bec2053c7d1cd8282bf297/_borders.scssc delete mode 100644 web/public/libs/loader/.sass-cache/5118331935e6a4d8b2bec2053c7d1cd8282bf297/_scaffolding.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/_compass.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/_support.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_background-size.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_images.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_inline-block.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/typography/_links.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/typography/_lists.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/typography/_text.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/typography/lists/_bullets.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/typography/lists/_horizontal-list.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/typography/text/_replacement.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_clearfix.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_float.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_hacks.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_reset.scssc delete mode 100644 web/public/libs/loader/.sass-cache/75fcaf1b4852ceb732871195e41567cc2a7d8997/Users/idobrovolsky/Sites/loader/sass/animation.scssc delete mode 100644 web/public/libs/loader/.sass-cache/9dd8565a1e6093bc6e65f55e1c5fc094a61c486b/_base.scssc delete mode 100644 web/public/libs/loader/.sass-cache/9dd8565a1e6093bc6e65f55e1c5fc094a61c486b/_sprite-img.scssc delete mode 100644 web/public/libs/loader/.sass-cache/b610f18696c8c2c3cd5e574e2f52b8dfa5295dda/_bullets.scssc delete mode 100644 web/public/libs/loader/.sass-cache/b610f18696c8c2c3cd5e574e2f52b8dfa5295dda/_horizontal-list.scssc delete mode 100644 web/public/libs/loader/.sass-cache/b610f18696c8c2c3cd5e574e2f52b8dfa5295dda/_inline-block-list.scssc delete mode 100644 web/public/libs/loader/.sass-cache/b610f18696c8c2c3cd5e574e2f52b8dfa5295dda/_inline-list.scssc delete mode 100644 web/public/libs/loader/.sass-cache/c3d3095501be16fa1905e8b59c58f41fac5399f6/_css3.scssc delete mode 100644 web/public/libs/loader/.sass-cache/c3d3095501be16fa1905e8b59c58f41fac5399f6/_reset.scssc delete mode 100644 web/public/libs/loader/.sass-cache/c3d3095501be16fa1905e8b59c58f41fac5399f6/_support.scssc delete mode 100644 web/public/libs/loader/.sass-cache/c3d3095501be16fa1905e8b59c58f41fac5399f6/_typography.scssc delete mode 100644 web/public/libs/loader/.sass-cache/c3d3095501be16fa1905e8b59c58f41fac5399f6/_utilities.scssc delete mode 100644 web/public/libs/loader/.sass-cache/f27f012718cabc6d3b7d75ffe0cc7695e9d7031d/_brightness.scssc delete mode 100644 web/public/libs/loader/.sass-cache/f27f012718cabc6d3b7d75ffe0cc7695e9d7031d/_contrast.scssc delete mode 100644 web/public/libs/loader/config.rb delete mode 100644 web/public/libs/loader/index.html delete mode 100644 web/public/libs/loader/sass/loader.scss delete mode 100644 web/public/libs/materialize/LICENSE delete mode 100755 web/public/libs/materialize/README.md delete mode 100644 web/public/libs/materialize/css/materializeDefault.css delete mode 100644 web/public/libs/materialize/font/material-design-icons/LICENSE.txt delete mode 100644 web/public/libs/materialize/font/material-design-icons/Material-Design-Icons.eot delete mode 100644 web/public/libs/materialize/font/material-design-icons/Material-Design-Icons.svg delete mode 100644 web/public/libs/materialize/font/material-design-icons/Material-Design-Icons.ttf delete mode 100644 web/public/libs/materialize/font/material-design-icons/Material-Design-Icons.woff delete mode 100644 web/public/libs/materialize/font/material-design-icons/Material-Design-Icons.woff2 delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Bold.eot delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Bold.ttf delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Bold.woff delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Bold.woff2 delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Light.eot delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Light.ttf delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Light.woff delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Light.woff2 delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Medium.eot delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Medium.ttf delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Medium.woff delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Medium.woff2 delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Regular.eot delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Regular.ttf delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Regular.woff delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Regular.woff2 delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Thin.eot delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Thin.ttf delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Thin.woff delete mode 100644 web/public/libs/materialize/font/roboto/Roboto-Thin.woff2 delete mode 100644 web/public/libs/materialize/js/materialize.js delete mode 100755 web/public/libs/sweetalert/.editorconfig delete mode 100755 web/public/libs/sweetalert/.gitignore delete mode 100755 web/public/libs/sweetalert/.jshintrc delete mode 100755 web/public/libs/sweetalert/.travis.yml delete mode 100755 web/public/libs/sweetalert/LICENSE delete mode 100755 web/public/libs/sweetalert/README.md delete mode 100755 web/public/libs/sweetalert/bower.json delete mode 100755 web/public/libs/sweetalert/dev/gulpfile-wrap-template.js delete mode 100755 web/public/libs/sweetalert/dev/ie9.css delete mode 100755 web/public/libs/sweetalert/dev/loader-animation.css delete mode 100755 web/public/libs/sweetalert/dev/modules/default-params.js delete mode 100755 web/public/libs/sweetalert/dev/modules/handle-click.js delete mode 100755 web/public/libs/sweetalert/dev/modules/handle-dom.js delete mode 100755 web/public/libs/sweetalert/dev/modules/handle-key.js delete mode 100755 web/public/libs/sweetalert/dev/modules/handle-swal-dom.js delete mode 100755 web/public/libs/sweetalert/dev/modules/injected-html.js delete mode 100755 web/public/libs/sweetalert/dev/modules/set-params.js delete mode 100755 web/public/libs/sweetalert/dev/modules/utils.js delete mode 100755 web/public/libs/sweetalert/dev/sweetalert.es6.js delete mode 100755 web/public/libs/sweetalert/dev/sweetalert.scss delete mode 100755 web/public/libs/sweetalert/dist/sweetalert-dev.js delete mode 100755 web/public/libs/sweetalert/example/example.css delete mode 100755 web/public/libs/sweetalert/example/example.scss delete mode 100755 web/public/libs/sweetalert/example/images/logo_big.png delete mode 100755 web/public/libs/sweetalert/example/images/logo_big@2x.png delete mode 100755 web/public/libs/sweetalert/example/images/logo_small.png delete mode 100755 web/public/libs/sweetalert/example/images/logo_small@2x.png delete mode 100755 web/public/libs/sweetalert/example/images/te-logo-small.svg delete mode 100755 web/public/libs/sweetalert/example/images/thumbs-up.jpg delete mode 100755 web/public/libs/sweetalert/example/images/vs_icon.png delete mode 100755 web/public/libs/sweetalert/example/images/vs_icon@2x.png delete mode 100755 web/public/libs/sweetalert/gulpfile.js delete mode 100755 web/public/libs/sweetalert/index.html delete mode 100755 web/public/libs/sweetalert/lib/modules/default-params.js delete mode 100755 web/public/libs/sweetalert/lib/modules/handle-click.js delete mode 100755 web/public/libs/sweetalert/lib/modules/handle-dom.js delete mode 100755 web/public/libs/sweetalert/lib/modules/handle-key.js delete mode 100755 web/public/libs/sweetalert/lib/modules/handle-swal-dom.js delete mode 100755 web/public/libs/sweetalert/lib/modules/injected-html.js delete mode 100755 web/public/libs/sweetalert/lib/modules/set-params.js delete mode 100755 web/public/libs/sweetalert/lib/modules/utils.js delete mode 100755 web/public/libs/sweetalert/lib/sweetalert.js delete mode 100755 web/public/libs/sweetalert/package.json delete mode 100755 web/public/libs/sweetalert/sweetalert.gif delete mode 100755 web/public/libs/sweetalert/test/index.html delete mode 100755 web/public/libs/sweetalert/test/tests.js delete mode 100755 web/public/libs/sweetalert/themes/facebook/facebook.css delete mode 100755 web/public/libs/sweetalert/themes/facebook/facebook.scss delete mode 100755 web/public/libs/sweetalert/themes/google/google.css delete mode 100755 web/public/libs/sweetalert/themes/google/google.scss delete mode 100755 web/public/libs/sweetalert/themes/twitter/twitter.css delete mode 100755 web/public/libs/sweetalert/themes/twitter/twitter.scss delete mode 100755 web/public/libs/zeroclipboard/.gitignore delete mode 100755 web/public/libs/zeroclipboard/.jshintrc delete mode 100755 web/public/libs/zeroclipboard/.npmignore delete mode 100755 web/public/libs/zeroclipboard/.spmignore delete mode 100755 web/public/libs/zeroclipboard/.travis.yml delete mode 100755 web/public/libs/zeroclipboard/CONTRIBUTING.md delete mode 100755 web/public/libs/zeroclipboard/Gruntfile.js delete mode 100755 web/public/libs/zeroclipboard/LICENSE delete mode 100755 web/public/libs/zeroclipboard/README.md delete mode 100755 web/public/libs/zeroclipboard/bower.json delete mode 100755 web/public/libs/zeroclipboard/component.json delete mode 100755 web/public/libs/zeroclipboard/composer.json delete mode 100755 web/public/libs/zeroclipboard/dist/.jshintrc delete mode 100755 web/public/libs/zeroclipboard/dist/ZeroClipboard.Core.js delete mode 100755 web/public/libs/zeroclipboard/dist/ZeroClipboard.Core.min.js delete mode 100755 web/public/libs/zeroclipboard/dist/ZeroClipboard.Core.min.map delete mode 100755 web/public/libs/zeroclipboard/dist/ZeroClipboard.min.js delete mode 100755 web/public/libs/zeroclipboard/dist/ZeroClipboard.min.map delete mode 100755 web/public/libs/zeroclipboard/dist/ZeroClipboard.swf delete mode 100755 web/public/libs/zeroclipboard/docs/api/ZeroClipboard.Core.md delete mode 100755 web/public/libs/zeroclipboard/docs/api/ZeroClipboard.md delete mode 100755 web/public/libs/zeroclipboard/docs/instructions.md delete mode 100755 web/public/libs/zeroclipboard/docs/roadmap.md delete mode 100755 web/public/libs/zeroclipboard/docs/security.md delete mode 100755 web/public/libs/zeroclipboard/package.json delete mode 100755 web/public/libs/zeroclipboard/src/flash/ClipboardInjector.as delete mode 100755 web/public/libs/zeroclipboard/src/flash/JsProxy.as delete mode 100755 web/public/libs/zeroclipboard/src/flash/XssUtils.as delete mode 100755 web/public/libs/zeroclipboard/src/flash/ZeroClipboard.as delete mode 100755 web/public/libs/zeroclipboard/src/js/client/api.js delete mode 100755 web/public/libs/zeroclipboard/src/js/client/private.js delete mode 100755 web/public/libs/zeroclipboard/src/js/client/state.js delete mode 100755 web/public/libs/zeroclipboard/src/js/core/api.js delete mode 100755 web/public/libs/zeroclipboard/src/js/core/private.js delete mode 100755 web/public/libs/zeroclipboard/src/js/core/state.js delete mode 100755 web/public/libs/zeroclipboard/src/js/end.js delete mode 100755 web/public/libs/zeroclipboard/src/js/shared/private.js delete mode 100755 web/public/libs/zeroclipboard/src/js/shared/state.js delete mode 100755 web/public/libs/zeroclipboard/src/js/start.js delete mode 100755 web/public/libs/zeroclipboard/src/meta/LICENSE.tmpl delete mode 100755 web/public/libs/zeroclipboard/src/meta/bower.json.tmpl delete mode 100755 web/public/libs/zeroclipboard/src/meta/component.json.tmpl delete mode 100755 web/public/libs/zeroclipboard/src/meta/composer.json.tmpl delete mode 100755 web/public/libs/zeroclipboard/src/meta/source-banner.tmpl delete mode 100755 web/public/libs/zeroclipboard/test/.jshintrc delete mode 100755 web/public/libs/zeroclipboard/test/built/ZeroClipboard.Core.tests.js delete mode 100755 web/public/libs/zeroclipboard/test/built/ZeroClipboard.Core.tests.js.html delete mode 100755 web/public/libs/zeroclipboard/test/built/ZeroClipboard.tests.js delete mode 100755 web/public/libs/zeroclipboard/test/built/ZeroClipboard.tests.js.html delete mode 100755 web/public/libs/zeroclipboard/test/client/api.tests.js delete mode 100755 web/public/libs/zeroclipboard/test/client/api.tests.js.html delete mode 100755 web/public/libs/zeroclipboard/test/client/private.tests.js delete mode 100755 web/public/libs/zeroclipboard/test/client/private.tests.js.html delete mode 100755 web/public/libs/zeroclipboard/test/core/api.tests.js delete mode 100755 web/public/libs/zeroclipboard/test/core/api.tests.js.html delete mode 100755 web/public/libs/zeroclipboard/test/core/private.tests.js delete mode 100755 web/public/libs/zeroclipboard/test/core/private.tests.js.html delete mode 100755 web/public/libs/zeroclipboard/test/index.html delete mode 100755 web/public/libs/zeroclipboard/test/shared/private.tests.js delete mode 100755 web/public/libs/zeroclipboard/test/shared/private.tests.js.html create mode 100755 web/public/package.json diff --git a/.gitignore b/.gitignore index a0ae8ea..6514677 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ web/node_modules +web/public/node_modules +**/*.DS_Store \ No newline at end of file diff --git a/web/app.js b/web/app.js index d5f13ff..4804500 100644 --- a/web/app.js +++ b/web/app.js @@ -13,16 +13,17 @@ var config = JSON.parse(fs.readFileSync('./config.json', 'utf8')); var twilioClient = twilio(config.sendSMS.twilio.accountSIDLive, config.sendSMS.twilio.authTokenLive); var MongoClient = mongodb.MongoClient; +var provider = require('./helpers/basicauthhttpprovider'); + var web3; if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); } else { - if (config.environment == "live") - web3 = new Web3(new Web3.providers.HttpProvider(config.smartContract.rpc.live)); - else if (config.environment == "dev") - web3 = new Web3(new Web3.providers.HttpProvider(config.smartContract.rpc.test)); + if (config.environment == "live") { + web3 = new Web3(new provider(config.smartContract.rpc[config.environment], config.smartContract.rpc.user, config.smartContract.rpc.pass)); + } else - web3 = new Web3(new Web3.providers.HttpProvider(config.smartContract.rpc.test)); + web3 = new Web3(new Web3.providers.HttpProvider(config.smartContract.rpc[config.environment])); } process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'; @@ -38,16 +39,8 @@ app.twilioClient = twilioClient; app.web3 = web3; app.crypto = crypto; -if (config.environment == "live") { - app.contractAddress = config.smartContract.contractAddress.live; - app.contractWallet = config.smartContract.wallet.live; -} else if (config.environment == "dev") { - app.contractAddress = config.smartContract.contractAddress.test; - app.contractWallet = config.smartContract.wallet.test; -} else { - app.contractAddress = config.smartContract.contractAddress.test; - app.contractWallet = config.smartContract.wallet.test; -} +app.contractAddress = config.smartContract.contractAddress[config.environment]; +app.contractWallet = config.smartContract.wallet[config.environment]; app.MongoClient = MongoClient; diff --git a/web/controllers/index.js b/web/controllers/index.js index 7085c75..507d357 100644 --- a/web/controllers/index.js +++ b/web/controllers/index.js @@ -4,100 +4,82 @@ module.exports = function (app) { var mongodbConnectionString = app.config.mongodbConnectionString; var randomInt = app.randomInt; var attachToContract = app.attachToContract; + var generateError = app.generateError; app.get('/', function(request, response) { attachToContract(function(err, contract) { if (err) { + console.log(err); response.render("index", { address: app.contractAddress }); - } else { - response.render("index", { - address: app.contractAddress - }); + return; } + + response.render("index", { + address: app.contractAddress + }); }); }); app.post('/sendCodeBySMS', function(request, response) { console.log(request.body); var globalToken = request.body.globalToken; - if (globalToken == app.config.globalToken) { - var to = request.body.to; - var code = randomInt(100000,1000000); - twilioClient.messages.create({ - body: code, - to: "+" + to, - from: app.config.sendSMS.twilio.phoneNumberLive - }, function(err, message) { + if (globalToken != app.config.globalToken) { + generateError(response, 401, "Unauthorized", "Wrong app token"); + return; + } + + var to = request.body.to; + var code = randomInt(100000,1000000); + twilioClient.messages.create({ + body: code, + to: "+" + to, + from: app.config.sendSMS.twilio.phoneNumberLive + }, function(err, message) { + if (err) { + console.log(err); + generateError(response, 500, "Can't send sms", err.message); + return; + } + + console.log("message.sid: " + message.sid); + insertSentCodeToDB(to, code, function(err) { if (err) { console.log(err); - response.send({ - error : { - code : 500, - title : "Can't send sms", - message : err.message - } - }); - } else { - console.log("message.sid: " + message.sid); - insertSentCodeToDB(to, code, function(err) { - if (err) { - console.log(err); - response.send({ - error : { - code : 500, - title : "Can't insert code to db", - message : err.message - } - }); - } else { - console.log("sms code:" + code); - response.send({ - success : { - code : 200, - title : "Success", - message : "SMS successfully sent" - } - }); - } - }); + generateError(response, 500, "Can't insert code to db", err.message); + return; } + + console.log("sms code:" + code); + response.send({ + success : { + code : 200, + title : "Success", + message : "SMS successfully sent" + } + }); }); - } else { - response.send({ - error : { - code : 401, - title : "Unauthorized", - message : "Wrong app token" - } - }); - } + }); }); function insertSentCodeToDB(phone, code, cb) { MongoClient.connect(mongodbConnectionString, function(err, db) { - if(err) { - cb(err); - } else { - var collection = db.collection('PhoneCodes'); - collection.remove({phone: phone}, function(err, result) { - if(err) { - db.close(); - cb(err); - } else { - collection.insert({phone: phone, code: code}, function(err, docs) { - if(err) { - db.close(); - cb(err); - } else { - db.close(); - cb(null); - } - }); - } - }); - } + if(err) return cb(err); + + var collection = db.collection('PhoneCodes'); + collection.remove({phone: phone}, function(err, result) { + if (err) { + db.close(); + return cb(err); + } + + collection.insert({phone: phone, code: code}, function(err, docs) { + db.close(); + if (err) return cb(err); + cb(null); + }); + }); }); } @@ -106,75 +88,52 @@ module.exports = function (app) { var globalToken = request.body.globalToken; var code = request.body.code; var phone = request.body.phone; - if (globalToken == app.config.globalToken) { - MongoClient.connect(mongodbConnectionString, function(err, db) { - if(err) { - response.send({ - error : { - code : 500, - title : "Error", - message: err.message + if (globalToken != app.config.globalToken) { + generateError(response, 401, "Unauthorized", "Wrong app token"); + return; + } + + MongoClient.connect(mongodbConnectionString, function(err, db) { + if (err) { + generateError(response, 500, "Error", err.message); + return; + } + + var collection = db.collection('PhoneCodes'); + collection.find({"code": parseInt(code), "phone": phone }, function(err, cursor) { + if (err) { + console.log(err); + generateError(response, 500, "Error", "Wrong code"); + return; + } + + cursor.toArray(function(err, results) { + console.log(err); + if (!results) { + generateError(response, 500, "Error", "Wrong code"); + return; + } + + if (results.length == 0) { + generateError(response, 500, "Error", "Wrong code"); + return; + } + + var hash = app.crypto.createHmac('sha256', app.config.salt) + .update(code) + .digest('hex'); + console.log(hash); + console.log(results); + var result = results[0]; + response.send({ + success : { + code : 200, + message: hash } }); - } else { - var collection = db.collection('PhoneCodes'); - collection.find({"code": parseInt(code), "phone": phone }, function(err, cursor) { - if (err) { - console.log(err); - response.send({ - error : { - code : 500, - title : "Error", - message: "Wrong code" - } - }); - } else { - cursor.toArray(function(err, results) { - console.log(err); - if (!results) { - response.send({ - error : { - code : 500, - title : "Error", - message: "Wrong code" - } - }); - } else if (results.length > 0) { - var hash = app.crypto.createHmac('sha256', app.config.salt) - .update(code) - .digest('hex'); - console.log(hash); - console.log(results); - var result = results[0]; - response.send({ - success : { - code : 200, - message: hash - } - }); - } else { - response.send({ - error : { - code : 500, - title : "Error", - message: "Wrong code" - } - }); - } - db.close(); - }); - } - }); - } + db.close(); + }); }); - } else { - response.send({ - error : { - code : 401, - title : "Unauthorized", - message : "Wrong app token" - } - }); - } + }); }); } \ No newline at end of file diff --git a/web/helpers/basicauthhttpprovider.js b/web/helpers/basicauthhttpprovider.js new file mode 100755 index 0000000..2c48a0e --- /dev/null +++ b/web/helpers/basicauthhttpprovider.js @@ -0,0 +1,146 @@ +/* + This file is part of web3.js. + + web3.js is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + web3.js is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with web3.js. If not, see . +*/ +/** @file httpprovider.js + * @authors: + * Marek Kotewicz + * Marian Oancea + * Fabian Vogelsteller + * @date 2015 + */ + +"use strict"; + +var errors = require('web3/lib/web3/errors'); + +// workaround to use httpprovider in different envs +var XMLHttpRequest; // jshint ignore: line + +// browser +if (typeof window !== 'undefined' && window.XMLHttpRequest) { + XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line + +// node +} else { + XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line +} + +/** + * HttpProvider should be used to send rpc calls over http + */ +var HttpProvider = function (host, user, pass) { + this.host = host || 'http://localhost:8545'; + this.authorizationHeader = 'Basic ' + (new Buffer(user + ':' + pass)).toString('base64'); + this.user = user; + this.pass = pass; +}; + +/** + * Should be called to prepare new XMLHttpRequest + * + * @method prepareRequest + * @param {Boolean} true if request should be async + * @return {XMLHttpRequest} object + */ +HttpProvider.prototype.prepareRequest = function (async) { + var request = new XMLHttpRequest(); + request.open('POST', this.host, async); + request.setRequestHeader('Content-Type','application/json'); + request.setRequestHeader('Authorization', this.authorizationHeader); + return request; +}; + +/** + * Should be called to make sync request + * + * @method send + * @param {Object} payload + * @return {Object} result + */ +HttpProvider.prototype.send = function (payload) { + var request = this.prepareRequest(false); + + try { + request.send(JSON.stringify(payload)); + } catch(error) { + throw errors.InvalidConnection(this.host); + } + + var result = request.responseText; + + try { + result = JSON.parse(result); + } catch(e) { + throw errors.InvalidResponse(request.responseText); + } + + return result; +}; + +/** + * Should be used to make async request + * + * @method sendAsync + * @param {Object} payload + * @param {Function} callback triggered on end with (err, result) + */ +HttpProvider.prototype.sendAsync = function (payload, callback) { + var request = this.prepareRequest(true); + + request.onreadystatechange = function() { + if (request.readyState === 4) { + var result = request.responseText; + var error = null; + + try { + result = JSON.parse(result); + } catch(e) { + error = errors.InvalidResponse(request.responseText); + } + + callback(error, result); + } + }; + + try { + request.send(JSON.stringify(payload)); + } catch(error) { + callback(errors.InvalidConnection(this.host)); + } +}; + +/** + * Synchronously tries to make Http request + * + * @method isConnected + * @return {Boolean} returns true if request haven't failed. Otherwise false + */ +HttpProvider.prototype.isConnected = function() { + try { + this.send({ + id: 9999999999, + jsonrpc: '2.0', + method: 'net_listening', + params: [] + }); + return true; + } catch(e) { + return false; + } +}; + +module.exports = HttpProvider; + diff --git a/web/helpers/commonHelper.js b/web/helpers/commonHelper.js index 5b25efe..2d6e79b 100644 --- a/web/helpers/commonHelper.js +++ b/web/helpers/commonHelper.js @@ -1,7 +1,18 @@ module.exports = function (app) { app.randomInt = randomInt; + app.generateError = generateError; function randomInt (low, high) { return Math.floor(Math.random() * (high - low) + low); } + + function generateError (response, code, title, message) { + response.send({ + error : { + code : code, + title : title, + message : message + } + }); + } }; \ No newline at end of file diff --git a/web/helpers/etherHelper.js b/web/helpers/etherHelper.js index cfdb269..c536efe 100644 --- a/web/helpers/etherHelper.js +++ b/web/helpers/etherHelper.js @@ -1,5 +1,6 @@ module.exports = function (app) { var web3 = app.web3; + var generateError = app.generateError; var contract; app.attachToContract = attachToContract; @@ -8,187 +9,165 @@ module.exports = function (app) { function attachToContract(cb) { if(!web3.isConnected()) { - if (cb) { - cb({code: 200, title: "Error", message: "check RPC"}, null); - } - } else { - console.log(web3.eth.accounts); - web3.eth.defaultAccount = web3.eth.accounts[1]; - console.log("web3.eth.defaultAccount:"); - console.log(web3.eth.defaultAccount); - - var MyContract = web3.eth.contract(contractABI); - - contract = MyContract.at(app.contractAddress); - - if (cb) { - cb(null, contract); - } + if (cb) cb({code: 200, title: "Error", message: "check RPC"}, null); + return; } + + console.log(web3.eth.accounts); + web3.eth.defaultAccount = web3.eth.accounts[0]; + console.log("web3.eth.defaultAccount:"); + console.log(web3.eth.defaultAccount); + + var MyContract = web3.eth.contract(contractABI); + contract = MyContract.at(app.contractAddress); + + if (cb) cb(null, contract); } function newPhoneToAddr(wallet, phone, cb) { if(!web3.isConnected()) { - cb({code: 500, title: "Error", message: "check RPC"}, null); - } else { - contract.newPhoneToAddr.sendTransaction(wallet, phone, {gas: 100000, from: web3.eth.defaultAccount}, function(err, result) { - cb(err, result); - }); + if (cb) cb({code: 500, title: "Error", message: "check RPC"}, null); + return; } + + contract.newPhoneToAddr.sendTransaction(wallet, phone, {gas: 100000, from: web3.eth.defaultAccount}, function(err, result) { + cb(err, result); + }); } app.post('/newPhoneToAddr', function(request, response) { var globalToken = request.body.globalToken; - if (globalToken == app.config.globalToken) { - var phone = parseInt(request.body.phone); - var wallet = request.body.wallet; - var code = request.body.code; - console.log(wallet); - console.log(request.body.wallet); - var isHex = /^0x[0-9A-Fa-f]{40}$/i.test(wallet); - if (isHex) { - contract.getPaymentByAddress.call(wallet, function(err, val) { - console.log("err:"); - console.log(err); - console.log("val:"); - console.log(val); - if (val > 0) { - contract.getPaymentDataByAddress.call(wallet, function(err, paymentData) { - console.log("err:"); - console.log(err); - console.log("paymentData:"); - console.log(paymentData); - - var hash = app.crypto.createHmac('sha256', app.config.salt) - .update(code) - .digest('hex'); - - console.log("hash:"); - console.log(hash); - - //var hashBuf = new Buffer(hash, 'binary').toString('hex'); - //console.log("hashBuf:"); - //console.log(hashBuf.toString()); - - console.log(paymentData.substring(2) + " == " + hash); - if (paymentData.substring(2) == hash) { - newPhoneToAddr(wallet, phone, function(err, result) { - console.log(err); - console.log(result); - response.send({ - success : { - code : 200, - title : "Success", - message : "Phone successfully joined" - } - }); - }); - } else { - response.send({ - error : { - code : 1000, - title : "Warning", - message : "Sent message doesn't match with the one displayed on the page" - } - }); - } - }); - } else { - response.send({ - error : { - code : 1000, - title : "Warning", - message : "Payment wasn't sent yet" - } - }); - } - }); - } else { - response.send({ - error : { - code : 500, - title : "Error", - message : "Not valid address" - } - }); - } - } else { - response.send({ - error : { - code : 401, - title : "Unauthorized", - message : "Wrong app token" - } - }); + if (globalToken != app.config.globalToken) { + generateError(response, 401, "Unauthorized", "Wrong app token"); + return; } - }); - app.post('/getPhoneByAddress', function(request, response) { - var globalToken = request.body.globalToken; - if (globalToken == app.config.globalToken) { - var wallet = request.body.wallet; - var isHex = /^0x[0-9A-Fa-f]{40}$/i.test(wallet) - if (isHex) { + var phone = parseInt(request.body.phone); + var wallet = request.body.wallet; + var code = request.body.code; + console.log(wallet); + console.log(request.body.wallet); + var isHex = /^0x[0-9A-Fa-f]{40}$/i.test(wallet); - var phone = contract.getPhoneByAddress.call(wallet, function(err, obj) { - console.log("err:"); + if (!isHex) { + generateError(response, 500, "Error", "Not valid address"); + return; + } + + if (!contract) { + generateError(response, 500, "Error", "RPC doesn't work"); + return; + } + + contract.getPaymentByAddress.call(wallet, function(err, val) { + console.log("err:"); + console.log(err); + console.log("val:"); + console.log(val); + + if (val <= 0) { + generateError(response, 1000, "Warning", "Payment wasn't sent yet"); + return; + } + + contract.getPaymentDataByAddress.call(wallet, function(err, paymentData) { + console.log("err:"); + console.log(err); + console.log("paymentData:"); + console.log(paymentData); + + + var hash = app.crypto.createHmac('sha256', app.config.salt) + .update(code) + .digest('hex'); + + console.log("hash:"); + console.log(hash); + + //var hashBuf = new Buffer(hash, 'binary').toString('hex'); + //console.log("hashBuf:"); + //console.log(hashBuf.toString()); + + console.log(paymentData.substring(2) + " == " + hash); + if (paymentData.substring(2) != hash) { + generateError(response, 1000, "Warning", "Sent message doesn't match with the one displayed on the page"); + return; + } + + newPhoneToAddr(wallet, phone, function(err, result) { console.log(err); - console.log("obj:"); - console.log(obj); + console.log(result); response.send({ success : { code : 200, title : "Success", - message : "Phone successfully joined", - phone: obj + message : "Phone successfully joined" } }); }); - } else { - response.send({ - error : { - code : 500, - title : "Error", - message : "Not valid address" - } - }); - } - } else { + }); + }); + }); + + app.post('/getPhoneByAddress', function(request, response) { + var globalToken = request.body.globalToken; + if (globalToken != app.config.globalToken) { + generateError(response, 401, "Unauthorized", "Wrong app token"); + return; + } + + var wallet = request.body.wallet; + var isHex = /^0x[0-9A-Fa-f]{40}$/i.test(wallet); + if (!isHex) { + generateError(response, 500, "Error", "Not valid address"); + return; + } + + if (!contract) { + generateError(response, 500, "Error", "RPC doesn't work"); + return; + } + + var phone = contract.getPhoneByAddress.call(wallet, function(err, obj) { + console.log("err:"); + console.log(err); + console.log("obj:"); + console.log(obj); response.send({ - error : { - code : 401, - title : "Unauthorized", - message : "Wrong app token" + success : { + code : 200, + title : "Success", + message : "Phone successfully joined", + phone: obj } }); - } + }); }); app.post('/getAddressByPhone', function(request, response) { var globalToken = request.body.globalToken; - if (globalToken == app.config.globalToken) { + if (globalToken != app.config.globalToken) { + generateError(response, 401, "Unauthorized", "Wrong app token"); + return; + } + + if (!contract) { + generateError(response, 500, "Error", "RPC doesn't work"); + return; + } - var phone = parseInt(request.body.phone); - var address = contract.phones.call(phone, function(err, address) { - console.log(address); - response.send({ - success : { - code : 200, - title : "Success", - message : "Phone successfully joined", - addr: address - } - }); - }); - } else { + var phone = parseInt(request.body.phone); + var address = contract.phones.call(phone, function(err, address) { + console.log(address); response.send({ - error : { - code : 401, - title : "Unauthorized", - message : "Wrong app token" + success : { + code : 200, + title : "Success", + message : "Phone successfully joined", + addr: address } }); - } + }); }); }; \ No newline at end of file diff --git a/web/public/css/index.css b/web/public/css/index.css index 17af42b..647a38f 100644 --- a/web/public/css/index.css +++ b/web/public/css/index.css @@ -85,7 +85,7 @@ line-height: 17px; width: 100%; } -.inputContainer { +div.inputContainer { margin-bottom: 5px; width: 540px; } @@ -93,7 +93,7 @@ margin-bottom: 10px; width: 400; } -.POPInput { +input.POPInput { font-family: 'Open Sans', sans-serif; height: 56px; width: 400px; @@ -103,7 +103,7 @@ padding-left: 50px; margin-right: 20px; } -.POPInput:focus { +input.POPInput:focus { outline: none; /*outline-color: rgb(87,196,223); outline-width: 2px;*/ @@ -111,22 +111,22 @@ padding-left: 48px; border: 2px solid rgb(87,196,223) !important; } -.POPInput.POPInputPhone { +input.POPInput.POPInputPhone { background: white url("/img/inputPhone.png") no-repeat left 15px center; } -.POPInput.POPInputSMS { +input.POPInput.POPInputSMS { background: white url("/img/inputSMS.png") no-repeat left 15px center; } -.POPInput.POPInputWallet { +input.POPInput.POPInputWallet { background: white url("/img/inputWallet.png") no-repeat left 15px center; } -.POPInput.POPInputPhone:focus { +input.POPInput.POPInputPhone:focus { background: white url("/img/inputPhone.png") no-repeat left 13px center; } -.POPInput.POPInputSMS:focus { +input.POPInput.POPInputSMS:focus { background: white url("/img/inputSMS.png") no-repeat left 13px center; } -.POPInput.POPInputWallet:focus { +input.POPInput.POPInputWallet:focus { background: white url("/img/inputWallet.png") no-repeat left 13px center; } .POPTitle2 { @@ -220,14 +220,14 @@ #step3CopyTable { display: inline-block; } -.copyTable { +table.copyTable { border: none; font-size: 14px; font-weight: 600; margin-top: 20px; margin-bottom: 20px; } -.copyTable.nomargin { +table.copyTable.nomargin { margin-top: 0px; margin-bottom: 0px; } @@ -257,7 +257,7 @@ transition: .2s ease-out; background: rgb(115, 196, 217) url("/img/copy.png") no-repeat center center !important; } -.copyTableCellWalletValue1 { +td.copyTableCellWalletValue1 { background: rgb(156,224,236); color: rgb(48,142,162); /*padding: 15px;*/ diff --git a/web/public/libs/loader/stylesheets/loader.css b/web/public/css/loader.css similarity index 98% rename from web/public/libs/loader/stylesheets/loader.css rename to web/public/css/loader.css index ff94775..cc2a327 100644 --- a/web/public/libs/loader/stylesheets/loader.css +++ b/web/public/css/loader.css @@ -65,7 +65,7 @@ body { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; position: absolute; - background-image: url(../images/loader.png); + background-image: url(../img/loader.png); } .loader-i_left-bottom { -moz-animation: loader 12s linear 4s infinite forwards; diff --git a/web/public/libs/materialize/css/materialize.css b/web/public/css/materialize.css similarity index 100% rename from web/public/libs/materialize/css/materialize.css rename to web/public/css/materialize.css diff --git a/web/public/libs/materialize/css/materialize.min.css b/web/public/css/materialize.min.css similarity index 100% rename from web/public/libs/materialize/css/materialize.min.css rename to web/public/css/materialize.min.css diff --git a/web/public/libs/sweetalert/dist/sweetalert.css b/web/public/css/sweetalert.css similarity index 100% rename from web/public/libs/sweetalert/dist/sweetalert.css rename to web/public/css/sweetalert.css diff --git a/web/public/gulpfile.js b/web/public/gulpfile.js new file mode 100755 index 0000000..c92f3eb --- /dev/null +++ b/web/public/gulpfile.js @@ -0,0 +1,29 @@ +'use strict'; + +const gulp = require('gulp'); +const sass = require('gulp-sass'); +const sassGlob = require('gulp-sass-glob'); +const autoprefixer = require('gulp-autoprefixer'); +const uglifycss = require('gulp-uglifycss'); +const include = require('gulp-include'); +const addsrc = require('gulp-add-src'); +const order = require('gulp-order'); +const concat = require('gulp-concat'); +const uglify = require('gulp-uglify'); + +gulp.task('javascript', function() { + return gulp.src('javascripts/application/*.js') + .pipe(addsrc('javascripts/vendor/index.js')) + .pipe(order([ + "javascripts/vendor/index.js", + "javascripts/application/*.js" + ], {base: '.'})) + .pipe(include()) + .pipe(concat('application.js')) + .pipe(uglify()) + .pipe(gulp.dest('javascripts')); +}); + +gulp.task('watch', function() { + gulp.watch('javascripts/application/*.js', ['javascript']); +}); diff --git a/web/public/libs/loader/images/loader.png b/web/public/img/loader.png similarity index 100% rename from web/public/libs/loader/images/loader.png rename to web/public/img/loader.png diff --git a/web/public/javascripts/application.js b/web/public/javascripts/application.js new file mode 100644 index 0000000..f94ba70 --- /dev/null +++ b/web/public/javascripts/application.js @@ -0,0 +1,9 @@ +function addPhoneToWallet(e,t,n,i,r){$.post("/newPhoneToAddr",{globalToken:"cba2c691-47df-41e7-bc97-a0818103ed14",phone:e,wallet:t,code:n},function(e){r(),e.success?i(1,null):1e3==e.error.code?swal({title:"Warning",text:e.error.message,type:"warning"}):swal({title:"Error",text:e.error.message,type:"error"})})}function getAddressByPhone(e,t,n){$.post("/getAddressByPhone",{globalToken:"cba2c691-47df-41e7-bc97-a0818103ed14",phone:e},function(e){n(),e.success?"0x0000000000000000000000000000000000000000"!=e.success.addr?(POPInputWallet.val(e.success.addr),t(null,4)):swal({title:"Warning",text:"This phone wasn't set for any wallet yet",type:"warning"}):swal({title:"Error",text:e.error.message,type:"error"})})}function getPhoneByAddress(e,t,n){$.post("/getPhoneByAddress",{globalToken:"cba2c691-47df-41e7-bc97-a0818103ed14",wallet:e},function(e){n(),e.success?0!=e.success.phone?(POPInputPhone.val(e.success.phone),t(null,4)):swal({title:"Warning",text:"Phone wasn't set for this wallet yet",type:"warning"}):swal({title:"Error",text:e.error.message,type:"error"})})}function sendCodeBySMS(e,t,n){$.post("/sendCodeBySMS",{globalToken:"cba2c691-47df-41e7-bc97-a0818103ed14",to:e},function(e){console.log(e),e.success?(t(1,null),token.val(e.success.code),swal({title:"Success",text:"Code successfully sent by SMS",type:"success"})):swal({title:"Error",text:e.error.message,type:"error"})})}function verifyCodeFromSMS(e,t,n,i){$.post("/verifyCodeFromSMS",{globalToken:"cba2c691-47df-41e7-bc97-a0818103ed14",code:e,phone:t},function(e){i(),console.log(e),e.success?(hashToAddress=e.success.message,console.log(hashToAddress),n(1,null),token.val(e.success.code),swal({title:"Success",text:"Code successfully verified",type:"success"})):swal({title:"Error",text:e.error.message,type:"error"})})}if(function(e,t){"use strict";var n,i,r,o=e,a=o.document,s=o.navigator,l=o.setTimeout,c=o.clearTimeout,u=o.setInterval,d=o.clearInterval,f=o.getComputedStyle,p=o.encodeURIComponent,h=o.ActiveXObject,v=o.Error,m=o.Number.parseInt||o.parseInt,g=o.Number.parseFloat||o.parseFloat,y=o.Number.isNaN||o.isNaN,b=o.Date.now,w=o.Object.keys,x=o.Object.defineProperty,C=o.Object.prototype.hasOwnProperty,T=o.Array.prototype.slice,k=function(){var e=function(e){return e};if("function"==typeof o.wrap&&"function"==typeof o.unwrap)try{var t=a.createElement("div"),n=o.unwrap(t);1===t.nodeType&&n&&1===n.nodeType&&(e=o.unwrap)}catch(e){}return e}(),S=function(e){return T.call(e,0)},E=function(){var e,t,n,i,r,o=S(arguments),a=o[0]||{};for(e=1,t=o.length;e=0&&(W=l(function(){"boolean"!=typeof $.deactivated&&($.deactivated=!0),!0===$.deactivated&&Re.emit({type:"error",name:"flash-deactivated"})},t)),$.overdue=!1,Se()}},re=function(){Re.clearData(),Re.blur(),Re.emit("destroy"),Ee(),Re.off()},oe=function(e,t){var n;if("object"==typeof e&&e&&void 0===t)n=e,Re.clearData();else{if("string"!=typeof e||!e)return;n={},n[e]=t}for(var i in n)"string"==typeof i&&i&&C.call(n,i)&&"string"==typeof n[i]&&n[i]&&(H[i]=n[i])},ae=function(e){void 0===e?(N(H),z=null):"string"==typeof e&&C.call(H,e)&&delete H[e]},se=function(e){return void 0===e?P(H):"string"==typeof e&&C.call(H,e)?H[e]:void 0},le=function(e){if(e&&1===e.nodeType){i&&(Ie(i,U.activeClass),i!==e&&Ie(i,U.hoverClass)),i=e,_e(e,U.hoverClass);var t=e.getAttribute("title")||U.title;if("string"==typeof t&&t){var n=ke($.bridge);n&&n.setAttribute("title",t)}var r=!0===U.forceHandCursor||"pointer"===qe(e,"cursor");ze(r),He()}},ce=function(){var e=ke($.bridge);e&&(e.removeAttribute("title"),e.style.left="0px",e.style.top="-9999px",e.style.width="1px",e.style.height="1px"),i&&(Ie(i,U.hoverClass),Ie(i,U.activeClass),i=null)},ue=function(){return i||null},de=function(e){return"string"==typeof e&&e&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(e)},fe=function(e){var t;if("string"==typeof e&&e?(t=e,e={}):"object"==typeof e&&e&&"string"==typeof e.type&&e.type&&(t=e.type),t){t=t.toLowerCase(),!e.target&&(/^(copy|aftercopy|_click)$/.test(t)||"error"===t&&"clipboard-error"===e.name)&&(e.target=r),E(e,{type:t,target:e.target||i||null,relatedTarget:e.relatedTarget||null,currentTarget:$&&$.bridge||null,timeStamp:e.timeStamp||b()||null});var n=V[e.type];return"error"===e.type&&e.name&&n&&(n=n[e.name]),n&&(e.message=n),"ready"===e.type&&E(e,{target:null,version:$.version}),"error"===e.type&&(Q.test(e.name)&&E(e,{target:null,minimumVersion:"11.0.0"}),Y.test(e.name)&&E(e,{version:$.version})),"copy"===e.type&&(e.clipboardData={setData:Re.setData,clearData:Re.clearData}),"aftercopy"===e.type&&(e=Oe(e,z)),e.target&&!e.relatedTarget&&(e.relatedTarget=pe(e.target)),he(e)}},pe=function(e){var t=e&&e.getAttribute&&e.getAttribute("data-clipboard-target");return t?a.getElementById(t):null},he=function(e){if(e&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(e.type)){var t=e.target,n="_mouseover"===e.type&&e.relatedTarget?e.relatedTarget:void 0,i="_mouseout"===e.type&&e.relatedTarget?e.relatedTarget:void 0,r=Le(t),s=o.screenLeft||o.screenX||0,l=o.screenTop||o.screenY||0,c=a.body.scrollLeft+a.documentElement.scrollLeft,u=a.body.scrollTop+a.documentElement.scrollTop,d=r.left+("number"==typeof e._stageX?e._stageX:0),f=r.top+("number"==typeof e._stageY?e._stageY:0),p=d-c,h=f-u,v=s+p,m=l+h,g="number"==typeof e.movementX?e.movementX:0,y="number"==typeof e.movementY?e.movementY:0;delete e._stageX,delete e._stageY,E(e,{srcElement:t,fromElement:n,toElement:i,screenX:v,screenY:m,pageX:d,pageY:f,clientX:p,clientY:h,x:p,y:h,movementX:g,movementY:y,offsetX:0,offsetY:0,layerX:0,layerY:0})}return e},ve=function(e){return!/^(?:(?:before)?copy|destroy)$/.test(e&&"string"==typeof e.type&&e.type||"")},me=function(e,t,n,i){i?l(function(){e.apply(t,n)},0):e.apply(t,n)},ge=function(e){if("object"==typeof e&&e&&e.type){var t=ve(e),n=F["*"]||[],i=F[e.type]||[],r=n.concat(i);if(r&&r.length){var a,s,l,c,u,d=this;for(a=0,s=r.length;a0){var t=P(e);E(t,{type:"error",name:"clipboard-error"}),delete t.success,l(function(){Re.emit(t)},0)}},xe=function(e){if(e&&"string"==typeof e.type&&e){var t,n=e.target||null,i=n&&n.ownerDocument||a,r={view:i.defaultView||o,canBubble:!0,cancelable:!0,detail:"click"===e.type?1:0,button:"number"==typeof e.which?e.which-1:"number"==typeof e.button?e.button:i.createEvent?0:1},s=E(r,e);n&&i.createEvent&&n.dispatchEvent&&(s=[s.type,s.canBubble,s.cancelable,s.view,s.detail,s.screenX,s.screenY,s.clientX,s.clientY,s.ctrlKey,s.altKey,s.shiftKey,s.metaKey,s.button,s.relatedTarget],t=i.createEvent("MouseEvents"),t.initMouseEvent&&(t.initMouseEvent.apply(t,s),t._source="js",n.dispatchEvent(t)))}},Ce=function(){var e=U.flashLoadTimeout;if("number"==typeof e&&e>=0){var t=Math.min(1e3,e/10),n=U.swfObjectId+"_fallbackContent";B=u(function(){var e=a.getElementById(n);$e(e)&&(Fe(),$.deactivated=null,Re.emit({type:"error",name:"swf-not-found"}))},t)}},Te=function(){var e=a.createElement("div");return e.id=U.containerId,e.className=U.containerClass,e.style.position="absolute",e.style.left="0px",e.style.top="-9999px",e.style.width="1px",e.style.height="1px",e.style.zIndex=""+We(U.zIndex),e},ke=function(e){for(var t=e&&e.parentNode;t&&"OBJECT"===t.nodeName&&t.parentNode;)t=t.parentNode;return t||null},Se=function(){var e,t=$.bridge,n=ke(t);if(!t){var i=je(o.location.host,U),r="never"===i?"none":"all",s=Ne(E({jsVersion:Re.version},U)),l=U.swfPath+Ae(U.swfPath,U);n=Te();var c=a.createElement("div");n.appendChild(c),a.body.appendChild(n);var u=a.createElement("div"),d="activex"===$.pluginType;u.innerHTML='"+(d?'':"")+'
 
',t=u.firstChild,u=null,k(t).ZeroClipboard=Re,n.replaceChild(t,c),Ce()}return t||(t=a[U.swfObjectId],t&&(e=t.length)&&(t=t[e-1]),!t&&n&&(t=n.firstChild)),$.bridge=t||null,t},Ee=function(){var e=$.bridge;if(e){var t=ke(e);t&&("activex"===$.pluginType&&"readyState"in e?(e.style.display="none",function n(){if(4===e.readyState){for(var i in e)"function"==typeof e[i]&&(e[i]=null);e.parentNode&&e.parentNode.removeChild(e),t.parentNode&&t.parentNode.removeChild(t)}else l(n,10)}()):(e.parentNode&&e.parentNode.removeChild(e),t.parentNode&&t.parentNode.removeChild(t))),Fe(),$.ready=null,$.bridge=null,$.deactivated=null,n=void 0}},Pe=function(e){var t={},n={};if("object"==typeof e&&e){for(var i in e)if(i&&C.call(e,i)&&"string"==typeof e[i]&&e[i])switch(i.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":t.text=e[i],n.text=i;break;case"text/html":case"html":case"air:html":case"flash:html":t.html=e[i],n.html=i;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":t.rtf=e[i],n.rtf=i}return{data:t,formatMap:n}}},Oe=function(e,t){if("object"!=typeof e||!e||"object"!=typeof t||!t)return e;var n={};for(var i in e)if(C.call(e,i))if("errors"===i){n[i]=e[i]?e[i].slice():[];for(var r=0,o=n[i].length;r0){if(1===o&&"*"===r[0])return"always";if(-1!==r.indexOf(t))return 1===o&&t===i?"sameDomain":"always"}return"never"}}(),Me=function(){try{return a.activeElement}catch(e){return null}},_e=function(e,t){var n,i,r,o=[];if("string"==typeof t&&t&&(o=t.split(/\s+/)),e&&1===e.nodeType&&o.length>0)if(e.classList)for(n=0,i=o.length;n0)if(e.classList&&e.classList.length>0)for(n=0,i=o.length;n0,i=g(t.width)>0,r=g(t.top)>=0,o=g(t.left)>=0,a=n&&i&&r&&o,s=a?null:Le(e);return"none"!==t.display&&"collapse"!==t.visibility&&(a||!!s&&(n||s.height>0)&&(i||s.width>0)&&(r||s.top>=0)&&(o||s.left>=0))},Fe=function(){c(W),W=0,d(B),B=0},He=function(){var e;if(i&&(e=ke($.bridge))){var t=Le(i);E(e.style,{width:t.width+"px",height:t.height+"px",top:t.top+"px",left:t.left+"px",zIndex:""+We(U.zIndex)})}},ze=function(e){!0===$.ready&&($.bridge&&"function"==typeof $.bridge.setHandCursor?$.bridge.setHandCursor(e):$.ready=!1)},We=function(e){if(/^(?:auto|inherit)$/.test(e))return e;var t;return"number"!=typeof e||y(e)?"string"==typeof e&&(t=We(m(e,10))):t=e,"number"==typeof t?t:"auto"},Be=function(t){var n,i,r,o=$.sandboxed,a=null;if(t=!0===t,!1===L)a=!1;else{try{i=e.frameElement||null}catch(e){r={name:e.name,message:e.message}}if(i&&1===i.nodeType&&"IFRAME"===i.nodeName)try{a=i.hasAttribute("sandbox")}catch(e){a=null}else{try{n=document.domain||null}catch(e){n=null}(null===n||r&&"SecurityError"===r.name&&/(^|[\s\(\[@])sandbox(es|ed|ing|[\s\.,!\)\]@]|$)/.test(r.message.toLowerCase()))&&(a=!0)}}return $.sandboxed=a,o===a||t||Ve(h),a},Ve=function(e){function t(e){var t=e.match(/[\d]+/g);return t.length=3,t.join(".")}function n(e){return!!e&&(e=e.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(e)||"chrome.plugin"===e.slice(-13))}function i(e){e&&(l=!0,e.version&&(d=t(e.version)),!d&&e.description&&(d=t(e.description)),e.filename&&(u=n(e.filename)))}var r,o,a,l=!1,c=!1,u=!1,d="";if(s.plugins&&s.plugins.length)r=s.plugins["Shockwave Flash"],i(r),s.plugins["Shockwave Flash 2.0"]&&(l=!0,d="2.0.0.11");else if(s.mimeTypes&&s.mimeTypes.length)a=s.mimeTypes["application/x-shockwave-flash"],r=a&&a.enabledPlugin,i(r);else if(void 0!==e){c=!0;try{o=new e("ShockwaveFlash.ShockwaveFlash.7"),l=!0,d=t(o.GetVariable("$version"))}catch(n){try{o=new e("ShockwaveFlash.ShockwaveFlash.6"),l=!0,d="6.0.21"}catch(n){try{o=new e("ShockwaveFlash.ShockwaveFlash"),l=!0,d=t(o.GetVariable("$version"))}catch(e){c=!1}}}}$.disabled=!0!==l,$.outdated=d&&g(d)0,r=!e.target||i&&-1!==n.indexOf(e.target),o=e.relatedTarget&&i&&-1!==n.indexOf(e.relatedTarget),a=e.client&&e.client===this;return!(!t||!(r||o||a))},st=function(e){var t=Qe[this.id];if("object"==typeof e&&e&&e.type&&t){var n=ve(e),i=t&&t.handlers["*"]||[],r=t&&t.handlers[e.type]||[],a=i.concat(r);if(a&&a.length){var s,l,c,u,d,f=this;for(s=0,l=a.length;s0&&t-1 in e))}function i(e,t,n){if(re.isFunction(t))return re.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return re.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(fe.test(t))return re.filter(t,e,n);t=re.filter(t,e)}return re.grep(e,function(e){return re.inArray(e,t)>=0!==n})} +function r(e,t){do{e=e[t]}while(e&&1!==e.nodeType);return e}function o(e){var t=be[e]={};return re.each(e.match(ye)||[],function(e,n){t[n]=!0}),t}function a(){he.addEventListener?(he.removeEventListener("DOMContentLoaded",s,!1),e.removeEventListener("load",s,!1)):(he.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(he.addEventListener||"load"===event.type||"complete"===he.readyState)&&(a(),re.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(ke,"-$1").toLowerCase();if("string"==typeof(n=e.getAttribute(i))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Te.test(n)?re.parseJSON(n):n)}catch(e){}re.data(e,t,n)}else n=void 0}return n}function c(e){var t;for(t in e)if(("data"!==t||!re.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(e,t,n,i){if(re.acceptData(e)){var r,o,a=re.expando,s=e.nodeType,l=s?re.cache:e,c=s?e[a]:e[a]&&a;if(c&&l[c]&&(i||l[c].data)||void 0!==n||"string"!=typeof t)return c||(c=s?e[a]=Y.pop()||re.guid++:a),l[c]||(l[c]=s?{}:{toJSON:re.noop}),("object"==typeof t||"function"==typeof t)&&(i?l[c]=re.extend(l[c],t):l[c].data=re.extend(l[c].data,t)),o=l[c],i||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[re.camelCase(t)]=n),"string"==typeof t?null==(r=o[t])&&(r=o[re.camelCase(t)]):r=o,r}}function d(e,t,n){if(re.acceptData(e)){var i,r,o=e.nodeType,a=o?re.cache:e,s=o?e[re.expando]:re.expando;if(a[s]){if(t&&(i=n?a[s]:a[s].data)){re.isArray(t)?t=t.concat(re.map(t,re.camelCase)):t in i?t=[t]:(t=re.camelCase(t),t=t in i?[t]:t.split(" ")),r=t.length;for(;r--;)delete i[t[r]];if(n?!c(i):!re.isEmptyObject(i))return}(n||(delete a[s].data,c(a[s])))&&(o?re.cleanData([e],!0):ne.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}function f(){return!0}function p(){return!1}function h(){try{return he.activeElement}catch(e){}}function v(e){var t=Ie.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function m(e,t){var n,i,r=0,o=typeof e.getElementsByTagName!==Ce?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==Ce?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(i=n[r]);r++)!t||re.nodeName(i,t)?o.push(i):re.merge(o,m(i,t));return void 0===t||t&&re.nodeName(e,t)?re.merge([e],o):o}function g(e){Ae.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return re.nodeName(e,"table")&&re.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==re.find.attr(e,"type"))+"/"+e.type,e}function w(e){var t=Xe.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function x(e,t){for(var n,i=0;null!=(n=e[i]);i++)re._data(n,"globalEval",!t||re._data(t[i],"globalEval"))}function C(e,t){if(1===t.nodeType&&re.hasData(e)){var n,i,r,o=re._data(e),a=re._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(i=0,r=s[n].length;r>i;i++)re.event.add(t,n,s[n][i])}a.data&&(a.data=re.extend({},a.data))}}function T(e,t){var n,i,r;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!ne.noCloneEvent&&t[re.expando]){r=re._data(t);for(i in r.events)re.removeEvent(t,i,r.handle);t.removeAttribute(re.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,w(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),ne.html5Clone&&e.innerHTML&&!re.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ae.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function k(t,n){var i,r=re(n.createElement(t)).appendTo(n.body),o=e.getDefaultComputedStyle&&(i=e.getDefaultComputedStyle(r[0]))?i.display:re.css(r[0],"display");return r.detach(),o}function S(e){var t=he,n=Je[e];return n||(n=k(e,t),"none"!==n&&n||(Ge=(Ge||re("