diff --git a/bin/verdaccio b/bin/verdaccio index d2316ff6d..2bcca024d 100755 --- a/bin/verdaccio +++ b/bin/verdaccio @@ -1,3 +1,3 @@ #!/usr/bin/env node -require('../lib/cli'); +require('../src/lib/cli'); diff --git a/index.js b/index.js index 3dc713f1a..7cb2c4d5c 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -module.exports = require('./lib'); +module.exports = require('./src/api/index'); /** package { "name": "verdaccio", diff --git a/lib/web/api/api.js b/lib/web/api/api.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/web/api/endpoint/dist-tags.js b/src/api/endpoint/api/dist-tags.js similarity index 95% rename from lib/web/api/endpoint/dist-tags.js rename to src/api/endpoint/api/dist-tags.js index a21bbc96e..10eaf730d 100644 --- a/lib/web/api/endpoint/dist-tags.js +++ b/src/api/endpoint/api/dist-tags.js @@ -1,7 +1,7 @@ 'use strict'; -const Middleware = require('../../middleware'); -const constant = require('../../utils/const'); +const Middleware = require('../../web/middleware'); +const constant = require('../../../webui/utils/const'); const media = Middleware.media; const expect_json = Middleware.expect_json; diff --git a/lib/web/api/endpoint/package.js b/src/api/endpoint/api/package.js similarity index 93% rename from lib/web/api/endpoint/package.js rename to src/api/endpoint/api/package.js index 87caacb0d..d760dc8bc 100644 --- a/lib/web/api/endpoint/package.js +++ b/src/api/endpoint/api/package.js @@ -3,8 +3,8 @@ const _ = require('lodash'); const createError = require('http-errors'); -const Middleware = require('../../middleware'); -const Utils = require('../../../utils'); +const Middleware = require('../../web/middleware'); +const Utils = require('../../../lib/utils'); module.exports = function(route, auth, storage, config) { const can = Middleware.allow(auth); diff --git a/lib/web/api/endpoint/ping.js b/src/api/endpoint/api/ping.js similarity index 100% rename from lib/web/api/endpoint/ping.js rename to src/api/endpoint/api/ping.js diff --git a/lib/web/api/endpoint/publish.js b/src/api/endpoint/api/publish.js similarity index 96% rename from lib/web/api/endpoint/publish.js rename to src/api/endpoint/api/publish.js index 23281418d..5239645f0 100644 --- a/lib/web/api/endpoint/publish.js +++ b/src/api/endpoint/api/publish.js @@ -4,10 +4,10 @@ const _ = require('lodash'); const Path = require('path'); const createError = require('http-errors'); -const Middleware = require('../../middleware'); -const Notify = require('../../../notify'); -const Utils = require('../../../utils'); -const constant = require('../../utils/const'); +const Middleware = require('../../web/middleware'); +const Notify = require('../../../lib/notify'); +const Utils = require('../../../lib/utils'); +const constant = require('../../../webui/utils/const'); const media = Middleware.media; const expect_json = Middleware.expect_json; diff --git a/lib/web/api/endpoint/search.js b/src/api/endpoint/api/search.js similarity index 100% rename from lib/web/api/endpoint/search.js rename to src/api/endpoint/api/search.js diff --git a/lib/web/api/endpoint/user.js b/src/api/endpoint/api/user.js similarity index 100% rename from lib/web/api/endpoint/user.js rename to src/api/endpoint/api/user.js diff --git a/lib/web/api/endpoint/whoami.js b/src/api/endpoint/api/whoami.js similarity index 100% rename from lib/web/api/endpoint/whoami.js rename to src/api/endpoint/api/whoami.js diff --git a/src/api/endpoint/index.js b/src/api/endpoint/index.js new file mode 100644 index 000000000..0bb08f1e8 --- /dev/null +++ b/src/api/endpoint/index.js @@ -0,0 +1,63 @@ +'use strict'; + +const express = require('express'); +const bodyParser = require('body-parser'); +const Middleware = require('../web/middleware'); +const match = Middleware.match; +const validate_name = Middleware.validate_name; +const validate_pkg = Middleware.validate_package; +const encodeScopePackage = Middleware.encodeScopePackage; + +const whoami = require('./api/whoami'); +const ping = require('./api/ping'); +const user = require('./api/user'); +const distTags = require('./api/dist-tags'); +const publish = require('./api/publish'); +const search = require('./api/search'); +const pkg = require('./api/package'); + +module.exports = function(config, auth, storage) { + /* eslint new-cap:off */ + const app = express.Router(); + /* eslint new-cap:off */ + + // validate all of these params as a package name + // this might be too harsh, so ask if it causes trouble + app.param('package', validate_pkg); + app.param('filename', validate_name); + app.param('tag', validate_name); + app.param('version', validate_name); + app.param('revision', validate_name); + app.param('token', validate_name); + + // these can't be safely put into express url for some reason + // TODO: For some reason? what reason? + app.param('_rev', match(/^-rev$/)); + app.param('org_couchdb_user', match(/^org\.couchdb\.user:/)); + app.param('anything', match(/.*/)); + + app.use(auth.basic_middleware()); + // app.use(auth.bearer_middleware()) + app.use(bodyParser.json({strict: false, limit: config.max_body_size || '10mb'})); + app.use(Middleware.anti_loop(config)); + + // encode / in a scoped package name to be matched as a single parameter in routes + app.use(encodeScopePackage); + + // for "npm whoami" + whoami(app); + + pkg(app, auth, storage, config); + + search(app, auth, storage); + + user(app, auth); + + distTags(app, auth, storage); + + publish(app, auth, storage, config); + + ping(app); + + return app; +}; diff --git a/lib/index.js b/src/api/index.js similarity index 67% rename from lib/index.js rename to src/api/index.js index dcee454c8..09dc85573 100644 --- a/lib/index.js +++ b/src/api/index.js @@ -3,25 +3,26 @@ const express = require('express'); const Error = require('http-errors'); const compression = require('compression'); -const Auth = require('./auth'); -const Logger = require('./logger'); -const Config = require('./config'); +const Auth = require('../lib/auth'); +const Logger = require('../lib/logger'); +const Config = require('../lib/config'); const Middleware = require('./web/middleware'); -const Cats = require('./status-cats'); -const Storage = require('./storage'); +const Cats = require('../lib/status-cats'); +const Storage = require('../lib/storage'); +const _ = require('lodash'); module.exports = function(config_hash) { + // Config Logger.setup(config_hash.logs); - const config = new Config(config_hash); const storage = new Storage(config); const auth = new Auth(config); const app = express(); - // run in production mode by default, just in case // it shouldn't make any difference anyway app.set('env', process.env.NODE_ENV || 'production'); + // Middleware const error_reporting_middleware = function(req, res, next) { res.report_error = res.report_error || function(err) { if (err.status && err.status >= 400 && err.status < 600) { @@ -46,6 +47,7 @@ module.exports = function(config_hash) { next(); }; + // Router setup app.use(Middleware.log); app.use(error_reporting_middleware); app.use(function(req, res, next) { @@ -60,7 +62,7 @@ module.exports = function(config_hash) { next(); }); - // hook for tests only + // Hook for tests only if (config._debug) { app.get('/-/_debug', function(req, res, next) { let do_gc = typeof(global.gc) !== 'undefined'; @@ -77,33 +79,39 @@ module.exports = function(config_hash) { }); } - app.use(require('./web/api/api')(config, auth, storage)); + // For npm request + app.use(require('./endpoint')(config, auth, storage)); - if (config.web && config.web.enable === false) { - app.get('/', function(req, res, next) { - next( Error[404]('web interface is disabled in the config file') ); - }); + // For WebUI & WebUI API + if (_.get(config, 'web.enable', true)) { + app.use('/', require('./web')(config, auth, storage)); + app.use('/-/verdaccio/', require('./web/api')(config, auth, storage)); } else { - app.use(require('./web/index')(config, auth, storage)); + app.get('/', function(req, res, next) { + next(Error[404]('Web interface is disabled in the config file')); + }); } + // Catch 404 app.get('/*', function(req, res, next) { - next( Error[404]('file not found') ); + next(Error[404]('File not found')); }); app.use(function(err, req, res, next) { - if (Object.prototype.toString.call(err) !== '[object Error]') { + if (_.isError(err)) { + if (err.code === 'ECONNABORT' && res.statusCode === 304) { + return next(); + } + if (typeof res.report_error !== 'function') { + // in case of very early error this middleware may not be loaded before error is generated + // fixing that + error_reporting_middleware(req, res, _.noop); + } + res.report_error(err); + } else { + // Fall to Middleware.final return next(err); } - if (err.code === 'ECONNABORT' && res.statusCode === 304) { - return next(); - } - if (typeof(res.report_error) !== 'function') { - // in case of very early error this middleware may not be loaded before error is generated - // fixing that - error_reporting_middleware(req, res, function() {}); - } - res.report_error(err); }); app.use(Middleware.final); diff --git a/lib/web/index.js b/src/api/web/api.js similarity index 55% rename from lib/web/index.js rename to src/api/web/api.js index 2f189592e..cd27830f0 100644 --- a/lib/web/index.js +++ b/src/api/web/api.js @@ -1,28 +1,26 @@ 'use strict'; -const async = require('async'); const bodyParser = require('body-parser'); const Cookies = require('cookies'); -const escape = require('js-string-escape'); const express = require('express'); -const fs = require('fs'); -const Handlebars = require('handlebars'); const marked = require('marked'); -const Search = require('../search'); +const Search = require('../../lib/search'); const Middleware = require('./middleware'); -const Utils = require('../utils'); const match = Middleware.match; const validateName = Middleware.validate_name; const validatePkg = Middleware.validate_package; const securityIframe = Middleware.securityIframe; +/* + This file include all verdaccio only API(Web UI), for npm API please see ../endpoint/ +*/ + module.exports = function(config, auth, storage) { Search.configureStorage(storage); /* eslint new-cap:off */ const app = express.Router(); /* eslint new-cap:off */ const can = Middleware.allow(auth); - let template; // validate all of these params as a package name // this might be too harsh, so ask if it causes trouble @@ -36,76 +34,6 @@ module.exports = function(config, auth, storage) { app.use(auth.cookie_middleware()); app.use(securityIframe); - Handlebars.registerPartial('entry', fs.readFileSync(require.resolve('./ui/entry.hbs'), 'utf8')); - - if (config.web && config.web.template) { - template = Handlebars.compile(fs.readFileSync(config.web.template, 'utf8')); - } else { - template = Handlebars.compile(fs.readFileSync(require.resolve('./ui/index.hbs'), 'utf8')); - } - - app.get('/', function(req, res, next) { - let base = Utils.combineBaseUrl(Utils.getWebProtocol(req), req.get('host'), config.url_prefix); - res.setHeader('Content-Type', 'text/html'); - - storage.get_local(function(err, packages) { - if (err) { - throw err; - } // that function shouldn't produce any - async.filterSeries(packages, function(pkg, cb) { - auth.allow_access(pkg.name, req.remote_user, function(err, allowed) { - setImmediate(function() { - if (err) { - cb(null, false); - } else { - cb(err, allowed); - } - }); - }); - }, function(err, packages) { - if (err) throw err; - packages.sort(function(p1, p2) { - if (p1.name < p2.name) { - return -1; - } else { - return 1; - } - }); - let json = { - packages: packages, - tagline: config.web && config.web.tagline ? config.web.tagline : '', - baseUrl: base, - username: req.remote_user.name, - }; - next(template({ - name: config.web && config.web.title ? config.web.title : 'Verdaccio', - data: escape(JSON.stringify(json)), - })); - }); - }); - }); - - // Static - app.get('/-/static/:filename', function(req, res, next) { - let file = __dirname + '/static/' + req.params.filename; - res.sendFile(file, function(err) { - if (!err) { - return; - } - if (err.status === 404) { - next(); - } else { - next(err); - } - }); - }); - - app.get('/-/logo', function(req, res, next) { - res.sendFile( config.web && config.web.logo - ? config.web.logo - : __dirname + '/static/logo-sm.png' ); - }); - app.post('/-/login', function(req, res, next) { auth.authenticate(req.body.user, req.body.pass, (err, user) => { if (!err) { diff --git a/src/api/web/index.js b/src/api/web/index.js new file mode 100644 index 000000000..8e25a720d --- /dev/null +++ b/src/api/web/index.js @@ -0,0 +1,103 @@ +'use strict'; + +const async = require('async'); +const Cookies = require('cookies'); +const escape = require('js-string-escape'); +const express = require('express'); +const fs = require('fs'); +const Handlebars = require('handlebars'); +const Search = require('../../lib/search'); +const Middleware = require('./middleware'); +const Utils = require('../../lib/utils'); +const securityIframe = Middleware.securityIframe; +/* eslint new-cap:off */ +const router = express.Router(); +const _ = require('lodash'); +const env = require('../../config/env'); + +module.exports = function(config, auth, storage) { + Search.configureStorage(storage); + + + router.use(Cookies.express()); + router.use(auth.cookie_middleware()); + router.use(securityIframe); + + Handlebars.registerPartial('entry', fs.readFileSync(require.resolve('../../webui/src/entry.hbs'), 'utf8')); + + let template; + + if (config.web && config.web.template) { + template = Handlebars.compile(fs.readFileSync(config.web.template, 'utf8')); + } else { + template = Handlebars.compile(fs.readFileSync(require.resolve('../../webui/src/index.hbs'), 'utf8')); + } + + // Static + router.get('/-/static/:filename', function(req, res, next) { + let file = `${env.APP_ROOT}/static/${req.params.filename}`; + res.sendFile(file, function(err) { + if (!err) { + return; + } + if (err.status === 404) { + next(); + } else { + next(err); + } + }); + }); + + router.get('/-/logo', function(req, res, next) { + res.sendFile(_.get(config, 'web.logo') || `${env.APP_ROOT}/static/logo-sm.png` + ); + }); + + router.get('/', function(req, res, next) { + res.setHeader('Content-Type', 'text/html'); + const base = Utils.combineBaseUrl(req.protocol, req.get('host'), config.url_prefix); + + storage.get_local(function(err, packages) { + if (err) { + throw err; + } // that function shouldn't produce any + async.filterSeries( + packages, + function(pkg, cb) { + auth.allow_access(pkg.name, req.remote_user, function(err, allowed) { + setImmediate(function() { + if (err) { + cb(null, false); + } else { + cb(err, allowed); + } + }); + }); + }, + function(err, packages) { + if (err) throw err; + + packages.sort(function(a, b) { + if (a.name < b.name) { + return -1; + } else { + return 1; + } + }); + let json = { + packages: packages, + tagline: config.web && config.web.tagline ? config.web.tagline : '', + baseUrl: base, + username: req.remote_user.name, + }; + next(template({ + name: config.web && config.web.title ? config.web.title : 'Verdaccio', + data: escape(JSON.stringify(json)), + })); + } + ); + }); + }); + + return router; +}; diff --git a/lib/web/middleware.js b/src/api/web/middleware.js similarity index 98% rename from lib/web/middleware.js rename to src/api/web/middleware.js index 80bb1649a..c9397ea07 100644 --- a/lib/web/middleware.js +++ b/src/api/web/middleware.js @@ -5,8 +5,8 @@ const crypto = require('crypto'); const _ = require('lodash'); const createError = require('http-errors'); -const utils = require('../utils'); -const Logger = require('../logger'); +const utils = require('../../lib/utils'); +const Logger = require('../../lib/logger'); module.exports.match = function match(regexp) { diff --git a/src/config/env.js b/src/config/env.js new file mode 100644 index 000000000..b928667d4 --- /dev/null +++ b/src/config/env.js @@ -0,0 +1,6 @@ +const path = require('path'); + +module.exports = { + APP_ROOT: path.resolve(__dirname, '../../'), + SRC_ROOT: path.resolve(__dirname, '../'), +}; diff --git a/lib/auth.js b/src/lib/auth.js similarity index 99% rename from lib/auth.js rename to src/lib/auth.js index 7a87e5446..8d97a3d59 100644 --- a/lib/auth.js +++ b/src/lib/auth.js @@ -8,7 +8,7 @@ const jju = require('jju'); const Error = require('http-errors'); const Logger = require('./logger'); const load_plugins = require('./plugin-loader').load_plugins; -const pkgJson = require('../package.json'); +const pkgJson = require('../../package.json'); /** * Handles the authentification, load auth plugins. */ diff --git a/lib/cli.js b/src/lib/cli.js similarity index 99% rename from lib/cli.js rename to src/lib/cli.js index dce568be2..72fa38ed2 100644 --- a/lib/cli.js +++ b/src/lib/cli.js @@ -29,7 +29,7 @@ const https = require('https'); const YAML = require('js-yaml'); const Path = require('path'); const URL = require('url'); -const server = require('./index'); +const server = require('../api/index'); const Utils = require('./utils'); const pkginfo = require('pkginfo')(module); // eslint-disable-line no-unused-vars const pkgVersion = module.exports.version; diff --git a/lib/config-path.js b/src/lib/config-path.js similarity index 95% rename from lib/config-path.js rename to src/lib/config-path.js index 30c518ee3..e73877b5b 100644 --- a/lib/config-path.js +++ b/src/lib/config-path.js @@ -4,7 +4,7 @@ const fs = require('fs'); const Path = require('path'); const logger = require('./logger'); const CONFIG_FILE = 'config.yaml'; -const pkgJson = require('../package.json'); +const pkgJson = require('../../package.json'); /** * Find and get the first config file that match. * @return {String} the config file path @@ -28,7 +28,7 @@ function create_config_file(config_path) { require('mkdirp').sync(Path.dirname(config_path.path)); logger.logger.info({file: config_path.path}, 'Creating default config file in @{file}'); - let created_config = fs.readFileSync(require.resolve('../conf/default.yaml'), 'utf8'); + let created_config = fs.readFileSync(require.resolve('../../conf/default.yaml'), 'utf8'); if (config_path.type === 'xdg') { // $XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored, diff --git a/lib/config.js b/src/lib/config.js similarity index 100% rename from lib/config.js rename to src/lib/config.js diff --git a/lib/logger.js b/src/lib/logger.js similarity index 98% rename from lib/logger.js rename to src/lib/logger.js index 7d6842337..527ed22a1 100644 --- a/lib/logger.js +++ b/src/lib/logger.js @@ -5,7 +5,7 @@ const Error = require('http-errors'); const Stream = require('stream'); const chalk = require('chalk'); const Utils = require('./utils'); -const pkgJSON = require('../package.json'); +const pkgJSON = require('../../package.json'); /** * Match the level based on buyan severity scale diff --git a/lib/notify.js b/src/lib/notify.js similarity index 100% rename from lib/notify.js rename to src/lib/notify.js diff --git a/lib/plugin-loader.js b/src/lib/plugin-loader.js similarity index 96% rename from lib/plugin-loader.js rename to src/lib/plugin-loader.js index bf01985fb..a965fdfe7 100644 --- a/lib/plugin-loader.js +++ b/src/lib/plugin-loader.js @@ -34,7 +34,7 @@ function load_plugins(config, plugin_configs, params, sanity_check) { let plugin; // try local plugins first - plugin = try_load(Path.resolve(__dirname + '/plugins', p)); + plugin = try_load(Path.resolve(__dirname + '/..//plugins', p)); // npm package if (plugin === null && p.match(/^[^\.\/]/)) { diff --git a/lib/search.js b/src/lib/search.js similarity index 100% rename from lib/search.js rename to src/lib/search.js diff --git a/lib/status-cats.js b/src/lib/status-cats.js similarity index 100% rename from lib/status-cats.js rename to src/lib/status-cats.js diff --git a/lib/storage.js b/src/lib/storage.js similarity index 100% rename from lib/storage.js rename to src/lib/storage.js diff --git a/lib/storage/local/local-data.js b/src/lib/storage/local/local-data.js similarity index 100% rename from lib/storage/local/local-data.js rename to src/lib/storage/local/local-data.js diff --git a/lib/storage/local/local-fs.js b/src/lib/storage/local/local-fs.js similarity index 100% rename from lib/storage/local/local-fs.js rename to src/lib/storage/local/local-fs.js diff --git a/lib/storage/local/local-storage.js b/src/lib/storage/local/local-storage.js similarity index 100% rename from lib/storage/local/local-storage.js rename to src/lib/storage/local/local-storage.js diff --git a/lib/storage/streams.js b/src/lib/storage/streams.js similarity index 100% rename from lib/storage/streams.js rename to src/lib/storage/streams.js diff --git a/lib/storage/up-storage.js b/src/lib/storage/up-storage.js similarity index 100% rename from lib/storage/up-storage.js rename to src/lib/storage/up-storage.js diff --git a/lib/utils.js b/src/lib/utils.js similarity index 100% rename from lib/utils.js rename to src/lib/utils.js diff --git a/lib/plugins/htpasswd/crypt3.js b/src/plugins/htpasswd/crypt3.js similarity index 100% rename from lib/plugins/htpasswd/crypt3.js rename to src/plugins/htpasswd/crypt3.js diff --git a/lib/plugins/htpasswd/index.js b/src/plugins/htpasswd/index.js similarity index 100% rename from lib/plugins/htpasswd/index.js rename to src/plugins/htpasswd/index.js diff --git a/lib/plugins/htpasswd/utils.js b/src/plugins/htpasswd/utils.js similarity index 100% rename from lib/plugins/htpasswd/utils.js rename to src/plugins/htpasswd/utils.js diff --git a/lib/web/ui/.eslintrc.yml b/src/webui/src/.eslintrc.yml similarity index 100% rename from lib/web/ui/.eslintrc.yml rename to src/webui/src/.eslintrc.yml diff --git a/lib/web/ui/components/App.js b/src/webui/src/components/App.js similarity index 100% rename from lib/web/ui/components/App.js rename to src/webui/src/components/App.js diff --git a/lib/web/ui/components/Header/Header.js b/src/webui/src/components/Header/Header.js similarity index 100% rename from lib/web/ui/components/Header/Header.js rename to src/webui/src/components/Header/Header.js diff --git a/lib/web/static/header.png b/src/webui/src/components/Header/header.png similarity index 100% rename from lib/web/static/header.png rename to src/webui/src/components/Header/header.png diff --git a/lib/web/ui/components/Item/Item.js b/src/webui/src/components/Item/Item.js similarity index 100% rename from lib/web/ui/components/Item/Item.js rename to src/webui/src/components/Item/Item.js diff --git a/lib/web/ui/components/List/List.js b/src/webui/src/components/List/List.js similarity index 100% rename from lib/web/ui/components/List/List.js rename to src/webui/src/components/List/List.js diff --git a/lib/web/ui/components/Readme/Readme.js b/src/webui/src/components/Readme/Readme.js similarity index 100% rename from lib/web/ui/components/Readme/Readme.js rename to src/webui/src/components/Readme/Readme.js diff --git a/lib/web/ui/components/Search/Search.js b/src/webui/src/components/Search/Search.js similarity index 100% rename from lib/web/ui/components/Search/Search.js rename to src/webui/src/components/Search/Search.js diff --git a/lib/web/ui/components/browser.css b/src/webui/src/components/browser.css similarity index 100% rename from lib/web/ui/components/browser.css rename to src/webui/src/components/browser.css diff --git a/lib/web/ui/components/packages/Detail.js b/src/webui/src/components/packages/Detail.js similarity index 100% rename from lib/web/ui/components/packages/Detail.js rename to src/webui/src/components/packages/Detail.js diff --git a/lib/web/ui/components/styled/index.js b/src/webui/src/components/styled/index.js similarity index 100% rename from lib/web/ui/components/styled/index.js rename to src/webui/src/components/styled/index.js diff --git a/lib/web/ui/css/fontello.less b/src/webui/src/css/fontello.less similarity index 100% rename from lib/web/ui/css/fontello.less rename to src/webui/src/css/fontello.less diff --git a/lib/web/ui/css/helpers.less b/src/webui/src/css/helpers.less similarity index 100% rename from lib/web/ui/css/helpers.less rename to src/webui/src/css/helpers.less diff --git a/lib/web/ui/css/highlight.js.less b/src/webui/src/css/highlight.js.less similarity index 100% rename from lib/web/ui/css/highlight.js.less rename to src/webui/src/css/highlight.js.less diff --git a/lib/web/ui/css/main.less b/src/webui/src/css/main.less similarity index 100% rename from lib/web/ui/css/main.less rename to src/webui/src/css/main.less diff --git a/lib/web/ui/css/markdown.less b/src/webui/src/css/markdown.less similarity index 100% rename from lib/web/ui/css/markdown.less rename to src/webui/src/css/markdown.less diff --git a/lib/web/ui/css/responsive.less b/src/webui/src/css/responsive.less similarity index 100% rename from lib/web/ui/css/responsive.less rename to src/webui/src/css/responsive.less diff --git a/lib/web/ui/css/styles.less b/src/webui/src/css/styles.less similarity index 100% rename from lib/web/ui/css/styles.less rename to src/webui/src/css/styles.less diff --git a/lib/web/ui/entry.hbs b/src/webui/src/entry.hbs similarity index 100% rename from lib/web/ui/entry.hbs rename to src/webui/src/entry.hbs diff --git a/lib/web/ui/index.js b/src/webui/src/index.js similarity index 100% rename from lib/web/ui/index.js rename to src/webui/src/index.js diff --git a/lib/web/ui/style.css b/src/webui/src/style.css similarity index 100% rename from lib/web/ui/style.css rename to src/webui/src/style.css diff --git a/lib/web/utils/const.js b/src/webui/utils/const.js similarity index 100% rename from lib/web/utils/const.js rename to src/webui/utils/const.js diff --git a/lib/web/static/ajax.gif b/static/ajax.gif similarity index 100% rename from lib/web/static/ajax.gif rename to static/ajax.gif diff --git a/lib/web/static/favicon.ico b/static/favicon.ico similarity index 100% rename from lib/web/static/favicon.ico rename to static/favicon.ico diff --git a/lib/web/static/favicon.png b/static/favicon.png similarity index 100% rename from lib/web/static/favicon.png rename to static/favicon.png diff --git a/lib/web/static/fontello.eot b/static/fontello.eot similarity index 100% rename from lib/web/static/fontello.eot rename to static/fontello.eot diff --git a/lib/web/static/fontello.svg b/static/fontello.svg similarity index 100% rename from lib/web/static/fontello.svg rename to static/fontello.svg diff --git a/lib/web/static/fontello.ttf b/static/fontello.ttf similarity index 100% rename from lib/web/static/fontello.ttf rename to static/fontello.ttf diff --git a/lib/web/static/fontello.woff b/static/fontello.woff similarity index 100% rename from lib/web/static/fontello.woff rename to static/fontello.woff diff --git a/lib/web/ui/components/Header/header.png b/static/header.png similarity index 100% rename from lib/web/ui/components/Header/header.png rename to static/header.png diff --git a/lib/web/static/jquery.min.js b/static/jquery.min.js similarity index 100% rename from lib/web/static/jquery.min.js rename to static/jquery.min.js diff --git a/lib/web/static/logo-sm.png b/static/logo-sm.png similarity index 100% rename from lib/web/static/logo-sm.png rename to static/logo-sm.png diff --git a/lib/web/static/logo.png b/static/logo.png similarity index 100% rename from lib/web/static/logo.png rename to static/logo.png diff --git a/lib/web/static/styles.css b/static/styles.css similarity index 100% rename from lib/web/static/styles.css rename to static/styles.css diff --git a/lib/web/static/styles.css.map b/static/styles.css.map similarity index 100% rename from lib/web/static/styles.css.map rename to static/styles.css.map diff --git a/test/unit/config.js b/test/unit/config.js index 8cbe74b8c..ab2e5f229 100644 --- a/test/unit/config.js +++ b/test/unit/config.js @@ -2,7 +2,7 @@ const assert = require('assert'); const config_hash = require('./partials/config'); -const Config = require('../../lib/config'); +const Config = require('../../src/lib/config'); describe('Config', function() { diff --git a/test/unit/listen_addr.js b/test/unit/listen_addr.js index 7bfbd61ab..67da96168 100644 --- a/test/unit/listen_addr.js +++ b/test/unit/listen_addr.js @@ -1,7 +1,7 @@ 'use strict'; let assert = require('assert'); -let parse = require('../../lib/utils').parse_address; +let parse = require('../../src/lib/utils').parse_address; describe('Parse address', function() { function addTest(what, proto, host, port) { diff --git a/test/unit/mystreams.js b/test/unit/mystreams.js index 68dc7c923..a1a5347f8 100644 --- a/test/unit/mystreams.js +++ b/test/unit/mystreams.js @@ -1,6 +1,6 @@ 'use strict'; -let ReadTarball = require('../../lib/storage/streams').ReadTarball; +let ReadTarball = require('../../src/lib/storage/streams').ReadTarball; describe('mystreams', function() { it('should delay events', function(cb) { diff --git a/test/unit/no_proxy.js b/test/unit/no_proxy.js index 38cb972d9..c60f0ecf1 100644 --- a/test/unit/no_proxy.js +++ b/test/unit/no_proxy.js @@ -1,9 +1,9 @@ 'use strict'; let assert = require('assert'); -let Storage = require('../../lib/storage/up-storage'); +let Storage = require('../../src/lib/storage/up-storage'); -require('../../lib/logger').setup([]); +require('../../src/lib/logger').setup([]); function setup(host, config, mainconfig) { config.url = host; diff --git a/test/unit/parse_interval.js b/test/unit/parse_interval.js index 61ecf45c1..4eb86c8e4 100644 --- a/test/unit/parse_interval.js +++ b/test/unit/parse_interval.js @@ -1,7 +1,7 @@ 'use strict'; let assert = require('assert'); -let parseInterval = require('../../lib/utils').parseInterval; +let parseInterval = require('../../src/lib/utils').parseInterval; describe('Parse interval', function() { function add_test(str, res) { diff --git a/test/unit/plugin_loader.js b/test/unit/plugin_loader.js index 4bca68f59..1752ae5e8 100644 --- a/test/unit/plugin_loader.js +++ b/test/unit/plugin_loader.js @@ -1,7 +1,7 @@ 'use strict'; const assert = require('assert'); -const load_plugins = require('../../lib/plugin-loader').load_plugins; +const load_plugins = require('../../src/lib/plugin-loader').load_plugins; const path = require('path'); describe('plugin loader', function() { diff --git a/test/unit/search.js b/test/unit/search.js index 5b74e43b0..a6fc3085b 100644 --- a/test/unit/search.js +++ b/test/unit/search.js @@ -1,12 +1,12 @@ 'use strict'; let assert = require('assert'); -let Search = require('../../lib/search'); -let Storage = require('../../lib/storage'); +let Search = require('../../src/lib/search'); +let Storage = require('../../src/lib/storage'); let config_hash = require('./partials/config'); -let Config = require('../../lib/config'); +let Config = require('../../src/lib/config'); -require('../../lib/logger').setup([]); +require('../../src/lib/logger').setup([]); let packages = [ { diff --git a/test/unit/st_merge.js b/test/unit/st_merge.js index 29152b751..fb78d4872 100644 --- a/test/unit/st_merge.js +++ b/test/unit/st_merge.js @@ -1,10 +1,10 @@ 'use strict'; let assert = require('assert'); -let semver_sort = require('../../lib/utils').semver_sort; -let merge = require('../../lib/storage')._merge_versions; +let semver_sort = require('../../src/lib/utils').semver_sort; +let merge = require('../../src/lib/storage')._merge_versions; -require('../../lib/logger').setup([]); +require('../../src/lib/logger').setup([]); describe('Merge', function() { it('simple', function() { diff --git a/test/unit/tag_version.js b/test/unit/tag_version.js index 4616ffe93..1d5a360d1 100644 --- a/test/unit/tag_version.js +++ b/test/unit/tag_version.js @@ -1,9 +1,9 @@ 'use strict'; let assert = require('assert'); -let tag_version = require('../../lib/utils').tag_version; +let tag_version = require('../../src/lib/utils').tag_version; -require('../../lib/logger').setup([]); +require('../../src/lib/logger').setup([]); describe('tag_version', function() { it('add new one', function() { diff --git a/test/unit/utils.js b/test/unit/utils.js index 9794e50f1..8c270a42a 100644 --- a/test/unit/utils.js +++ b/test/unit/utils.js @@ -1,7 +1,7 @@ 'use strict'; let assert = require('assert'); -let validate = require('../../lib/utils').validate_name; +let validate = require('../../src/lib/utils').validate_name; describe('Validate', function() { it('good ones', function() { diff --git a/test/unit/validate_all.js b/test/unit/validate_all.js index f919823ae..72c6b3678 100644 --- a/test/unit/validate_all.js +++ b/test/unit/validate_all.js @@ -6,13 +6,13 @@ const assert = require('assert'); const path = require('path'); describe('index.js app', test('index.js')); -describe('api.js app', test('api/api.js')); +describe('index.js app', test('../endpoint/index.js')); describe('index.js app', test('index.js')); function test(file) { return function() { - let requirePath = path.normalize(path.join(__dirname + '/../../lib/web/', file)); + let requirePath = path.normalize(path.join(__dirname + '/../../src/api/web/', file)); let source = require('fs').readFileSync(requirePath, 'utf8'); let very_scary_regexp = /\n\s*app\.(\w+)\s*\(\s*(("[^"]*")|('[^']*'))\s*,/g; diff --git a/tools/webpack.config.js b/tools/webpack.config.js index 3de4128e8..c67abc1be 100644 --- a/tools/webpack.config.js +++ b/tools/webpack.config.js @@ -1,12 +1,12 @@ -const path = require('path'); const webpack = require('webpack'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const env = require('../src/config/env'); module.exports = { - entry: './lib/web/ui/index.js', + entry: `${env.SRC_ROOT}/webui/src/index.js`, devtool: 'source-map', output: { - path: path.resolve(__dirname, '../lib/web/static'), + path: `${env.APP_ROOT}/static/`, filename: 'bundle.js' }, module: {