Commit b86001458d32bdc932dfc9bcc2e0d08192c7c0e4

Authored by José Maria Villac Pinheiro
1 parent 5b7c47f2

V. 0.4.0 - Finalizada a autenticação

.ssh/known_hosts
1 1 bitbucket.org,104.192.143.2 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
  2 +github.com,192.30.253.112 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
... ...
app.js
1   -var express = require('express');
2   -var path = require('path');
3   -var favicon = require('serve-favicon');
4   -var logger = require('morgan');
5   -var cookieParser = require('cookie-parser');
6   -var bodyParser = require('body-parser');
7   -
8   -var index = require('./routes/index');
  1 +var express = require("express");
  2 +const passport = require("passport");
  3 +var path = require("path");
  4 +var favicon = require("serve-favicon");
  5 +var logger = require("morgan");
  6 +const cookieSession = require("cookie-session");
  7 +var cookieParser = require("cookie-parser");
  8 +var bodyParser = require("body-parser");
  9 +const keys = require("./config/keys");
  10 +
  11 +var index = require("./routes/index");
9 12  
10 13 var app = express();
11 14  
12 15 // view engine setup
13   -app.set('views', path.join(__dirname, 'views'));
14   -app.set('view engine', 'jade');
  16 +app.set("views", path.join(__dirname, "views"));
  17 +app.set("view engine", "jade");
15 18  
16 19 // uncomment after placing your favicon in /public
17   -app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
18   -app.use(logger('dev'));
  20 +app.use(
  21 + cookieSession({
  22 + maxAge: 30 * 24 * 60 * 60 * 1000, // 30 days
  23 + keys: [keys.cookieKey]
  24 + })
  25 +);
  26 +app.use(favicon(path.join(__dirname, "public", "favicon.ico")));
  27 +app.use(logger("dev"));
19 28 app.use(bodyParser.json());
20 29 app.use(bodyParser.urlencoded({ extended: false }));
21 30 app.use(cookieParser());
22   -app.use(express.static(path.join(__dirname, 'public')));
  31 +app.use(express.static(path.join(__dirname, "public")));
  32 +app.use(passport.initialize());
  33 +app.use(passport.session());
23 34  
24   -app.use('/', index);
  35 +app.use("/", index);
