From 72ce85fabcadd898f32bf6be60963d8e4cad8206 Mon Sep 17 00:00:00 2001 From: Jose Maria Villac Pinheiro Date: Mon, 30 Apr 2018 12:10:12 -0300 Subject: [PATCH] V. 0.2.0 - Configuração inicial da autenticação com o Google. Refatoração código banco de dados. --- .gitignore | 3 ++- package-lock.json | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 5 ++++- public/stylesheets/style.css | 17 +++++++++++++---- routes/authRoutes.js | 29 +++++++++++++++++++++++++++++ routes/index.js | 24 +++++++----------------- services/databases.js | 14 ++++++++++++++ services/passport.js | 21 +++++++++++++++++++++ src/connectionsConfiguration.js | 21 --------------------- views/layout.jade | 1 - views/map.jade | 8 +++----- 11 files changed, 141 insertions(+), 50 deletions(-) create mode 100644 routes/authRoutes.js create mode 100644 services/databases.js create mode 100644 services/passport.js delete mode 100644 src/connectionsConfiguration.js diff --git a/.gitignore b/.gitignore index b512c09..55e810b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +keys.js diff --git a/package-lock.json b/package-lock.json index a9023b7..9a4b6e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -564,6 +564,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -595,11 +600,49 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, + "passport": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", + "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", + "requires": { + "passport-strategy": "1.0.0", + "pause": "0.0.1" + } + }, + "passport-google-oauth20": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-1.0.0.tgz", + "integrity": "sha1-O5YOih1w0dvnlGFcgnxoxAOSpdA=", + "requires": { + "passport-oauth2": "1.4.0" + } + }, + "passport-oauth2": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.4.0.tgz", + "integrity": "sha1-9i+BWDy+EmCb585vFguTlaJ7hq0=", + "requires": { + "oauth": "0.9.15", + "passport-strategy": "1.0.0", + "uid2": "0.0.3", + "utils-merge": "1.0.0" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, "pg": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/pg/-/pg-7.4.1.tgz", @@ -981,6 +1024,11 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, + "uid2": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", + "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index 2a29f73..2419ee1 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "npm": "5.6.0" }, "scripts": { - "start": "node ./bin/www" + "start": "node ./bin/www", + "dev": "nodemon ./bin/www" }, "dependencies": { "body-parser": "~1.18.2", @@ -19,6 +20,8 @@ "leaflet-draw": "^1.0.2", "morgan": "~1.9.0", "mssql": "^4.1.0", + "passport": "^0.4.0", + "passport-google-oauth20": "^1.0.0", "pg": "*", "postgeo": "*", "serve-favicon": "~2.4.5" diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 792c4f7..948cd05 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -10,7 +10,7 @@ html, body { height: 100px; } .outer { - top: 50px; + top: 0px; left: 0; right: 0; bottom: 0; @@ -19,7 +19,7 @@ html, body { height: auto; } #map { - height: 100%; + height: 85%; } body { margin:0; @@ -31,7 +31,7 @@ a { } #leg, #leg_title { position:absolute; - top:50px; + top:0px; right:10px; width:100px; padding:10px; @@ -45,7 +45,7 @@ a { overflow:auto; } #leg_title { - top:10px; + top:0px; } #leg_items { position:relative; @@ -62,4 +62,13 @@ a { bottom: 46px; height: 48px; width: 48px; +} +.btn.btn-primary { + margin-top: 5px; +} +.form-control{ + margin-top: 5px; +} +.col.col-lg-3{ + margin-top: 11px; } \ No newline at end of file diff --git a/routes/authRoutes.js b/routes/authRoutes.js new file mode 100644 index 0000000..55da634 --- /dev/null +++ b/routes/authRoutes.js @@ -0,0 +1,29 @@ +const passport = require("passport"); // from npm + +module.exports = router => { + // Enter to authenticate the user + router.get( + "/auth/google", + passport.authenticate("google", { + scope: ["profile", "email"] + }) + ); + + // Page after authenticate + router.get( + "/auth/google/callback", + passport.authenticate("google"), + (err, req, res, next) => { + // custom error handler to catch any errors, such as TokenError + if (err.name === "TokenError") { + res.redirect("http://nexusbr.com"); // redirect them back to the login page + } else { + // Handle other errors here + } + }, + (req, res) => { + // On success, redirect back to '/' + res.redirect("/"); + } + ); +}; diff --git a/routes/index.js b/routes/index.js index 17992d1..0ab121c 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,21 +1,10 @@ var express = require("express"); -var ms_sql = require("mssql"); -var conexao = require("../src/connectionsConfiguration"); var router = express.Router(); +require("../services/passport"); +require("../services/databases"); +const authRoutes = require("./authRoutes"); -// Conexão com Postgres -var pg = require("pg"); -pg.defaults.poolSize = 25; - -// Creates global pool connection with MS SqlServer - -global.poolPg = new pg.Pool(conexao.pg); - -global.poolMsql = new ms_sql.ConnectionPool(conexao.msql, function(err) { - if (err) { - console.log("Não conectou \n" + err); - } -}); +authRoutes(router); /* GET home page. */ router.get("/", function(req, res, next) { @@ -27,11 +16,12 @@ router.get("/map/:nome", function(req, res, next) { var coordenadas = require("../src/findCoordinatesFromConsumer"); var retorno = numeroConsumidor(req.params.nome, function(numero, nome) { console.log("Terminou tudo: " + numero + " Nome: " + nome); + var codigoComNome = numero + " - " + nome; var retorno = coordenadas(numero, function(x, y) { console.log("Terminou procura coordenadas x: " + x + " y: " + y); res.render("map", { codigo: numero, - consumidor: nome, + consumidor: codigoComNome, fator_zoom: 23, title: "NEXUS", lat: y, @@ -41,7 +31,7 @@ router.get("/map/:nome", function(req, res, next) { }); }); -router.get("http://127.0.0.1/ponto", function(req, res) { +router.get("http://nexusbr.dyndns-ip.com:3000/ponto", function(req, res) { var coord = {}; console.log("Postou: "); }); diff --git a/services/databases.js b/services/databases.js new file mode 100644 index 0000000..d6c3d6c --- /dev/null +++ b/services/databases.js @@ -0,0 +1,14 @@ +var ms_sql = require("mssql"); +var pg = require("pg"); +const keys = require("../config/keys"); + +// Conexão com Postgres +pg.defaults.poolSize = 25; + +// Creates global pool connection with Postgres and MS SqlServer +global.poolPg = new pg.Pool(keys.pg); +global.poolMsql = new ms_sql.ConnectionPool(keys.msql, function(err) { + if (err) { + console.log("Não conectou \n" + err); + } +}); \ No newline at end of file diff --git a/services/passport.js b/services/passport.js new file mode 100644 index 0000000..27e4182 --- /dev/null +++ b/services/passport.js @@ -0,0 +1,21 @@ +const passport = require("passport"); +const GoogleStrategy = require("passport-google-oauth20").Strategy; +const util = require('util'); +const keys = require("../config/keys"); + +passport.use( + new GoogleStrategy( + { + clientID: keys.googleClientID, + clientSecret: keys.googleClientSecret, + callbackURL: "/auth/google/callback" + }, + (accessToken, refreshToken, profile, done) => { // error function + console.log("Ocorreu um erro"); + console.log("Chave de acesso: " + accessToken); + console.log("Refresh token: " + refreshToken); + console.log("Profile: " + util.inspect(profile, false, null)); + } + ) + ); + \ No newline at end of file diff --git a/src/connectionsConfiguration.js b/src/connectionsConfiguration.js deleted file mode 100644 index d0699e2..0000000 --- a/src/connectionsConfiguration.js +++ /dev/null @@ -1,21 +0,0 @@ -var connection = { - pg: { - host: 'http://nexusbr.dyndns-ip.com', // server name or IP address; - hostaddr: 'http://nexusbr.dyndns-ip.com', - port: 5432, - database: 'gis', - user: 'postgres', - password: 'nexus243', - max: 10, // max number of clients in the pool - idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed - }, - msql: { - user: 'sa', - password: 'Nexus243', - server: 'http://nexusbr.dyndns-ip.com', - database: 'comercial', - port: '1444', - dialect: 'mssql' - } -} -module.exports = connection; \ No newline at end of file diff --git a/views/layout.jade b/views/layout.jade index 21e3a86..ee156d4 100644 --- a/views/layout.jade +++ b/views/layout.jade @@ -19,7 +19,6 @@ html link(src="http://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous") body .container - script(src='//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js') script(src='//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js') block content diff --git a/views/map.jade b/views/map.jade index f85d6d2..777cde9 100644 --- a/views/map.jade +++ b/views/map.jade @@ -3,11 +3,9 @@ block content br .container .row - .col.col-lg-2 - | Codigo: #{codigo} - .col.col-lg-3 - | Consumidor: #{consumidor} .col.col-lg-3 + | #{consumidor} + .col.col-lg-2 input.form-control(type='text', id="nome", placeholder='Digite o nome') .col.col-lg-1 input.btn.btn-primary(type='button', value='Procura', onclick=' relocate_home()') @@ -38,7 +36,7 @@ block content "Google": L.tileLayer('http://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}', { attribution: 'google' }) - }, {'Ocorrências': drawnItems, 'Redes': wmsLayer}, { position: 'topright', collapsed: false }).addTo(map); + }, {'Ocorrências': drawnItems, 'Redes': wmsLayer}, { position: 'topright', collapsed: true }).addTo(map); var marker = L.marker([#{lat},#{lng}]).addTo(map); marker.bindPopup("#{codigo}
#{consumidor}").openPopup(); -- libgit2 0.21.2