'use strict'; const appdb = require('../appdb.js'), apps = require('../apps.js'), async = require('async'), blobs = require('../blobs.js'), constants = require('../constants.js'), database = require('../database.js'), delay = require('delay'), domains = require('../domains.js'), expect = require('expect.js'), fs = require('fs'), mail = require('../mail.js'), mailboxdb = require('../mailboxdb.js'), mailer = require('../mailer.js'), nock = require('nock'), path = require('path'), rimraf = require('rimraf'), settings = require('../settings.js'), settingsdb = require('../settingsdb.js'), tasks = require('../tasks.js'), users = require('../users.js'); const manifest = { 'id': 'io.cloudron.test', 'author': 'The Presidents Of the United States Of America', 'title': 'test title', 'description': 'test description', 'tagline': 'test rocks', 'website': 'http://test.cloudron.io', 'contactEmail': 'test@cloudron.io', 'version': '0.1.0', 'manifestVersion': 1, 'dockerImage': 'cloudron/test:25.2.0', 'healthCheckPath': '/', 'httpPort': 7777, 'tcpPorts': { 'ECHO_SERVER_PORT': { 'title': 'Echo Server Port', 'description': 'Echo server', 'containerPort': 7778 } }, 'addons': { 'oauth': { }, 'redis': { }, 'mysql': { }, 'postgresql': { } } }; const domain = { domain: 'example.com', zoneName: 'example.com', provider: 'noop', config: {}, fallbackCertificate: null, tlsConfig: { provider: 'fallback' }, wellKnown: null }; const auditSource = { ip: '1.2.3.4' }; const admin = { id: null, username: 'testadmin', password: 'secret123', email: 'admin@me.com', fallbackEmail: 'admin@me.com', salt: 'morton', createdAt: 'sometime back', resetToken: '', displayName: 'Administrator', groupIds: [], role: 'owner', source: '', avatar: constants.AVATAR_GRAVATAR, active: true, }; const user = { id: null, username: 'user', password: '123secret', email: 'user@me.com', fallbackEmail: 'user@me.com', role: 'user', salt: 'morton', createdAt: 'sometime back', resetToken: '', groupIds: [], displayName: 'Normal User', source: '', avatar: constants.AVATAR_NONE, active: true, }; const app = { id: 'appid', appStoreId: 'appStoreId', installationState: apps.ISTATE_PENDING_INSTALL, runState: 'running', location: 'applocation', domain: domain.domain, fqdn: domain.domain + '.' + 'applocation', manifest, containerId: 'someid', portBindings: null, accessRestriction: null, memoryLimit: 0, mailboxDomain: domain.domain, alternateDomains: [], aliasDomains: [] }; exports = module.exports = { createTree, domainSetup, setup, cleanup, checkMails, clearMailQueue, mockApiServerOrigin: 'http://localhost:6060', dashboardDomain: 'test.example.com', dashboardFqdn: 'my.test.example.com', app, admin, auditSource, domain, manifest, user, appstoreToken: 'atoken', mailboxName: 'support', mailbox: `support@${domain.domain}`, mailAliasName: 'alsosupport', mailAlias: `alsosupport@${domain.domain}` }; function createTree(root, obj) { rimraf.sync(root); fs.mkdirSync(root, { recursive: true }); function createSubTree(tree, curpath) { for (var key in tree) { if (typeof tree[key] === 'string') { if (key.startsWith('link:')) { fs.symlinkSync(tree[key], path.join(curpath, key.slice(5))); } else { fs.writeFileSync(path.join(curpath, key), tree[key], 'utf8'); } } else { fs.mkdirSync(path.join(curpath, key)); createSubTree(tree[key], path.join(curpath, key)); } } } createSubTree(obj, root); } function domainSetup(done) { nock.cleanAll(); async.series([ database.initialize, database._clear, settings._setApiServerOrigin.bind(null, exports.mockApiServerOrigin), settings.setDashboardLocation.bind(null, exports.dashboardDomain, exports.dashboardFqdn), settings.initCache, blobs.initSecrets, domains.add.bind(null, domain.domain, domain, auditSource), ], done); } function setup(done) { async.series([ domainSetup, async function createOwner() { const result = await users.createOwner(admin.email, admin.username, admin.password, admin.displayName, auditSource); admin.id = result; }, appdb.add.bind(null, app.id, app.appStoreId, app.manifest, app.location, app.domain, app.portBindings, app), settingsdb.set.bind(null, settings.CLOUDRON_TOKEN_KEY, exports.appstoreToken), // appstore token async function createUser() { const result = await users.add(user.email, user, auditSource); user.id = result; }, (done) => mailboxdb.addMailbox(exports.mailboxName, domain.domain, { ownerId: user.id, ownerType: mail.OWNERTYPE_USER, active: true }, done), (done) => mailboxdb.setAliasesForName(exports.mailboxName, domain.domain, [ { name: exports.mailAliasName, domain: domain.domain} ], done), tasks.stopAllTasks, ], done); } function cleanup(done) { nock.cleanAll(); mailer._mailQueue = []; async.series([ database._clear, database.uninitialize ], done); } function clearMailQueue() { mailer._mailQueue = []; } async function checkMails(number) { await delay(1000); expect(mailer._mailQueue.length).to.equal(number); clearMailQueue(); }