1
0
Эх сурвалжийг харах

[merge] devel
[add] port in config
[bugfix] cookie path

B Thibault 8 жил өмнө
parent
commit
58e6bcf53d

+ 34 - 4
srv/config.js.exple

@@ -1,7 +1,37 @@
 
+const rootDomain = "https://mimouchat.knacki.info"
+    ,rootUrl = rootDomain +"/";
+
 module.exports = {
-    clientId: "slack_client_id"
-    ,clientSecret: "slack_client_secret"
-    ,rootUrl: "redirect_url"
-    ,isDebug: false
+    services: {
+        Slack: {
+            clientId: "XXXXXXXXXXXX.XXXXXXXXXXXX"
+            ,clientSecret: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+        }
+    }
+    ,login: {
+        slack: {
+            clientId: "XXXXXXXXXXXX.XXXXXXXXXXXX"
+            ,clientSecret: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+            ,requestLoginUri: "https://slack.com/oauth/authorize"
+            ,redirect_uri: rootUrl +'login/slack'
+        }
+        ,google: {
+            clientId: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
+            ,clientSecret: "-XXXXXXXXXXXXXXXXXXXXXXX"
+            ,requestLoginUri: "https://accounts.google.com/o/oauth2/v2/auth"
+            ,redirect_uri: rootUrl +'login/google'
+            ,rootDomain: rootDomain
+        }
+        ,facebook: {
+            clientId: XXXXXXXXXXXXXXX
+            ,clientSecret: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+            ,requestLoginUri: "https://www.facebook.com/v2.9/dialog/oauth"
+            ,redirect_uri: rootUrl +'login/facebook'
+        }
+    }
+    ,rootUrl: rootUrl
+    ,isDebug: true
+    ,port: 8084
 };
+

+ 1 - 1
srv/main.js

@@ -6,7 +6,7 @@ require('./src/database.js').database.initDb((err) => {
     if (err) {
         console.error("FATAL: cannot init database ", err);
     } else {
-        var server = new (require("./src/httpServ.js").HttpServ)(3002);
+        var server = new (require("./src/httpServ.js").HttpServ)();
     }
 });
 

+ 7 - 0
srv/src/accounts.js

@@ -26,6 +26,13 @@ AccountManager.prototype.fromSlackIdAuth = function(id, cb) {
     });
 };
 
+AccountManager.prototype.fromId = function(id, cb) {
+    var self = this;
+    db.database.queryFirst(TABLE_NAME, { id: id }, (err, result) => {
+        cb(self.fromDb(result));
+    });
+};
+
 AccountManager.prototype.fromDb = function(dbResult) {
     if (!dbResult)
         return null;

+ 22 - 10
srv/src/httpServ.js

@@ -6,11 +6,12 @@ const http = require("http")
     ,config = require("../config.js")
     ,sessionManager = require("./session.js").SessionManager
     ,MultiChatManager = require("./multichatManager.js").MultiChatManager
+    ,AccountManager = require("./accounts.js").accountManager
     ,Slack = require("./slack.js").Slack
     ,slackManager = require("./slackManager.js").SlackManager
     ,FaviconWriter = require("./faviconWriter.js").FaviconWriter;
 
-function Server(port) {
+function Server() {
     var ctx = this;
 
     this.httpServ = http.createServer(function(req, res) {
@@ -20,7 +21,7 @@ function Server(port) {
         });
         ctx.onRequest(req, res);
     });
-    this.httpServ.listen(port, ctx.onListen);
+    this.httpServ.listen(config.port, ctx.onListen);
 }
 
 Server.parseCookies = function(req) {
@@ -93,13 +94,7 @@ function recursiveGet(url, cb, redirectLoop) {
     });
 };
 
-Server.prototype.onRequest = function(req, res) {
-    req.reqT = Date.now();
-    req.cookies = Server.parseCookies(req);
-    req.session = sessionManager.forRequest(req);
-    //TODO req.account = req.session ? AccountManager.forId(req.session.accountId);
-    req.urlObj = new Url(req.url);
-
+Server.prototype.execRequest = function(req, res) {
     if (req.urlObj.isTemplate() && req.urlObj.template.needLogin === false) {
         return this.execTemplate(req.urlObj.template, req, res);
     } else if (req.urlObj.isPublic()) {
@@ -110,7 +105,7 @@ Server.prototype.onRequest = function(req, res) {
         req.urlObj.getReadStream().pipe(res, { end: true });
         sessionManager.saveSession(req.session);
         return; // async pipe will close when finished
-    } else if (!req.session) {
+    } else if (!req.account) {
         res.writeHeader("302", { Location: "login" });
         res.end();
     } else if (req.urlObj.isTemplate()) {
@@ -386,5 +381,22 @@ Server.prototype.onRequest = function(req, res) {
     }
 };
 
+Server.prototype.onRequest = function(req, res) {
+    req.reqT = Date.now();
+    req.cookies = Server.parseCookies(req);
+    req.session = sessionManager.forRequest(req);
+    req.urlObj = new Url(req.url);
+    req.account = null;
+    if (req.session) {
+        var self = this;
+        AccountManager.fromId(req.session.accountId, (acc) => {
+            req.account = acc;
+            self.execRequest(req, res);
+        });
+    } else {
+        this.execRequest(req, res);
+    }
+};
+
 module.exports.HttpServ = Server;
 

+ 0 - 26
srv/src/slack.js

@@ -80,32 +80,6 @@ Slack.prototype.onRequest = function() {
     }
 };
 
-function httpsRequest(url, cb) {
-    try {
-        https.get(url, (res) => {
-            if (res.statusCode !== 200) {
-                cb(res.statusCode, null);
-                return;
-            }
-            var body = [];
-            res.on('data', (chunk) => {
-                body.push(chunk);
-            });
-            res.on('end', () => {
-                body = Buffer.concat(body).toString();
-                try {
-                    body = JSON.parse(body);
-                } catch (e) {}
-                cb && cb(res.statusCode, body);
-            });
-        });
-    }
-    catch (e) {
-        console.error("Error in https request: ", e);
-        cb && cb(0, null);
-    }
-}
-
 Slack.prototype.connect = function(cb) {
     var _this = this;
 

+ 2 - 2
srv/template/login.js

@@ -125,8 +125,8 @@ module.exports.exec = function(req, res) {
                 req.session = sessionManager.lazyForRequest(req);
                 req.session.setAccountId(req.reqT, account.id);
                 res.writeHeader("302", {
-                    Location: config.rootUrl
-                ,"Set-Cookie": "sessID="+req.session.sessId
+                    Location: config.rootUrl,
+                    "Set-Cookie": "sessID="+req.session.sessId +'; Path=/'
                 });
                 sessionManager.saveSession(req.session);
                 res.end();