25 36  
26 37 // catch 404 and forward to error handler
27 38 app.use(function(req, res, next) {
28   - var err = new Error('Not Found');
  39 + var err = new Error("Not Found");
29 40 err.status = 404;
30 41 next(err);
31 42 });
... ... @@ -34,11 +45,11 @@ app.use(function(req, res, next) {
34 45 app.use(function(err, req, res, next) {
35 46 // set locals, only providing error in development
36 47 res.locals.message = err.message;
37   - res.locals.error = req.app.get('env') === 'development' ? err : {};
  48 + res.locals.error = req.app.get("env") === "development" ? err : {};
38 49  
39 50 // render the error page
40 51 res.status(err.status || 500);
41   - res.render('error');
  52 + res.render("error");
42 53 });
43 54  
44 55 module.exports = app;
... ...
bin/www
... ... @@ -8,8 +8,25 @@ var app = require('../app');
8 8 var debug = require('debug')('pg-node:server');
9 9 var http = require('http');
10 10  
  11 +// /**
  12 +// * Production verification
  13 +// */
  14 +
  15 +// if (process.env.NODE_ENV === 'production') {
  16 +// // Express will serve up production assets
  17 +// // like our main.js file, or main.css file!
  18 +// app.use(express.static('../client/build'));
  19 +
  20 +// // Express will serve up the index.html file
  21 +// // if it doesn't recognize the route
  22 +// const path = require('path');
  23 +// app.get('*', (req, res) => {
  24 +// res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
  25 +// });
  26 +// }
  27 +
11 28 /**
12   - * Get port from environment and store in Express.
  29 + * Define port
13 30 */
14 31  
15 32 var port = normalizePort(process.env.PORT || '5000');
... ...
client/package.json
... ... @@ -2,6 +2,23 @@
2 2 "name": "client",
3 3 "version": "0.1.0",
4 4 "private": true,
  5 + "proxy": {
  6 + "/map": {
  7 + "target": "http://localhost:5000"
  8 + },
  9 + "/map/pedro": {
  10 + "target": "http://localhost:5000"
  11 + },
  12 + "/stylesheets": {
  13 + "target": "http://localhost:5000"
  14 + },
  15 + "/auth/google": {
  16 + "target": "http://localhost:5000"
  17 + },
  18 + "/auth/google/callback": {
  19 + "target": "http://localhost:5000"
  20 + }
  21 + },
5 22 "dependencies": {
6 23 "react": "^16.3.2",
7 24 "react-dom": "^16.3.2",
... ...
client/public/favicon.ico
No preview for this file type
client/src/App.js
... ... @@ -13,6 +13,9 @@ class App extends Component {
13 13 <p className="App-intro">
14 14 To get started, edit <code>src/App.js</code> and save to reload.
15 15 </p>
  16 + <a href="/map/pedro">Mostra o mapa</a>
  17 + <p></p>
  18 + <a href="/auth/google">Login Google</a>
16 19 </div>
17 20 );
18 21 }
... ...
models/User.js 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +const mongoose = require("mongoose");
  2 +const {Schema} = mongoose;
  3 +
  4 +const userSchema = new Schema({
  5 + googleId: String
  6 +});
  7 +
  8 +mongoose.model("users", userSchema);
... ...
package-lock.json
... ... @@ -41,6 +41,16 @@
41 41 "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
42 42 "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
43 43 },
  44 + "ansi-regex": {
  45 + "version": "0.2.1",
  46 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
  47 + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk="
  48 + },
  49 + "ansi-styles": {
  50 + "version": "1.1.0",
  51 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
  52 + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94="
  53 + },
44 54 "array-flatten": {
45 55 "version": "1.1.1",
46 56 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
... ... @@ -97,6 +107,11 @@
97 107 "safe-buffer": "5.1.1"
98 108 }
99 109 },
  110 + "bluebird": {
  111 + "version": "3.5.0",
  112 + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
  113 + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw="
  114 + },
100 115 "body-parser": {
101 116 "version": "1.18.2",
102 117 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
... ... @@ -114,6 +129,11 @@
114 129 "type-is": "1.6.16"
115 130 }
116 131 },
  132 + "bson": {
  133 + "version": "1.0.6",
  134 + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz",
  135 + "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ=="
  136 + },
117 137 "buffer-writer": {
118 138 "version": "1.0.1",
119 139 "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz",
... ... @@ -138,6 +158,25 @@
138 158 "lazy-cache": "1.0.4"
139 159 }
140 160 },
  161 + "chalk": {
  162 + "version": "0.5.1",
  163 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
  164 + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
  165 + "requires": {
  166 + "ansi-styles": "1.1.0",
  167 + "escape-string-regexp": "1.0.5",
  168 + "has-ansi": "0.1.0",
  169 + "strip-ansi": "0.3.0",
  170 + "supports-color": "0.2.0"
  171 + },
  172 + "dependencies": {
  173 + "supports-color": {
  174 + "version": "0.2.0",
  175 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
  176 + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo="
  177 + }
  178 + }
  179 + },
141 180 "character-parser": {
142 181 "version": "1.2.1",
143 182 "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
... ... @@ -184,6 +223,21 @@
184 223 "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
185 224 "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
186 225 },
  226 + "concurrently": {
  227 + "version": "3.5.1",
  228 + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-3.5.1.tgz",
  229 + "integrity": "sha512-689HrwGw8Rbk1xtV9C4dY6TPJAvIYZbRbnKSAtfJ7tHqICFGoZ0PCWYjxfmerRyxBG0o3sbG3pe7N8vqPwIHuQ==",
  230 + "requires": {
  231 + "chalk": "0.5.1",
  232 + "commander": "2.6.0",
  233 + "date-fns": "1.29.0",
  234 + "lodash": "4.17.10",
  235 + "rx": "2.3.24",
  236 + "spawn-command": "0.0.2-1",
  237 + "supports-color": "3.2.3",
  238 + "tree-kill": "1.2.0"
  239 + }
  240 + },
