Sotaro KARASAWA 11 лет назад
Родитель
Сommit
987ff4f186
5 измененных файлов с 43 добавлено и 6 удалено
  1. 3 3
      app.js
  2. 2 0
      form/index.js
  3. 10 0
      form/invited.js
  4. 0 1
      lib/mailer.js
  5. 28 2
      models/user.js

+ 3 - 3
app.js

@@ -74,6 +74,8 @@ async.series([
   }, function (next) {
   }, function (next) {
     var config = app.set('config');
     var config = app.set('config');
 
 
+    app.set('mailer', require('./lib/mailer')(app));
+
     models = require('./models')(app);
     models = require('./models')(app);
     models.Config = configModel;
     models.Config = configModel;
 
 
@@ -92,7 +94,7 @@ async.series([
       req.session.cookie.expires = new Date(Date.now() + days);
       req.session.cookie.expires = new Date(Date.now() + days);
       req.session.cookie.maxAge = days;
       req.session.cookie.maxAge = days;
 
 
-      req.baseUrl = (req.headers['x-forwarded-proto'] == 'https' ? 'https' : req.protocol) + "://" + req.get('host');
+      config.crowi['app:url'] = req.baseUrl = (req.headers['x-forwarded-proto'] == 'https' ? 'https' : req.protocol) + "://" + req.get('host');
       res.locals({
       res.locals({
         req: req,
         req: req,
         baseUrl: req.baseUrl,
         baseUrl: req.baseUrl,
@@ -108,8 +110,6 @@ async.series([
         },
         },
       });
       });
 
 
-      app.set('mailer', require('./lib/mailer')(app));
-
       next();
       next();
     });
     });
 
 

+ 2 - 0
form/index.js

@@ -1,5 +1,6 @@
 exports.login = require('./login');
 exports.login = require('./login');
 exports.register = require('./register');
 exports.register = require('./register');
+exports.invited = require('./invited');
 exports.revision = require('./revision');
 exports.revision = require('./revision');
 exports.me = {
 exports.me = {
   user: require('./me/user'),
   user: require('./me/user'),
@@ -12,4 +13,5 @@ exports.admin = {
   aws: require('./admin/aws'),
   aws: require('./admin/aws'),
   google: require('./admin/google'),
   google: require('./admin/google'),
   fb: require('./admin/fb'),
   fb: require('./admin/fb'),
+  userInvite: require('./admin/userInvite'),
 };
 };

+ 10 - 0
form/invited.js

@@ -0,0 +1,10 @@
+'use strict';
+
+var form = require('express-form')
+  , field = form.field;
+
+module.exports = form(
+  field('invitedForm.username').required().is(/^[\da-zA-Z\-_]+$/),
+  field('invitedForm.password').required().is(/^[\da-zA-Z@#$%-_&\+\*\?]{6,64}$/)
+);
+

+ 0 - 1
lib/mailer.js

@@ -91,7 +91,6 @@ module.exports = function(app) {
     mc = mailConfig;
     mc = mailConfig;
 
 
     mc.to      = c.to;
     mc.to      = c.to;
-    mc.to      = 'Sotaro <sotarok@crocos.co.jp>'; // for test
     mc.from    = c.from || mailConfig.from;
     mc.from    = c.from || mailConfig.from;
     mc.text    = c.text;
     mc.text    = c.text;
     mc.subject = c.subject || mailConfig.subject;
     mc.subject = c.subject || mailConfig.subject;

+ 28 - 2
models/user.js

@@ -6,6 +6,7 @@ module.exports = function(app, models) {
     , async = require('async')
     , async = require('async')
     , config = app.set('config')
     , config = app.set('config')
     , ObjectId = mongoose.Schema.Types.ObjectId
     , ObjectId = mongoose.Schema.Types.ObjectId
+    , mailer = app.set('mailer')
 
 
     , STATUS_REGISTERED = 1
     , STATUS_REGISTERED = 1
     , STATUS_ACTIVE     = 2
     , STATUS_ACTIVE     = 2
@@ -377,10 +378,35 @@ module.exports = function(app, models) {
         }
         }
 
 
         if (toSendEmail) {
         if (toSendEmail) {
-          debug('send Email here');
+          // TODO: メール送信部分のロジックをサービス化する
+          async.each(
+            createdUserList,
+            function(user, next) {
+              mailer.send({
+                  to: user.email,
+                  subject: 'Invitation to ' + config.crowi['app:title'],
+                  text: 'Hi, ' + user.email + '\n\n'
+                    + 'You are invited to our Wiki, you can log in with following account:\n\n'
+                    + 'Email: ' + user.email + '\n'
+                    + 'Password: ' + user.password
+                    + '\n (This password was auto generated. Update required at the first time you logging in)\n'
+                    + '\n'
+                    + 'We are waiting for you!\n'
+                    + config.crowi['app:url']
+                },
+                function (err, s) {
+                  debug('completed to send email: ', err, s);
+                  next();
+                }
+              );
+            },
+            function(err) {
+              debug('Sending invitation email completed.', err);
+            }
+          );
         }
         }
 
 
-        debug("createdUserList!!! ", createdUserList);
+        debug('createdUserList!!! ', createdUserList);
         return callback(null, createdUserList);
         return callback(null, createdUserList);
       }
       }
     );
     );