Commit b86001458d32bdc932dfc9bcc2e0d08192c7c0e4
1 parent
5b7c47f2
Exists in
master
and in
1 other branch
V. 0.4.0 - Finalizada a autenticação
Showing
14 changed files
with
487 additions
and
75 deletions
Show diff stats
.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 | } | ... | ... |
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 => { |
| 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; | ... | ... |
| ... | ... | @@ -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 | ... | ... |