187 241 "constantinople": {
188 242 "version": "3.0.2",
189 243 "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
... ... @@ -216,11 +270,41 @@
216 270 "cookie-signature": "1.0.6"
217 271 }
218 272 },
  273 + "cookie-session": {
  274 + "version": "2.0.0-beta.3",
  275 + "resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-2.0.0-beta.3.tgz",
  276 + "integrity": "sha512-zyqm5tA0z9yMEB/xyP7lnRnqp8eLR2e0dap+9+rBwVigla9yPKn8XTL1jJymog8xjfrowqW2o5LUjixQChkqrw==",
  277 + "requires": {
  278 + "cookies": "0.7.1",
  279 + "debug": "3.1.0",
  280 + "on-headers": "1.0.1",
  281 + "safe-buffer": "5.1.1"
  282 + },
  283 + "dependencies": {
  284 + "debug": {
  285 + "version": "3.1.0",
  286 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
  287 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
  288 + "requires": {
  289 + "ms": "2.0.0"
  290 + }
  291 + }
  292 + }
  293 + },
219 294 "cookie-signature": {
220 295 "version": "1.0.6",
221 296 "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
222 297 "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
223 298 },
  299 + "cookies": {
  300 + "version": "0.7.1",
  301 + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz",
  302 + "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=",
  303 + "requires": {
  304 + "depd": "1.1.2",
  305 + "keygrip": "1.0.2"
  306 + }
  307 + },
224 308 "core-js": {
225 309 "version": "2.5.4",
226 310 "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz",
... ... @@ -250,6 +334,11 @@
250 334 "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz",
251 335 "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE="
252 336 },
  337 + "date-fns": {
  338 + "version": "1.29.0",
  339 + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz",
  340 + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw=="
  341 + },
253 342 "debug": {
254 343 "version": "2.6.9",
255 344 "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
... ... @@ -288,6 +377,11 @@
288 377 "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
289 378 "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
290 379 },
  380 + "escape-string-regexp": {
  381 + "version": "1.0.5",
  382 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
  383 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
  384 + },
291 385 "etag": {
292 386 "version": "1.8.1",
293 387 "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
... ... @@ -381,6 +475,19 @@
381 475 "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
382 476 "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
383 477 },
  478 + "has-ansi": {
  479 + "version": "0.1.0",
  480 + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
  481 + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
  482 + "requires": {
  483 + "ansi-regex": "0.2.1"
  484 + }
  485 + },
  486 + "has-flag": {
  487 + "version": "1.0.0",
  488 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
  489 + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
  490 + },
384 491 "http-errors": {
385 492 "version": "1.6.2",
386 493 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
... ... @@ -465,6 +572,16 @@
465 572 "promise": "6.1.0"
466 573 }
467 574 },
  575 + "kareem": {
  576 + "version": "2.0.7",
  577 + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.7.tgz",
  578 + "integrity": "sha512-p8+lEpsNs4N0fvNOC1/zzDO0wDrD3Pb1G+OwfIG+gKVK3MyY5jeaGYh+9Qx6jb4fEG2b3E6U98vaE9MH7Gilsw=="
  579 + },
  580 + "keygrip": {
  581 + "version": "1.0.2",
  582 + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.2.tgz",
  583 + "integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E="
  584 + },
468 585 "kind-of": {
469 586 "version": "3.2.2",
470 587 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
... ... @@ -483,6 +600,16 @@
483 600 "resolved": "https://registry.npmjs.org/leaflet-draw/-/leaflet-draw-1.0.2.tgz",
484 601 "integrity": "sha512-iCcbXE9okhwznoTXjxVjoGFoKeiWGsgmWPKrPAeHUvtWZWK4t6YF6815D13wZoMxX2UM6tOmD7/VofCxx3S0+w=="
485 602 },
  603 + "lodash": {
  604 + "version": "4.17.10",
  605 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
  606 + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
  607 + },
  608 + "lodash.get": {
  609 + "version": "4.4.2",
  610 + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
  611 + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
  612 + },
