| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- const config = require("../config.js")
- ,Slack = require("../src/slack.js").Slack
- ,GoogleOAuth = require("../src/googleOAuth.js").GoogleOAuth
- ,FacebookOAuth = require("../src/facebookOAuth.js").FacebookOAuth
- ,slackManager = require("../src/slackManager.js").SlackManager
- ,accountManager = require("../src/accounts.js").accountManager
- ,sessionManager = require("../src/session.js").SessionManager
- ,templates = require('./_templates.js');
- function checkTokens(service, req, cb) {
- switch (service) {
- case "slack":
- if (req.urlObj.queryTokens.code) {
- Slack.getUserId(req.urlObj.queryTokens.code, config.login.slack.redirect_uri, (id) => {
- if (id) {
- accountManager.fromSlackIdAuth(id, (account) => {
- if (account) {
- cb(account);
- } else {
- var account = accountManager.createAccount();
- account.authSlackUserEmailAndTeam = id;
- accountManager.save(account, () => { cb(account); });
- }
- });
- } else {
- cb(null);
- }
- });
- } else {
- cb(null);
- }
- break;
- case "google":
- if (req.urlObj.queryTokens.code) {
- GoogleOAuth.getUserId(req.urlObj.queryTokens.code, (id) => {
- if (id) {
- accountManager.fromGoogleIdAuth(id, (account) => {
- if (account) {
- cb(account);
- } else {
- var account = accountManager.createAccount();
- account.authGoogleUserId = id;
- accountManager.save(account, () => { cb(account); });
- }
- });
- } else {
- cb(null);
- }
- });
- } else {
- cb(null);
- }
- break;
- case "facebook":
- if (req.urlObj.queryTokens.code) {
- FacebookOAuth.getUserId(req.urlObj.queryTokens.code[0], (id) => {
- if (id) {
- accountManager.fromFacebookIdAuth(id, (account) => {
- if (account) {
- cb(account);
- } else {
- var account = accountManager.createAccount();
- account.authFacebookUserId = id;
- accountManager.save(account, () => { cb(account); });
- }
- });
- } else {
- cb(null);
- }
- });
- } else {
- cb(null);
- }
- break;
- default:
- cb(null);
- break;
- }
- }
- function makeLoginPage() {
- const
- slackUri = config.login.slack.requestLoginUri
- +"?client_id=" +config.login.slack.clientId
- +"&scope=" +slackManager.getAuthScope().join(',')
- +"&redirect_uri=" +config.login.slack.redirect_uri,
- googleUri = config.login.google.requestLoginUri
- +"?client_id=" +config.login.google.clientId
- +"&scope=" +(["openid", "email", "profile"]).join("%20")
- +"&redirect_uri=" +config.login.google.redirect_uri
- +"&response_type=code"
- facebookUri = config.login.facebook.requestLoginUri
- +"?client_id=" +config.login.facebook.clientId
- +"&redirect_uri=" +config.login.facebook.redirect_uri;
- return templates.header("Mimou - login", ["login.css"])
- +`<div class="services"><h1>Login</h1>`
- +`<a href="${googleUri}"><img src="https://developers.google.com/identity/images/btn_google_signin_light_normal_web.png" alt="Sign in with Google" class="attempt-right"></a>`
- +`<a href="${facebookUri}"><img src="${config.rootUrl}btn_facebook_connect.png" alt="Log in with facebook"/></a>`
- +`<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>`
- +`</div>`
- +templates.footer();
- }
- module.exports.match = function(url) {
- if (url.urlParts.length === 1) {
- return true;
- } else if (url.urlParts.length === 2 && Object.keys(config.login).indexOf(url.urlParts[1]) >= 0) {
- return true;
- }
- return false;
- };
- module.exports.exec = function(req, res) {
- if (!req.urlObj.urlParts[1]) {
- res.end(makeLoginPage());
- } else {
- checkTokens(req.urlObj.urlParts[1], req, (account) => {
- if (account) {
- req.account = account;
- req.session = sessionManager.lazyForRequest(req);
- req.session.setAccountId(req.reqT, account.id);
- res.writeHeader("302", {
- Location: config.rootUrl
- ,"Set-Cookie": "sessID="+req.session.sessId
- });
- sessionManager.saveSession(req.session);
- res.end();
- } else {
- res.end(makeLoginPage());
- }
- });
- }
- };
- module.exports.needLogin = false;
|