Commit b86001458d32bdc932dfc9bcc2e0d08192c7c0e4

Authored by José Maria Villac Pinheiro
1 parent 5b7c47f2

V. 0.4.0 - Finalizada a autenticação

.ssh/known_hosts
1 bitbucket.org,104.192.143.2 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw== 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==
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 var app = express(); 13 var app = express();
11 14
12 // view engine setup 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 // uncomment after placing your favicon in /public 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 app.use(bodyParser.json()); 28 app.use(bodyParser.json());
20 app.use(bodyParser.urlencoded({ extended: false })); 29 app.use(bodyParser.urlencoded({ extended: false }));
21 app.use(cookieParser()); 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 // catch 404 and forward to error handler 37 // catch 404 and forward to error handler
27 app.use(function(req, res, next) { 38 app.use(function(req, res, next) {
28 - var err = new Error('Not Found'); 39 + var err = new Error("Not Found");
29 err.status = 404; 40 err.status = 404;
30 next(err); 41 next(err);
31 }); 42 });
@@ -34,11 +45,11 @@ app.use(function(req, res, next) { @@ -34,11 +45,11 @@ app.use(function(req, res, next) {
34 app.use(function(err, req, res, next) { 45 app.use(function(err, req, res, next) {
35 // set locals, only providing error in development 46 // set locals, only providing error in development
36 res.locals.message = err.message; 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 // render the error page 50 // render the error page
40 res.status(err.status || 500); 51 res.status(err.status || 500);
41 - res.render('error'); 52 + res.render("error");
42 }); 53 });
43 54
44 module.exports = app; 55 module.exports = app;
@@ -8,8 +8,25 @@ var app = require('../app'); @@ -8,8 +8,25 @@ var app = require('../app');
8 var debug = require('debug')('pg-node:server'); 8 var debug = require('debug')('pg-node:server');
9 var http = require('http'); 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 var port = normalizePort(process.env.PORT || '5000'); 32 var port = normalizePort(process.env.PORT || '5000');
client/package.json
@@ -2,6 +2,23 @@ @@ -2,6 +2,23 @@
2 "name": "client", 2 "name": "client",
3 "version": "0.1.0", 3 "version": "0.1.0",
4 "private": true, 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 "dependencies": { 22 "dependencies": {
6 "react": "^16.3.2", 23 "react": "^16.3.2",
7 "react-dom": "^16.3.2", 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,6 +13,9 @@ class App extends Component {
13 <p className="App-intro"> 13 <p className="App-intro">
14 To get started, edit <code>src/App.js</code> and save to reload. 14 To get started, edit <code>src/App.js</code> and save to reload.
15 </p> 15 </p>
  16 + <a href="/map/pedro">Mostra o mapa</a>
  17 + <p></p>
  18 + <a href="/auth/google">Login Google</a>
16 </div> 19 </div>
17 ); 20 );
18 } 21 }
models/User.js 0 → 100644
@@ -0,0 +1,8 @@ @@ -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,6 +41,16 @@
41 "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 41 "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
42 "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" 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 "array-flatten": { 54 "array-flatten": {
45 "version": "1.1.1", 55 "version": "1.1.1",
46 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 56 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -97,6 +107,11 @@ @@ -97,6 +107,11 @@
97 "safe-buffer": "5.1.1" 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 "body-parser": { 115 "body-parser": {
101 "version": "1.18.2", 116 "version": "1.18.2",
102 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 117 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
@@ -114,6 +129,11 @@ @@ -114,6 +129,11 @@
114 "type-is": "1.6.16" 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 "buffer-writer": { 137 "buffer-writer": {
118 "version": "1.0.1", 138 "version": "1.0.1",
119 "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", 139 "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz",
@@ -138,6 +158,25 @@ @@ -138,6 +158,25 @@
138 "lazy-cache": "1.0.4" 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 "character-parser": { 180 "character-parser": {
142 "version": "1.2.1", 181 "version": "1.2.1",
143 "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", 182 "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
@@ -184,6 +223,21 @@ @@ -184,6 +223,21 @@
184 "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", 223 "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
185 "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" 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 "constantinople": { 241 "constantinople": {
188 "version": "3.0.2", 242 "version": "3.0.2",
189 "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", 243 "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
@@ -216,11 +270,41 @@ @@ -216,11 +270,41 @@
216 "cookie-signature": "1.0.6" 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 "cookie-signature": { 294 "cookie-signature": {
220 "version": "1.0.6", 295 "version": "1.0.6",
221 "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 296 "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
222 "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 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 "core-js": { 308 "core-js": {
225 "version": "2.5.4", 309 "version": "2.5.4",
226 "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz", 310 "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz",
@@ -250,6 +334,11 @@ @@ -250,6 +334,11 @@
250 "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", 334 "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz",
251 "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=" 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 "debug": { 342 "debug": {
254 "version": "2.6.9", 343 "version": "2.6.9",
255 "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 344 "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -288,6 +377,11 @@ @@ -288,6 +377,11 @@
288 "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 377 "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
289 "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 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 "etag": { 385 "etag": {
292 "version": "1.8.1", 386 "version": "1.8.1",
293 "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 387 "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
@@ -381,6 +475,19 @@ @@ -381,6 +475,19 @@
381 "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 475 "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
382 "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" 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 "http-errors": { 491 "http-errors": {
385 "version": "1.6.2", 492 "version": "1.6.2",
386 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 493 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
@@ -465,6 +572,16 @@ @@ -465,6 +572,16 @@
465 "promise": "6.1.0" 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 "kind-of": { 585 "kind-of": {
469 "version": "3.2.2", 586 "version": "3.2.2",
470 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 587 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -483,6 +600,16 @@ @@ -483,6 +600,16 @@
483 "resolved": "https://registry.npmjs.org/leaflet-draw/-/leaflet-draw-1.0.2.tgz", 600 "resolved": "https://registry.npmjs.org/leaflet-draw/-/leaflet-draw-1.0.2.tgz",
484 "integrity": "sha512-iCcbXE9okhwznoTXjxVjoGFoKeiWGsgmWPKrPAeHUvtWZWK4t6YF6815D13wZoMxX2UM6tOmD7/VofCxx3S0+w==" 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 "longest": { 613 "longest": {
487 "version": "1.0.1", 614 "version": "1.0.1",
488 "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 615 "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@@ -534,6 +661,56 @@ @@ -534,6 +661,56 @@
534 "minimist": "0.0.8" 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 "morgan": { 714 "morgan": {
538 "version": "1.9.0", 715 "version": "1.9.0",
539 "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", 716 "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
@@ -546,6 +723,29 @@ @@ -546,6 +723,29 @@
546 "on-headers": "1.0.1" 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 "ms": { 749 "ms": {
550 "version": "2.0.0", 750 "version": "2.0.0",
551 "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 751 "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -784,11 +984,37 @@ @@ -784,11 +984,37 @@
784 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 984 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
785 "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" 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 "repeat-string": { 992 "repeat-string": {
788 "version": "1.6.1", 993 "version": "1.6.1",
789 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 994 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
790 "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 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 "right-align": { 1018 "right-align": {
793 "version": "0.1.3", 1019 "version": "0.1.3",
794 "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 1020 "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
@@ -797,6 +1023,11 @@ @@ -797,6 +1023,11 @@
797 "align-text": "0.1.4" 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 "safe-buffer": { 1031 "safe-buffer": {
801 "version": "5.1.1", 1032 "version": "5.1.1",
802 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1033 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
@@ -862,6 +1093,11 @@ @@ -862,6 +1093,11 @@
862 "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 1093 "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
863 "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 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 "source-map": { 1101 "source-map": {
866 "version": "0.4.4", 1102 "version": "0.4.4",
867 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 1103 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
@@ -870,6 +1106,11 @@ @@ -870,6 +1106,11 @@
870 "amdefine": "1.0.1" 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 "split": { 1114 "split": {
874 "version": "1.0.1", 1115 "version": "1.0.1",
875 "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", 1116 "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
@@ -896,6 +1137,22 @@ @@ -896,6 +1137,22 @@
896 "safe-buffer": "5.1.1" 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 "tedious": { 1156 "tedious": {
900 "version": "2.3.1", 1157 "version": "2.3.1",
901 "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.3.1.tgz", 1158 "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.3.1.tgz",
@@ -994,6 +1251,11 @@ @@ -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 "type-is": { 1259 "type-is": {
998 "version": "1.6.16", 1260 "version": "1.6.16",
999 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 1261 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
@@ -10,17 +10,22 @@ @@ -10,17 +10,22 @@
10 }, 10 },
11 "scripts": { 11 "scripts": {
12 "start": "node ./bin/www", 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 "author": "José Maria Villac Pinheiro", 17 "author": "José Maria Villac Pinheiro",
16 "dependencies": { 18 "dependencies": {
17 "body-parser": "~1.18.2", 19 "body-parser": "~1.18.2",
  20 + "concurrently": "^3.5.1",
18 "cookie-parser": "~1.4.3", 21 "cookie-parser": "~1.4.3",
  22 + "cookie-session": "^2.0.0-beta.3",
19 "debug": "~2.6.9", 23 "debug": "~2.6.9",
20 "express": "~4.15.5", 24 "express": "~4.15.5",
21 "jade": "~1.11.0", 25 "jade": "~1.11.0",
22 "jade-bootstrap": "^1.0.14", 26 "jade-bootstrap": "^1.0.14",
23 "leaflet-draw": "^1.0.2", 27 "leaflet-draw": "^1.0.2",
  28 + "mongoose": "^5.0.17",
24 "morgan": "~1.9.0", 29 "morgan": "~1.9.0",
25 "mssql": "^4.1.0", 30 "mssql": "^4.1.0",
26 "passport": "^0.4.0", 31 "passport": "^0.4.0",
routes/authRoutes.js
@@ -26,4 +26,13 @@ module.exports = router =&gt; { @@ -26,4 +26,13 @@ module.exports = router =&gt; {
26 res.redirect("/"); 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 var express = require("express"); 1 var express = require("express");
  2 +const mongoose = require ("mongoose");
2 var router = express.Router(); 3 var router = express.Router();
3 -require("../services/passport");  
4 -require("../services/databases");  
5 const keys = require("../config/keys"); 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 require("./authRoutes")(router); 11 require("./authRoutes")(router);
  12 +require("./mapRoutes")(router);
8 13
9 /* GET home page. */ 14 /* GET home page. */
10 router.get("/", function(req, res, next) { 15 router.get("/", function(req, res, next) {
11 res.render("index", { title: "NEXUS" }); 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 module.exports = router; 19 module.exports = router;
routes/mapRoutes.js 0 → 100644
@@ -0,0 +1,39 @@ @@ -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 \ No newline at end of file 40 \ No newline at end of file
services/passport.js
1 const passport = require("passport"); 1 const passport = require("passport");
2 const GoogleStrategy = require("passport-google-oauth20").Strategy; 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 const keys = require("../config/keys"); 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 passport.use( 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 \ No newline at end of file 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,7 +13,7 @@ block content
13 script. 13 script.
14 function relocate_home() 14 function relocate_home()
15 { 15 {
16 - location.href = "#{server}/map/" + nome.value; 16 + location.href = "/map/" + nome.value;
17 } 17 }
18 br 18 br
19 #map 19 #map
@@ -44,8 +44,55 @@ block content @@ -44,8 +44,55 @@ block content
44 var marker = L.marker([#{lat},#{lng}]).addTo(map); 44 var marker = L.marker([#{lat},#{lng}]).addTo(map);
45 marker.bindPopup("<b>#{codigo}</b><br>#{consumidor}").openPopup(); 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 var drawControl = new L.Control.Draw({ 82 var drawControl = new L.Control.Draw({
48 draw: { 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 polygon: false, 96 polygon: false,
50 polyline: false, 97 polyline: false,
51 line: false, 98 line: false,
@@ -56,8 +103,12 @@ block content @@ -56,8 +103,12 @@ block content
56 }, 103 },
57 edit: { 104 edit: {
58 featureGroup: drawnItems 105 featureGroup: drawnItems
59 - } 106 + },
60 }); 107 });
  108 + L.drawLocal = {
  109 +
  110 + };
  111 +
61 map.addControl(drawControl); 112 map.addControl(drawControl);
62 113
63 // Truncate value based on number of decimals 114 // Truncate value based on number of decimals