486 613 "longest": {
487 614 "version": "1.0.1",
488 615 "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
... ... @@ -534,6 +661,56 @@
534 661 "minimist": "0.0.8"
535 662 }
536 663 },
  664 + "mongodb": {
  665 + "version": "3.0.7",
  666 + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.7.tgz",
  667 + "integrity": "sha512-n/14kMJEoARXz1qhpNPhUocqy+z5130jhqgEIX1Tsl8UVpHrndQ8et+VmgC4yPK/I8Tcgc93JEMQCHTekBUnNA==",
  668 + "requires": {
  669 + "mongodb-core": "3.0.7"
  670 + }
  671 + },
  672 + "mongodb-core": {
  673 + "version": "3.0.7",
  674 + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.7.tgz",
  675 + "integrity": "sha512-z6YufO7s40wLiv2ssFshqoLS4+Kf+huhHq6KZ7gDArsKNzXYjAwTMnhEIJ9GQ8fIfBGs5tBLNPfbIDoCKGPmOw==",
  676 + "requires": {
  677 + "bson": "1.0.6",
  678 + "require_optional": "1.0.1"
  679 + }
  680 + },
  681 + "mongoose": {
  682 + "version": "5.0.17",
  683 + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.17.tgz",
  684 + "integrity": "sha512-RV1WBQhzW7oOhStR+s7LQYfgQWTJm4hgmU3TqtgTiBCfnj5/sNliX2/SY+ef7tpIZRUqEBV5xITZdAlwQ6Ymdg==",
  685 + "requires": {
  686 + "async": "2.1.4",
  687 + "bson": "1.0.6",
  688 + "kareem": "2.0.7",
  689 + "lodash.get": "4.4.2",
  690 + "mongodb": "3.0.7",
  691 + "mongoose-legacy-pluralize": "1.0.2",
  692 + "mpath": "0.4.1",
  693 + "mquery": "3.0.0",
  694 + "ms": "2.0.0",
  695 + "regexp-clone": "0.0.1",
  696 + "sliced": "1.0.1"
  697 + },
  698 + "dependencies": {
  699 + "async": {
  700 + "version": "2.1.4",
  701 + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz",
  702 + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=",
  703 + "requires": {
  704 + "lodash": "4.17.10"
  705 + }
  706 + }
  707 + }
  708 + },
  709 + "mongoose-legacy-pluralize": {
  710 + "version": "1.0.2",
  711 + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
  712 + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
  713 + },
537 714 "morgan": {
538 715 "version": "1.9.0",
539 716 "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
... ... @@ -546,6 +723,29 @@
546 723 "on-headers": "1.0.1"
547 724 }
548 725 },
  726 + "mpath": {
  727 + "version": "0.4.1",
  728 + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.4.1.tgz",
  729 + "integrity": "sha512-NNY/MpBkALb9jJmjpBlIi6GRoLveLUM0pJzgbp9vY9F7IQEb/HREC/nxrixechcQwd1NevOhJnWWV8QQQRE+OA=="
  730 + },
  731 + "mquery": {
  732 + "version": "3.0.0",
  733 + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.0.0.tgz",
  734 + "integrity": "sha512-WL1Lk8v4l8VFSSwN3yCzY9TXw+fKVYKn6f+w86TRzOLSE8k1yTgGaLBPUByJQi8VcLbOdnUneFV/y3Kv874pnQ==",
  735 + "requires": {
  736 + "bluebird": "3.5.0",
  737 + "debug": "2.6.9",
  738 + "regexp-clone": "0.0.1",
  739 + "sliced": "0.0.5"
  740 + },
  741 + "dependencies": {
  742 + "sliced": {
  743 + "version": "0.0.5",
  744 + "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz",
  745 + "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8="
  746 + }
  747 + }
  748 + },
549 749 "ms": {
550 750 "version": "2.0.0",
551 751 "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
... ... @@ -784,11 +984,37 @@
784 984 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
785 985 "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
786 986 },
  987 + "regexp-clone": {
  988 + "version": "0.0.1",
  989 + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
  990 + "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
  991 + },
787 992 "repeat-string": {
788 993 "version": "1.6.1",
789 994 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
790 995 "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
791 996 },
  997 + "require_optional": {
  998 + "version": "1.0.1",
  999 + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
  1000 + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
  1001 + "requires": {
  1002 + "resolve-from": "2.0.0",
  1003 + "semver": "5.5.0"
  1004 + },
  1005 + "dependencies": {
  1006 + "semver": {
  1007 + "version": "5.5.0",
  1008 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
  1009 + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
  1010 + }
  1011 + }
  1012 + },
  1013 + "resolve-from": {
  1014 + "version": "2.0.0",
  1015 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
  1016 + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
  1017 + },
