login.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const config = require("../config.js")
  2. ,Slack = require("../src/slack.js").Slack
  3. ,slackManager = require("../src/slackManager.js").SlackManager
  4. ,accountManager = require("../src/accounts.js").accountManager
  5. ,templates = require('./_templates.js');
  6. function checkTokens(service, req, cb) {
  7. switch (service) {
  8. case "slack":
  9. if (req.urlObj.queryTokens.code) {
  10. Slack.getUserMail(req.urlObj.queryTokens.code, config.login.slack.redirect_uri, (email) => {
  11. cb(email);
  12. });
  13. } else {
  14. cb(null);
  15. }
  16. break;
  17. default:
  18. cb(null);
  19. break;
  20. }
  21. }
  22. function makeLoginPage() {
  23. var slackUri = "https://slack.com/oauth/authorize"
  24. +"?client_id=" +config.login.slack.clientId
  25. +"&scope=" +slackManager.getAuthScope().join(',')
  26. +"&redirect_uri=" +config.login.slack.redirect_uri;
  27. return templates.header("Mimou - login", ["login.css"])
  28. +`<div class="services"><h1>Login</h1>`
  29. +`<a href="${slackUri}"><img src="https://platform.slack-edge.com/img/sign_in_with_slack.png" srcset="https://platform.slack-edge.com/img/sign_in_with_slack.png 1x, https://platform.slack-edge.com/img/sign_in_with_slack@2x.png 2x" /></a>`
  30. +`</div>`
  31. +templates.footer();
  32. }
  33. module.exports.match = function(url) {
  34. if (url.urlParts.length === 1) {
  35. return true;
  36. } else if (url.urlParts.length === 2 && Object.keys(config.login).indexOf(url.urlParts[1]) >= 0) {
  37. return true;
  38. }
  39. return false;
  40. };
  41. module.exports.exec = function(req, res) {
  42. if (!req.urlObj.urlParts[1]) {
  43. res.end(makeLoginPage());
  44. } else {
  45. checkTokens(req.urlObj.urlParts[1], req, (email) => {
  46. if (email) {
  47. req.account = accountManager.fromSlackEmail(email)
  48. req.session = sessionManager.lazyForRequest(req);
  49. req.session.setSlackToken(req.reqT, token);
  50. res.writeHeader("302", {
  51. Location: config.rootUrl
  52. ,"Set-Cookie": "sessID="+req.session.sessId
  53. });
  54. sessionManager.saveSession(req.session);
  55. res.end();
  56. } else {
  57. res.end(makeLoginPage());
  58. }
  59. });
  60. }
  61. };
  62. module.exports.needLogin = false;