indr/ember-seneca-auth

View on GitHub
scripts/server.js

Summary

Maintainability
A
3 hrs
Test Coverage
const assert = require('assert');
const fs = require('fs');
const seneca = require('seneca');
const bodyParser = require('body-parser');
const createApplication = require('express');

const tmpDir = __dirname + '/../tmp';
const resetTokenUuid = tmpDir + '/resetToken.uuid';

module.export = function () {
  return {
    app: null,
    seneca: null,

    start: start,
    stop: stop
  }
};

function start(done) {
  const self = this;
  done = done || noop;

  const options = require('./options') || {};
  console.log('Options: ', options);
  console.log('tmp dir: ' + tmpDir);

  const si = self.seneca = seneca()
    .use('entity')
    .use('user', options.user || {})
    .use('auth')
    .use('web')
    .add('role:api,route:ping', function (args, done) {
      var si = this;
      fs.readFile(resetTokenUuid, {encoding: 'utf8'}, function (err, resetToken) {
        if (err) resetToken = err;
        done(null, {
          'date': new Date(),
          'seneca': si.version,
          'tmpDir': tmpDir,
          'resetToken': resetToken,
          'ok': true
        });
      });
    });


    si.ready(function (err) {
      assert(!err);

      si.act('role:web', {
        use: {
          prefix: '/',
          pin: 'role:api,route:*',
          map: {ping: true}
        }
      });

      const app = createApplication()
        .use(bodyParser.json())
        .use(si.export('web'));

      self.app = app.listen(3000);

      si.wrap('role:user,cmd:create_reset', function (args, done) {
        this.prior(args, function (err, data) {
          if (err) return done(err, data);
          if (!data.ok) {
            return done(null, data);
          }

          const token = data.reset.token;
          console.log('Captured reset token: ' + token);
          fs.writeFile(resetTokenUuid, token, function (err) {
            if (err) return done(err, data);
            return done(null, data);
          });
        });
      });
      done();
    });
}

function stop(done) {
  const self = this;
  done = done || noop;

  self.app.close(function () {
    self.seneca.close(done);
  });
}

function noop() {
}

const server = module.export();
server.start(function () {

  server.seneca.act('role: user, cmd: register', {
    nick: 'nu1',
    name: 'u1',
    email: 'u1@example.com',
    password: 'pu1',
    repeat: 'pu1',
    active: true
  });
  server.seneca.act('role: user, cmd: register', {
    nick: 'nu2',
    name: 'u2',
    email: 'u2@example.com',
    password: 'pu2',
    repeat: 'pu2',
    active: true
  });
});