792 1018 "right-align": {
793 1019 "version": "0.1.3",
794 1020 "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
... ... @@ -797,6 +1023,11 @@
797 1023 "align-text": "0.1.4"
798 1024 }
799 1025 },
  1026 + "rx": {
  1027 + "version": "2.3.24",
  1028 + "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz",
  1029 + "integrity": "sha1-FPlQpCF9fjXapxu8vljv9o6ksrc="
  1030 + },
800 1031 "safe-buffer": {
801 1032 "version": "5.1.1",
802 1033 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
... ... @@ -862,6 +1093,11 @@
862 1093 "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
863 1094 "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
864 1095 },
  1096 + "sliced": {
  1097 + "version": "1.0.1",
  1098 + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
  1099 + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
  1100 + },
865 1101 "source-map": {
866 1102 "version": "0.4.4",
867 1103 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
... ... @@ -870,6 +1106,11 @@
870 1106 "amdefine": "1.0.1"
871 1107 }
872 1108 },
  1109 + "spawn-command": {
  1110 + "version": "0.0.2-1",
  1111 + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
  1112 + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A="
  1113 + },
873 1114 "split": {
874 1115 "version": "1.0.1",
875 1116 "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
... ... @@ -896,6 +1137,22 @@
896 1137 "safe-buffer": "5.1.1"
897 1138 }
898 1139 },
  1140 + "strip-ansi": {
  1141 + "version": "0.3.0",
  1142 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
  1143 + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
  1144 + "requires": {
  1145 + "ansi-regex": "0.2.1"
  1146 + }
  1147 + },
  1148 + "supports-color": {
  1149 + "version": "3.2.3",
  1150 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
  1151 + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
  1152 + "requires": {
  1153 + "has-flag": "1.0.0"
  1154 + }
  1155 + },
899 1156 "tedious": {
900 1157 "version": "2.3.1",
901 1158 "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.3.1.tgz",
... ... @@ -994,6 +1251,11 @@
994 1251 }
995 1252 }
996 1253 },
  1254 + "tree-kill": {
  1255 + "version": "1.2.0",
  1256 + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz",
  1257 + "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg=="
  1258 + },
997 1259 "type-is": {
998 1260 "version": "1.6.16",
999 1261 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
... ...
package.json
... ... @@ -10,17 +10,22 @@
10 10 },
11 11 "scripts": {
12 12 "start": "node ./bin/www",
13   - "dev": "nodemon ./bin/www"
  13 + "server": "nodemon ./bin/www",
  14 + "client": "npm run start --prefix client",
  15 + "dev": "concurrently \"npm run server\" \"npm run client\""
14 16 },
15 17 "author": "José Maria Villac Pinheiro",
16 18 "dependencies": {
17 19 "body-parser": "~1.18.2",
  20 + "concurrently": "^3.5.1",
18 21 "cookie-parser": "~1.4.3",
  22 + "cookie-session": "^2.0.0-beta.3",
19 23 "debug": "~2.6.9",
20 24 "express": "~4.15.5",
21 25 "jade": "~1.11.0",
22 26 "jade-bootstrap": "^1.0.14",
23 27 "leaflet-draw": "^1.0.2",
  28 + "mongoose": "^5.0.17",
24 29 "morgan": "~1.9.0",
25 30 "mssql": "^4.1.0",
26 31 "passport": "^0.4.0",
... ...
routes/authRoutes.js
... ... @@ -26,4 +26,13 @@ module.exports = router =&gt; {
26 26 res.redirect("/");
27 27 }
28 28 );
  29 +
  30 + router.get("/api/logout", (req,res)=>{
  31 + req.logout();
  32 + res.send(req.user);
  33 + });
  34 +
  35 + router.get("/api/current_user", (req, res)=> {
  36 + res.send (req.user);
  37 + });
29 38 };
... ...
routes/index.js
1 1 var express = require("express");
  2 +const mongoose = require ("mongoose");
