'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'), domains = require('../domains.js'), fs = require('fs'), hat = require('../hat.js'), 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 AUDIT_SOURCE = { ip: '1.2.3.4' }; const ADMIN = { id: null, username: 'admin123', password: 'secret123', email: 'admin@me.com', fallbackEmail: 'admin@me.com', salt: 'morton', createdAt: 'sometime back', resetToken: '', displayName: '', groupIds: [], role: 'owner', source: '', avatar: constants.AVATAR_GRAVATAR, active: true, }; const USER = { id: 'uid-userid', // ldap logic relies on uid prefix username: 'uuid213', password: '123secret', email: 'safe@me.com', fallbackEmail: 'safefallback@me.com', role: 'user', salt: 'morton', createdAt: 'sometime back', resetToken: hat(256), groupIds: [], displayName: '', source: '', permissions: null, 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: MANIFEST, containerId: 'someid', portBindings: null, accessRestriction: null, memoryLimit: 0, mailboxDomain: DOMAIN.domain, alternateDomains: [], aliasDomains: [] }; exports = module.exports = { createTree, domainSetup, setup, cleanup, MOCK_API_SERVER_ORIGIN: 'http://localhost:6060', DASHBOARD_DOMAIN: 'test.example.com', DASHBOARD_FQDN: 'my.test.example.com', APP, ADMIN, AUDIT_SOURCE, DOMAIN, MANIFEST, USER, APPSTORE_TOKEN: 'atoken', MAILBOX_NAME: 'support', MAILBOX: `support@${DOMAIN.domain}`, ALIAS_NAME: 'alsosupport', ALIAS: `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.MOCK_API_SERVER_ORIGIN), settings.setDashboardLocation.bind(null, exports.DASHBOARD_DOMAIN, exports.DASHBOARD_FQDN), settings.initCache, blobs.initSecrets, domains.add.bind(null, DOMAIN.domain, DOMAIN, AUDIT_SOURCE), ], done); } function setup(done) { async.series([ domainSetup, async function createOwner() { const result = await users.createOwner(ADMIN.email, ADMIN.username, ADMIN.password, ADMIN.displayName, AUDIT_SOURCE); ADMIN.id = result.id; }, 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.APPSTORE_TOKEN), // appstore token async function createUser() { const result = await users.add(USER.email, USER, AUDIT_SOURCE); USER.id = result.id; }, (done) => mailboxdb.addMailbox(exports.MAILBOX_NAME, DOMAIN.domain, { ownerId: USER.id, ownerType: mail.OWNERTYPE_USER, active: true }, done), (done) => mailboxdb.setAliasesForName(exports.MAILBOX_NAME, DOMAIN.domain, [ { name: exports.ALIAS_NAME, domain: DOMAIN.domain} ], done), tasks.stopAllTasks, ], done); } function cleanup(done) { nock.cleanAll(); mailer._mailQueue = []; async.series([ database._clear, database.uninitialize ], done); }