text: const express = require('express');
  const router = express.Router();
  const request = require('request');
  const config = require('../config');
  
  router.get('/', function(req, res) {
    res.setLocale(config.locale);
    res.render('index', { community: config.community,
                          tokenRequired: !!config.inviteToken,
                          recaptchaSiteKey: config.recaptchaSiteKey });
  });
  
  router.post('/invite', function(req, res) {
    if (req.body.email && (!config.inviteToken || (!!config.inviteToken && req.body.token === config.inviteToken))) {
      function doInvite() {
        request.post({
            url: 'https://'+ config.slackUrl + '/api/users.admin.invite',
            form: {
              email: req.body.email,
              token: config.slacktoken,
              set_active: true
            }
          }, function(err, httpResponse, body) {
            // body looks like:
            //   {"ok":true}
            //       or
            //   {"ok":false,"error":"already_invited"}
            if (err) { return res.send('Error:' + err); }
            body = JSON.parse(body);
            if (body.ok) {
              res.render('result', {
                community: config.community,
                message: '성공하였습니다! &ldquo;'+ req.body.email +'&rdquo;에서 Slack 초대장을 확인하세요.'
              });
            } else {
              var error = body.error;
              if (error === 'already_invited' || error === 'already_in_team') {
                res.render('result', {
                  community: config.community,
                  message: '성공하였습니다! 이미 초대장을 발송했습니다..<br>' +
                          '<a href="https://'+ config.slackUrl +'">'+ config.community +'</a>에 방문해 보세요.'
                });
                return;
              } else if (error === 'invalid_email') {
                error = '입력하신 이메일은 유효하지 않은 이메일입니다.';
              } else if (error === 'invalid_auth') {
                error = '문제가 있습니다. 시스템 관리자에게 문의하십시오.';
              }
  
              res.render('result', {
                community: config.community,
                message: 'Failed! ' + error,
                isFailed: true
              });
            }
          });
      }
      if (!!config.recaptchaSiteKey && !!config.recaptchaSecretKey) {
        request.post({
          url: 'https://www.google.com/recaptcha/api/siteverify',
          form: {
            response: req.body['g-recaptcha-response'],
            secret: config.recaptchaSecretKey
          }
        }, function(err, httpResponse, body) {
          if (typeof body === "string") {
            body = JSON.parse(body);
          }
  
          if (body.success) {
            doInvite();
          } else {
            var error = 'Invalid captcha.';
            res.render('result', {
              community: config.community,
              message: 'Failed! ' + error,
              isFailed: true
            });
          }
        });
      } else {
        doInvite();
      }
    } else {
      const errMsg = [];
      if (!req.body.email) {
        errMsg.push('your email is required');
      }
  
      if (!!config.inviteToken) {
        if (!req.body.token) {
          errMsg.push('valid token is required');
        }
  
        if (req.body.token && req.body.token !== config.inviteToken) {
          errMsg.push('the token you entered is wrong');
        }
      }
  
      res.render('result', {
        community: config.community,
        message: 'Failed! ' + errMsg.join(' and ') + '.',
        isFailed: true
      });
    }
  });
  
  module.exports = router;
  