2 3 var router = express.Router();
3   -require("../services/passport");
4   -require("../services/databases");
5 4 const keys = require("../config/keys");
  5 +require("../models/User");
  6 +const passport = require("../services/passport");
  7 +require("../services/databases");
  8 +
  9 +mongoose.connect(keys.mongoURI);
6 10  
7 11 require("./authRoutes")(router);
  12 +require("./mapRoutes")(router);
8 13  
9 14 /* GET home page. */
10 15 router.get("/", function(req, res, next) {
11 16 res.render("index", { title: "NEXUS" });
12 17 });
13 18  
14   -// bounding coordinates to view the map
15   -var boundSW = [-23.6506647239914, -46.5848434588656]; // lat, long
16   -var boundNE = [-23.5992830936269, -46.5447524538661];
17   -
18   -router.get("/map/:nome", function(req, res, next) {
19   - var numeroConsumidor = require("../src/findConsumerNumber");
20   - var coordenadas = require("../src/findCoordinatesFromConsumer");
21   - var retorno = numeroConsumidor(req.params.nome, function(numero, nome, err) {
22   - if (err === undefined) {
23   - console.log("Terminou tudo: " + numero + " Nome: " + nome);
24   - var codigoComNome = numero + " - " + nome;
25   - var retorno = coordenadas(numero, function(x, y) {
26   - console.log("Terminou procura coordenadas x: " + x + " y: " + y);
27   - res.render("map", {
28   - codigo: numero,
29   - consumidor: codigoComNome,
30   - fator_zoom: 23,
31   - title: "NEXUS",
32   - lat: y,
33   - lng: x,
34   - bndSW: boundSW,
35   - bndNE: boundNE,
36   - geoserverWMS: keys.geoserverWMS,
37   - waterLayers: keys.waterLayers,
38   - server: keys.server
39   - });
40   - });
41   - }
42   - });
43   -});
44   -
45   -router.get(keys.server + "/ponto", function(req, res) {
46   - var coord = {};
47   - console.log("Postou: ");
48   -});
49   -
50 19 module.exports = router;
... ...
routes/mapRoutes.js 0 → 100644
... ... @@ -0,0 +1,39 @@
  1 +const keys = require("../config/keys");
  2 +
  3 +module.exports = router => {
  4 + // bounding coordinates to view the map
  5 + var boundSW = [-23.6506647239914, -46.5848434588656]; // lat, long
  6 + var boundNE = [-23.5992830936269, -46.5447524538661];
  7 +
  8 + router.get("/map/:nome", function(req, res, next) {
  9 + var numeroConsumidor = require("../src/findConsumerNumber");
  10 + var coordenadas = require("../src/findCoordinatesFromConsumer");
  11 + var retorno = numeroConsumidor(req.params.nome, function(numero, nome, err) {
  12 + if (err === undefined) {
  13 + console.log("Terminou tudo: " + numero + " Nome: " + nome);
  14 + var codigoComNome = numero + " - " + nome;
  15 + var retorno = coordenadas(numero, function(x, y) {
  16 + console.log("Terminou procura coordenadas x: " + x + " y: " + y);
  17 + res.render("map", {
  18 + codigo: numero,
  19 + consumidor: codigoComNome,
  20 + fator_zoom: 23,
  21 + title: "NEXUS",
  22 + lat: y,
  23 + lng: x,
  24 + bndSW: boundSW,
  25 + bndNE: boundNE,
  26 + geoserverWMS: keys.geoserverWMS,
  27 + waterLayers: keys.waterLayers,
  28 + server: keys.server
  29 + });
  30 + });
  31 + }
  32 + });
  33 + });
  34 +
  35 + router.get(keys.server + "/ponto", function(req, res) {
  36 + var coord = {};
  37 + console.log("Postou: ");
  38 + });
  39 +};
0 40 \ No newline at end of file
... ...
services/passport.js
1 1 const passport = require("passport");
2 2 const GoogleStrategy = require("passport-google-oauth20").Strategy;
3   -const util = require('util');
  3 +// const util = require("util"); // example: console.log("Profile: " + util.inspect(profile, false, null));
  4 +const mongoose = require("mongoose");
