From 207b1e91ca0622f6769da6f576ed0dcd81c22a8b Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 27 Jun 2017 21:53:59 -0600 Subject: [PATCH] Added regsiter page and styles (#8836) * Added regsiter page and styles * Added style updates * Added login server connection and logout * Added login * Added social auth * Moved image assests * Added trasnlations * Added social icons * Removed duplicate * Updated shrinkwrap --- npm-shrinkwrap.json | 701 +----------------- package.json | 1 + website/client/app.vue | 50 +- .../auth/midground_foreground_extended.png | Bin 0 -> 8800 bytes .../auth/midground_foreground_extended2.png | Bin 0 -> 13270 bytes .../images/auth/repeatinghill_leftslope.png | Bin 0 -> 894 bytes .../images/auth/repeatinghill_rightslope.png | Bin 0 -> 882 bytes .../images/auth/seamless_mountains_demo.png | Bin 0 -> 7263 bytes .../auth/seamless_stars_varied_opacity.png | Bin 0 -> 6501 bytes website/client/assets/svg/google.svg | 8 + website/client/assets/svg/gryphon.svg | 3 + website/client/assets/svg/habitica-logo.svg | 7 + website/client/components/appMenu.vue | 250 ++++--- .../client/components/auth/registerLogin.vue | 230 ++++++ website/client/components/static/home.vue | 30 + website/client/main.js | 29 +- website/client/router.js | 6 + website/client/store/actions/auth.js | 83 +++ website/client/store/actions/index.js | 2 + website/common/locales/en/newClient.json | 9 + 20 files changed, 562 insertions(+), 847 deletions(-) create mode 100644 website/client/assets/images/auth/midground_foreground_extended.png create mode 100644 website/client/assets/images/auth/midground_foreground_extended2.png create mode 100644 website/client/assets/images/auth/repeatinghill_leftslope.png create mode 100644 website/client/assets/images/auth/repeatinghill_rightslope.png create mode 100644 website/client/assets/images/auth/seamless_mountains_demo.png create mode 100644 website/client/assets/images/auth/seamless_stars_varied_opacity.png create mode 100644 website/client/assets/svg/google.svg create mode 100644 website/client/assets/svg/gryphon.svg create mode 100644 website/client/assets/svg/habitica-logo.svg create mode 100644 website/client/components/auth/registerLogin.vue create mode 100644 website/client/components/static/home.vue create mode 100644 website/client/store/actions/auth.js diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 80ee8e0ec8..ae9c9709f5 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -4208,700 +4208,6 @@ "from": "fs.realpath@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" }, - "fsevents": { - "version": "1.1.1", - "from": "fsevents@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz", - "optional": true, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "from": "abbrev@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "from": "ansi-regex@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - }, - "ansi-styles": { - "version": "2.2.1", - "from": "ansi-styles@>=2.2.1 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "optional": true - }, - "aproba": { - "version": "1.1.1", - "from": "aproba@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.2", - "from": "are-we-there-yet@>=1.1.2 <1.2.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", - "optional": true - }, - "asn1": { - "version": "0.2.3", - "from": "asn1@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "from": "assert-plus@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "from": "asynckit@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "from": "aws-sign2@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "optional": true - }, - "aws4": { - "version": "1.6.0", - "from": "aws4@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "from": "balanced-match@>=0.4.1 <0.5.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "from": "bcrypt-pbkdf@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "optional": true - }, - "block-stream": { - "version": "0.0.9", - "from": "block-stream@*", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz" - }, - "boom": { - "version": "2.10.1", - "from": "boom@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" - }, - "brace-expansion": { - "version": "1.1.6", - "from": "brace-expansion@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" - }, - "buffer-shims": { - "version": "1.0.0", - "from": "buffer-shims@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz" - }, - "caseless": { - "version": "0.11.0", - "from": "caseless@>=0.11.0 <0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "optional": true - }, - "chalk": { - "version": "1.1.3", - "from": "chalk@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "from": "code-point-at@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" - }, - "combined-stream": { - "version": "1.0.5", - "from": "combined-stream@>=1.0.5 <1.1.0", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz" - }, - "commander": { - "version": "2.9.0", - "from": "commander@>=2.9.0 <3.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - }, - "console-control-strings": { - "version": "1.1.0", - "from": "console-control-strings@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - }, - "core-util-is": { - "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - }, - "cryptiles": { - "version": "2.0.5", - "from": "cryptiles@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "optional": true - }, - "dashdash": { - "version": "1.14.1", - "from": "dashdash@>=1.12.0 <2.0.0", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "optional": true - } - } - }, - "debug": { - "version": "2.2.0", - "from": "debug@>=2.2.0 <2.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "optional": true - }, - "deep-extend": { - "version": "0.4.1", - "from": "deep-extend@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz", - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "from": "delayed-stream@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - }, - "delegates": { - "version": "1.0.0", - "from": "delegates@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "from": "ecc-jsbn@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "optional": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "from": "escape-string-regexp@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "optional": true - }, - "extend": { - "version": "3.0.0", - "from": "extend@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "from": "extsprintf@1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" - }, - "forever-agent": { - "version": "0.6.1", - "from": "forever-agent@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "optional": true - }, - "form-data": { - "version": "2.1.2", - "from": "form-data@>=2.1.1 <2.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", - "optional": true - }, - "fs.realpath": { - "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - }, - "fstream": { - "version": "1.0.10", - "from": "fstream@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz" - }, - "fstream-ignore": { - "version": "1.0.5", - "from": "fstream-ignore@>=1.0.5 <1.1.0", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "optional": true - }, - "gauge": { - "version": "2.7.3", - "from": "gauge@>=2.7.1 <2.8.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.3.tgz", - "optional": true - }, - "generate-function": { - "version": "2.0.0", - "from": "generate-function@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "optional": true - }, - "generate-object-property": { - "version": "1.2.0", - "from": "generate-object-property@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "optional": true - }, - "getpass": { - "version": "0.1.6", - "from": "getpass@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "optional": true - } - } - }, - "glob": { - "version": "7.1.1", - "from": "glob@>=7.0.5 <8.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" - }, - "graceful-fs": { - "version": "4.1.11", - "from": "graceful-fs@>=4.1.2 <5.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" - }, - "graceful-readlink": { - "version": "1.0.1", - "from": "graceful-readlink@>=1.0.0", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "optional": true - }, - "har-validator": { - "version": "2.0.6", - "from": "har-validator@>=2.0.6 <2.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "optional": true - }, - "has-ansi": { - "version": "2.0.0", - "from": "has-ansi@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "optional": true - }, - "has-unicode": { - "version": "2.0.1", - "from": "has-unicode@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "optional": true - }, - "hawk": { - "version": "3.1.3", - "from": "hawk@>=3.1.3 <3.2.0", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "optional": true - }, - "hoek": { - "version": "2.16.3", - "from": "hoek@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" - }, - "http-signature": { - "version": "1.1.1", - "from": "http-signature@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "optional": true - }, - "inflight": { - "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - }, - "inherits": { - "version": "2.0.3", - "from": "inherits@>=2.0.1 <2.1.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - }, - "ini": { - "version": "1.3.4", - "from": "ini@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "from": "is-fullwidth-code-point@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" - }, - "is-my-json-valid": { - "version": "2.15.0", - "from": "is-my-json-valid@>=2.12.4 <3.0.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", - "optional": true - }, - "is-property": { - "version": "1.0.2", - "from": "is-property@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "optional": true - }, - "is-typedarray": { - "version": "1.0.0", - "from": "is-typedarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "optional": true - }, - "isarray": { - "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - }, - "isstream": { - "version": "0.1.2", - "from": "isstream@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "from": "jodid25519@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "optional": true - }, - "jsbn": { - "version": "0.1.1", - "from": "jsbn@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "from": "json-schema@0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "optional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "from": "json-stringify-safe@>=5.0.1 <5.1.0", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "optional": true - }, - "jsonpointer": { - "version": "4.0.1", - "from": "jsonpointer@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "optional": true - }, - "jsprim": { - "version": "1.3.1", - "from": "jsprim@>=1.2.2 <2.0.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "optional": true - }, - "mime-db": { - "version": "1.26.0", - "from": "mime-db@>=1.26.0 <1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz" - }, - "mime-types": { - "version": "2.1.14", - "from": "mime-types@>=2.1.7 <2.2.0", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz" - }, - "minimatch": { - "version": "3.0.3", - "from": "minimatch@>=3.0.2 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz" - }, - "minimist": { - "version": "0.0.8", - "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" - }, - "mkdirp": { - "version": "0.5.1", - "from": "mkdirp@>=0.5.1 <0.6.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" - }, - "ms": { - "version": "0.7.1", - "from": "ms@0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.33", - "from": "node-pre-gyp@>=0.6.29 <0.7.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz", - "optional": true - }, - "nopt": { - "version": "3.0.6", - "from": "nopt@>=3.0.6 <3.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "optional": true - }, - "npmlog": { - "version": "4.0.2", - "from": "npmlog@>=4.0.1 <5.0.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz", - "optional": true - }, - "number-is-nan": { - "version": "1.0.1", - "from": "number-is-nan@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - }, - "oauth-sign": { - "version": "0.8.2", - "from": "oauth-sign@>=0.8.1 <0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "from": "object-assign@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "optional": true - }, - "once": { - "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - }, - "path-is-absolute": { - "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - }, - "pinkie": { - "version": "2.0.4", - "from": "pinkie@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "optional": true - }, - "pinkie-promise": { - "version": "2.0.1", - "from": "pinkie-promise@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" - }, - "punycode": { - "version": "1.4.1", - "from": "punycode@>=1.4.1 <2.0.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "optional": true - }, - "qs": { - "version": "6.3.1", - "from": "qs@>=6.3.0 <6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.1.tgz", - "optional": true - }, - "rc": { - "version": "1.1.7", - "from": "rc@>=1.1.6 <1.2.0", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.7.tgz", - "optional": true, - "dependencies": { - "minimist": { - "version": "1.2.0", - "from": "minimist@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.2", - "from": "readable-stream@>=2.0.0 <3.0.0||>=1.1.13 <2.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "optional": true - }, - "request": { - "version": "2.79.0", - "from": "request@>=2.79.0 <3.0.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "optional": true - }, - "rimraf": { - "version": "2.5.4", - "from": "rimraf@>=2.5.4 <2.6.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" - }, - "semver": { - "version": "5.3.0", - "from": "semver@>=5.3.0 <5.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "from": "set-blocking@>=2.0.0 <2.1.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "from": "signal-exit@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "optional": true - }, - "sntp": { - "version": "1.0.9", - "from": "sntp@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "optional": true - }, - "sshpk": { - "version": "1.10.2", - "from": "sshpk@>=1.7.0 <2.0.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.2.tgz", - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "optional": true - } - } - }, - "string_decoder": { - "version": "0.10.31", - "from": "string_decoder@>=0.10.0 <0.11.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - }, - "string-width": { - "version": "1.0.2", - "from": "string-width@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - }, - "stringstream": { - "version": "0.0.5", - "from": "stringstream@>=0.0.4 <0.1.0", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "from": "strip-ansi@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - }, - "strip-json-comments": { - "version": "2.0.1", - "from": "strip-json-comments@>=2.0.1 <2.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "optional": true - }, - "supports-color": { - "version": "2.0.0", - "from": "supports-color@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "optional": true - }, - "tar": { - "version": "2.2.1", - "from": "tar@>=2.2.1 <2.3.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz" - }, - "tar-pack": { - "version": "3.3.0", - "from": "tar-pack@>=3.3.0 <3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.3.0.tgz", - "optional": true, - "dependencies": { - "once": { - "version": "1.3.3", - "from": "once@>=1.3.3 <1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "optional": true - }, - "readable-stream": { - "version": "2.1.5", - "from": "readable-stream@>=2.1.4 <2.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "optional": true - } - } - }, - "tough-cookie": { - "version": "2.3.2", - "from": "tough-cookie@>=2.3.0 <2.4.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "optional": true - }, - "tunnel-agent": { - "version": "0.4.3", - "from": "tunnel-agent@>=0.4.1 <0.5.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "optional": true - }, - "tweetnacl": { - "version": "0.14.5", - "from": "tweetnacl@>=0.14.0 <0.15.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "from": "uid-number@>=0.0.6 <0.1.0", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - }, - "uuid": { - "version": "3.0.1", - "from": "uuid@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "optional": true - }, - "verror": { - "version": "1.3.6", - "from": "verror@1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "optional": true - }, - "wide-align": { - "version": "1.1.0", - "from": "wide-align@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz", - "optional": true - }, - "wrappy": { - "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - }, - "xtend": { - "version": "4.0.1", - "from": "xtend@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "optional": true - } - } - }, "fstream": { "version": "1.0.11", "from": "fstream@>=1.0.2 <2.0.0", @@ -6128,6 +5434,11 @@ "from": "he@>=1.1.0 <1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz" }, + "hellojs": { + "version": "1.15.1", + "from": "hellojs@>=1.15.1 <2.0.0", + "resolved": "http://registry.npmjs.org/hellojs/-/hellojs-1.15.1.tgz" + }, "hmac-drbg": { "version": "1.0.1", "from": "hmac-drbg@>=1.0.0 <2.0.0", @@ -7717,7 +7028,7 @@ "lazy-debug-legacy": { "version": "0.0.1", "from": "lazy-debug-legacy@>=0.0.0 <0.1.0", - "resolved": "http://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz" }, "lazy-req": { "version": "1.1.0", diff --git a/package.json b/package.json index d717c13f75..12cbb1c8a0 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "gulp-uglify": "^1.4.2", "gulp.spritesmith": "^4.1.0", "habitica-markdown": "^1.3.0", + "hellojs": "^1.15.1", "html-webpack-plugin": "^2.8.1", "image-size": "~0.3.2", "in-app-purchase": "^1.1.6", diff --git a/website/client/app.vue b/website/client/app.vue index 7697892f88..6f05b18552 100644 --- a/website/client/app.vue +++ b/website/client/app.vue @@ -2,15 +2,18 @@ - \ No newline at end of file + diff --git a/website/client/assets/images/auth/midground_foreground_extended.png b/website/client/assets/images/auth/midground_foreground_extended.png new file mode 100644 index 0000000000000000000000000000000000000000..e030b8a61bb1b7740487527b8653fe2fc045a369 GIT binary patch literal 8800 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 G@BbgDmEjHm literal 0 HcmV?d00001 diff --git a/website/client/assets/images/auth/midground_foreground_extended2.png b/website/client/assets/images/auth/midground_foreground_extended2.png new file mode 100644 index 0000000000000000000000000000000000000000..5976cd96811bd0bed5f758c33741ef5babc99a57 GIT binary patch literal 13270 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 literal 0 HcmV?d00001 diff --git a/website/client/assets/images/auth/repeatinghill_leftslope.png b/website/client/assets/images/auth/repeatinghill_leftslope.png new file mode 100644 index 0000000000000000000000000000000000000000..952123e055fcec71fcb70d91fb174fe02e5a632f GIT binary patch literal 894 zcmV-^1A+XBP)^_( zmoGT5oKfKsWJh-gf5u4|N(7WxX2lKq2P6z70!qw_?sT+fOLrs;B?3y!NV`+1&xO`V z7)k_`m=VR`^hyx zTg{M!p+rc%CDv;7RJ10m%(TVH%}rKc90kdAe(W0UpF45P`aO^^ln5@Vym;I^v?bQ3 zkEhb^Y&9_#ird+3hwfQkzDL4<1Iuqqbge!YL#u18rKLL(h7uvOgLBq2s8XM);bLGZD#6zRgdgH_M9`%=A?xZIUpQ2u_vw@P0!m@k=8x zx;WU|9<{{lm#yENtU(nn^q6IBk}#AAE}5uRkBT2IdZYD6|9dJLRMFk&~a^SfMNOPeGNB|_?hvn{&6ev0)>eb&lgtI~2D zCF?L8npEtCJ94{P#7ha8C&0Bk}#AA92jt592g|RKcx9O UfHLfM3jhEB07*qoM6N<$f(k>NF8}}l literal 0 HcmV?d00001 diff --git a/website/client/assets/images/auth/repeatinghill_rightslope.png b/website/client/assets/images/auth/repeatinghill_rightslope.png new file mode 100644 index 0000000000000000000000000000000000000000..cf7bbecc12a5a73d74607adc15e90aeb8261ca14 GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^IY6Ar!3HGnuRc}>q}Y|gW!U_%O?XxI14-? ziy0WWg+Z8+Vb&Z8pdfpRr>`sfLsn)H6X}OPi`OwQF#Y#*aSW-r^>+68Y+*-{lcVmY?Zqb#3aWhw@OUZtXI@A zf3{`Hjmq7hH*G%oyjbego4hjl`~2^7FRj!B+KB`jY<%wT-~L(u{lVGg`u?9e+)s1L zF|soIs@mOq)iveD`|lUjIGMT3)_K+Zd@18=^ZK(xdim?ES5H)Lx8wwhId=-I5%N7c^G1pK-Svh`!eeKv z@TfWkc=bHCDE8m`^7-MJtEQCAaNQE=vi#O9l|&6ela*6TAKrKWxjUd&@$PiFt@Y16 z4+SW(SX=Ba>AB@HF~>tcJK_7))=36aI1ZL|F6;BLm8<)&YIXk8N>+XI?v6d&S0#?c?g|iU6Iyu5>&w!!6H2qB z?|DiD7)+7a;g`$xb*Wb_Sf|FuBYIoz?sJ&VA;P1|1PYMKD-|qHKRr9?xNG0GeNI5f zT~PhC==aO)XY<_lPTiUQEX6i&dy|6ahm;2$6;*sGzwGtTW1C)WU3Y(n z)}_ZwU+92hz;F7COLsH*x0$7-r(gQ|@#Fk6e?R`dyRg3e;sUqh8J|8J++0$d{a6jC zG$3z!#L;)>T$|M{PQB_Adh46V&!P?PhZ>qf!#mBs_68M7?O3sL_y1enLQAD=wqKH5 zV{QeCPYW*|-&)W2#}hWpjs8?u7wlf1S6;;b?AddZ^PV8hQJt=Q)An61J~*ANJLA;T xIFk}zV7P@ub?!6aQ0Zv`raCUSg9--!m`{C`(axS|^aGSkJzf1=);T3K0RScNin#y) literal 0 HcmV?d00001 diff --git a/website/client/assets/images/auth/seamless_mountains_demo.png b/website/client/assets/images/auth/seamless_mountains_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c2f4e9b7c79a5c01d05f5f8ea358ba7a43ac9a GIT binary patch literal 7263 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 J!b{GN{tsaOZU_JX literal 0 HcmV?d00001 diff --git a/website/client/assets/images/auth/seamless_stars_varied_opacity.png b/website/client/assets/images/auth/seamless_stars_varied_opacity.png new file mode 100644 index 0000000000000000000000000000000000000000..0abababa1b9bc126d924b71ee168e84f8f339712 GIT binary patch literal 6501 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 + + + + + + + diff --git a/website/client/assets/svg/gryphon.svg b/website/client/assets/svg/gryphon.svg new file mode 100644 index 0000000000..fdff439489 --- /dev/null +++ b/website/client/assets/svg/gryphon.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/client/assets/svg/habitica-logo.svg b/website/client/assets/svg/habitica-logo.svg new file mode 100644 index 0000000000..e23bdf1981 --- /dev/null +++ b/website/client/assets/svg/habitica-logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/website/client/components/appMenu.vue b/website/client/components/appMenu.vue index b48fbde378..8c2f92b2d5 100644 --- a/website/client/components/appMenu.vue +++ b/website/client/components/appMenu.vue @@ -48,147 +48,147 @@ nav.navbar.navbar-inverse.fixed-top.navbar-toggleable-sm router-link.dropdown-item(:to="{name: 'stats'}") {{ $t('stats') }} router-link.dropdown-item(:to="{name: 'achievements'}") {{ $t('achievements') }} router-link.dropdown-item(:to="{name: 'settings'}") {{ $t('settings') }} - router-link.dropdown-item(to="/logout") {{ $t('logout') }} + a.nav-link.dropdown-item(to="/", @click.prevent='logout()') {{ $t('logout') }} diff --git a/website/client/components/auth/registerLogin.vue b/website/client/components/auth/registerLogin.vue new file mode 100644 index 0000000000..7be5b3e007 --- /dev/null +++ b/website/client/components/auth/registerLogin.vue @@ -0,0 +1,230 @@ + + + + + diff --git a/website/client/components/static/home.vue b/website/client/components/static/home.vue new file mode 100644 index 0000000000..eef1253435 --- /dev/null +++ b/website/client/components/static/home.vue @@ -0,0 +1,30 @@ + + + + diff --git a/website/client/main.js b/website/client/main.js index dd8809fa1b..3e69523450 100644 --- a/website/client/main.js +++ b/website/client/main.js @@ -36,33 +36,8 @@ if (authSettings) { } export default new Vue({ + el: '#app', router, store: generateStore(), render: h => h(AppComponent), - beforeCreate () { - // Setup listener for title - this.$store.watch(state => state.title, (title) => { - document.title = title; - }); - - // Mount the app when user and tasks are loaded - const userDataWatcher = this.$store.watch(state => [state.user.data, state.tasks.data], ([user, tasks]) => { - if (user && user._id && tasks && Array.isArray(tasks.habits)) { - userDataWatcher(); // remove the watcher - this.$mount('#app'); - } - }); - - // Load the user and the user tasks - Promise.all([ - this.$store.dispatch('user:fetch'), - this.$store.dispatch('tasks:fetchUserTasks'), - ]).catch((err) => { - console.error('Impossible to fetch user. Copy into localStorage a valid habit-mobile-settings object.', err); // eslint-disable-line no-console - }); - }, - mounted () { // Remove the loading screen when the app is mounted - let loadingScreen = document.getElementById('loading-screen'); - if (loadingScreen) document.body.removeChild(loadingScreen); - }, -}); \ No newline at end of file +}); diff --git a/website/client/router.js b/website/client/router.js index 93f9a7364e..52e1d70a25 100644 --- a/website/client/router.js +++ b/website/client/router.js @@ -7,6 +7,9 @@ import EmptyView from './components/emptyView'; import ParentPage from './components/parentPage'; import Page from './components/page'; +// Static Pages +const Home = () => import(/* webpackChunkName: "static" */'./components/static/home'); +const RegisterLogin = () => import(/* webpackChunkName: "auth" */'./components/auth/registerLogin'); // All the main level // components are loaded in separate webpack chunks. @@ -45,6 +48,9 @@ export default new VueRouter({ return { x: 0, y: 0 }; }, routes: [ + { name: 'home', path: '/home', component: Home }, + { name: 'register', path: '/register', component: RegisterLogin }, + { name: 'login', path: '/login', component: RegisterLogin }, { name: 'tasks', path: '/', component: UserTasks }, { path: '/inventory', diff --git a/website/client/store/actions/auth.js b/website/client/store/actions/auth.js new file mode 100644 index 0000000000..31a05020de --- /dev/null +++ b/website/client/store/actions/auth.js @@ -0,0 +1,83 @@ +import axios from 'axios'; + +export async function register (store, params) { + let url = '/api/v3/user/auth/local/register'; + let result = await axios.post(url, { + username: params.username, + email: params.email, + password: params.password, + confirmPassword: params.passwordConfirm, + }); + + let user = result.data.data; + + let userLocalData = JSON.stringify({ + auth: { + apiId: user._id, + apiToken: user.apiToken, + }, + }); + localStorage.setItem('habit-mobile-settings', userLocalData); + + // @TODO: I think we just need analytics here + // Auth.runAuth(res.data._id, res.data.apiToken); + // Analytics.register(); + // $scope.registrationInProgress = false; + // Alert.authErrorAlert(data, status, headers, config) + // Analytics.login(); + // Analytics.updateUser(); + + store.state.user.data = user; +} + +export async function login (store, params) { + let url = '/api/v3/user/auth/local/login'; + let result = await axios.post(url, { + username: params.username, + // email: params.email, + password: params.password, + }); + + let user = result.data.data; + + let userLocalData = JSON.stringify({ + auth: { + apiId: user.id, + apiToken: user.apiToken, + }, + }); + + localStorage.setItem('habit-mobile-settings', userLocalData); + + // @TODO: I think we just need analytics here + // Auth.runAuth(res.data._id, res.data.apiToken); + // Analytics.register(); + // $scope.registrationInProgress = false; + // Alert.authErrorAlert(data, status, headers, config) + // Analytics.login(); + // Analytics.updateUser(); + + // @TODO: Update the api to return the user? + // store.state.user.data = user; +} + +export async function socialAuth (store, params) { + let url = '/api/v3/user/auth/social'; + let result = await axios.post(url, { + network: params.auth.network, + authResponse: params.auth.authResponse, + }); + + // @TODO: Analytics + + let user = result.data.data; + + let userLocalData = JSON.stringify({ + auth: { + apiId: user.id, + apiToken: user.apiToken, + }, + }); + + localStorage.setItem('habit-mobile-settings', userLocalData); +} diff --git a/website/client/store/actions/index.js b/website/client/store/actions/index.js index d86a04db6c..b47a7540e6 100644 --- a/website/client/store/actions/index.js +++ b/website/client/store/actions/index.js @@ -6,6 +6,7 @@ import * as tasks from './tasks'; import * as guilds from './guilds'; import * as party from './party'; import * as members from './members'; +import * as auth from './auth'; import * as quests from './quests'; // Actions should be named as 'actionName' and can be accessed as 'namespace:actionName' @@ -18,6 +19,7 @@ const actions = flattenAndNamespace({ guilds, party, members, + auth, quests, }); diff --git a/website/common/locales/en/newClient.json b/website/common/locales/en/newClient.json index 7605789369..35fe7fbb17 100644 --- a/website/common/locales/en/newClient.json +++ b/website/common/locales/en/newClient.json @@ -112,6 +112,15 @@ "guildInformationPlaceHolder": "This is our party’s description. It describes what we do in this party. If you want to learn more about what we do in this party, read the description. Party on.", "updateParty": "Update Party", "upgrade": "Upgrade", + "signUpWithSocial": "Sign up with <%= social %>", + "loginWithSocial": "Login with <%= social %>", + "confirmPassword": "Confirm Password", + "usernamePlaceholder": "e.g., HabitRabbit", + "emailPlaceholder": "e.g., rabbit@habitica.com", + "passwordPlaceholder": "e.g., •••••••••••• ", + "confirmPasswordPlaceholder": "Make sure it’s the same password!", + "termsAndAgreement": "By clicking the button below, you are indicating that you have read and agree to the Terms of Service and Privacy Policy.", + "joinHabitica": "Join Habitica", "showAllAnimals": "Show All <%= color %> <%= type %>", "showLessAnimals": "Show Less <%= color %> <%= type %>", "quickInventory": "Quick Inventory",