|
|
@@ -5,7 +5,6 @@ var http = require("http")
|
|
|
,Url = require("./url.js").Url
|
|
|
,config = require("../config.js")
|
|
|
,sessionManager = require("./session.js").SessionManager
|
|
|
- ,Slack = require("./slack.js").Slack
|
|
|
,slackManager = require("./slackManager.js").SlackManager
|
|
|
,FaviconWriter = require("./faviconWriter.js").FaviconWriter;
|
|
|
|
|
|
@@ -62,56 +61,25 @@ Server.prototype.onListen = function() {
|
|
|
console.log("onListen");
|
|
|
};
|
|
|
|
|
|
-function redirectToSlackAuth(res) {
|
|
|
- res.writeHeader("302", {
|
|
|
- Location: "https://slack.com/oauth/authorize"
|
|
|
- +"?client_id=" +config.login.slack.clientId
|
|
|
- +"&scope=" +slackManager.getScope().join(",")
|
|
|
- +"&redirect_uri=" +config.rootUrl
|
|
|
- });
|
|
|
- res.end();
|
|
|
-}
|
|
|
+Server.prototype.execTemplate = function(template, req, res) {
|
|
|
+ var resp = template.exec(req, res);
|
|
|
+ if (resp && resp.body) {
|
|
|
+ if (resp.status)
|
|
|
+ res.writeHeader(resp.status);
|
|
|
+ res.end(resp.body);
|
|
|
+ }
|
|
|
+ // else something is running asynchronously, let template close request later..
|
|
|
+};
|
|
|
|
|
|
Server.prototype.onRequest = function(req, res) {
|
|
|
req.reqT = Date.now();
|
|
|
req.cookies = Server.parseCookies(req);
|
|
|
req.session = sessionManager.forRequest(req);
|
|
|
- req.account = req.session ? AccountManager.forId(req.session.accountId);
|
|
|
+ //TODO req.account = req.session ? AccountManager.forId(req.session.accountId);
|
|
|
req.urlObj = new Url(req.url);
|
|
|
|
|
|
if (req.urlObj.isTemplate() && req.urlObj.template.needLogin === false) {
|
|
|
- var resp = req.urlObj.template.exec(req, res);
|
|
|
- res.writeHeader(resp.status || 200);
|
|
|
- res.end(resp.body);
|
|
|
- return;
|
|
|
- } else if (!req.session || !req.session.slackToken) {
|
|
|
- if (req.urlObj.queryTokens.code) {
|
|
|
- Slack.getUserMail(req.urlObj.queryTokens.code, config.rootUrl, (token) => {
|
|
|
- if (token) {
|
|
|
- req.account = AccountManager.fromSlackEmail()
|
|
|
- req.session = sessionManager.lazyForRequest(req);
|
|
|
- req.session.setSlackToken(req.reqT, token);
|
|
|
- res.writeHeader("302", {
|
|
|
- Location: config.rootUrl
|
|
|
- ,"Set-Cookie": "sessID="+req.session.sessId
|
|
|
- });
|
|
|
- sessionManager.saveSession(req.session);
|
|
|
- res.end();
|
|
|
- } else {
|
|
|
- redirectToSlackAuth(res);
|
|
|
- }
|
|
|
- });
|
|
|
- } else {
|
|
|
- res.writeHeader("302", {
|
|
|
- Location: "login"
|
|
|
- });
|
|
|
- res.end();
|
|
|
- }
|
|
|
- } else if (req.urlObj.isTemplate()) {
|
|
|
- var resp = req.urlObj.template.exec(req, res);
|
|
|
- res.writeHeader(resp.status || 200);
|
|
|
- res.end(resp.body);
|
|
|
- return;
|
|
|
+ return this.execTemplate(req.urlObj.template, req, res);
|
|
|
} else if (req.urlObj.isPublic()) {
|
|
|
if (!config.isDebug)
|
|
|
res.setHeader('Cache-Control', 'private, max-age=' +15 * 60);
|
|
|
@@ -120,6 +88,11 @@ 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) {
|
|
|
+ res.writeHeader("302", { Location: "login" });
|
|
|
+ res.end();
|
|
|
+ } else if (req.urlObj.isTemplate()) {
|
|
|
+ return this.execTemplate(req.urlObj.template, req, res);
|
|
|
} else if (req.urlObj.match(["favicon.png"])) {
|
|
|
if (!config.isDebug)
|
|
|
res.setHeader('Cache-Control', 'private, max-age=' +15 * 60);
|