4 5 const keys = require("../config/keys");
5 6  
  7 +const User = mongoose.model("users");
  8 +
  9 +passport.serializeUser((user, done) => {
  10 + done(null, user.id);
  11 +});
  12 +
  13 +passport.deserializeUser((id, done) => {
  14 + User.findById(id).then(user => {
  15 + done(null, user);
  16 + });
  17 +});
  18 +
6 19 passport.use(
7   - new GoogleStrategy(
8   - {
9   - clientID: keys.googleClientID,
10   - clientSecret: keys.googleClientSecret,
11   - callbackURL: "/auth/google/callback"
12   - },
13   - (accessToken, refreshToken, profile, done) => { // error function
14   - console.log("Ocorreu um erro");
15   - console.log("Chave de acesso: " + accessToken);
16   - console.log("Refresh token: " + refreshToken);
17   - console.log("Profile: " + util.inspect(profile, false, null));
18   - }
19   - )
20   - );
21   -
22 20 \ No newline at end of file
  21 + new GoogleStrategy(
  22 + {
  23 + clientID: keys.googleClientID,
  24 + clientSecret: keys.googleClientSecret,
  25 + callbackURL: "/auth/google/callback"
  26 + },
  27 + (accessToken, refreshToken, profile, done) => {
  28 + // callback function
  29 + User.findOne({ googleId: profile.id }).then(existingUser => {
  30 + if (existingUser) {
  31 + // we already have a record with the given profile ID
  32 + done(null, existingUser);
  33 + } else {
  34 + // we don't have a record with the given profile ID
  35 + new User({ googleId: profile.id })
  36 + .save()
  37 + .then(user => done(null, user));
  38 + }
  39 + });
  40 + }
  41 + )
  42 +);
... ...
views/map.jade
... ... @@ -13,7 +13,7 @@ block content
13 13 script.
14 14 function relocate_home()
15 15 {
16   - location.href = "#{server}/map/" + nome.value;
  16 + location.href = "/map/" + nome.value;
17 17 }
18 18 br
19 19 #map
... ... @@ -44,8 +44,55 @@ block content
44 44 var marker = L.marker([#{lat},#{lng}]).addTo(map);
45 45 marker.bindPopup("<b>#{codigo}</b><br>#{consumidor}").openPopup();
46 46  
  47 + //- var modifiedDraw = L.Control.Draw.extend({
  48 + //- draw: {
  49 + //- polygon: false,
  50 + //- polyline: false,
  51 + //- line: false,
  52 + //- circle: false,
  53 + //- rectangle: false,
  54 + //- circlemarker: false,
  55 + //- marker: true,
  56 + //- toolbar: {
  57 + //- buttons: {
  58 + //- marker: 'Cadastra árvore'
  59 + //- }
  60 + //- }
  61 + //- },
  62 + //- edit: {
  63 + //- featureGroup: drawnItems
  64 + //- }
  65 + //- });
  66 +
  67 + //- modifiedDraw = L.Control.Draw({
  68 + //- draw: {
  69 + //- polygon: false,
  70 + //- polyline: false,
  71 + //- line: false,
  72 + //- circle: false,
  73 + //- rectangle: false,
  74 + //- circlemarker: false,
  75 + //- marker: true
  76 + //- },
  77 + //- edit: {
  78 + //- featureGroup: drawnItems
  79 + //- },
  80 + //- });
  81 +
47 82 var drawControl = new L.Control.Draw({
48 83 draw: {
  84 + toolbar: {
  85 + buttons: {
  86 + marker: 'Draw an awesome polygon'
  87 + }
  88 + },
  89 + handlers: {
  90 + marker: {
  91 + tooltip: {
  92 + start: "Selecione no mapa para colocar uma árvore."
  93 + }
  94 + }
  95 + },
49 96 polygon: false,
50 97 polyline: false,
51 98 line: false,
... ... @@ -56,8 +103,12 @@ block content
56 103 },
57 104 edit: {
58 105 featureGroup: drawnItems
59   - }
  106 + },
60 107 });
  108 + L.drawLocal = {
  109 +
  110 + };
  111 +
61 112 map.addControl(drawControl);
62 113  
63 114 // Truncate value based on number of decimals
... ...