|
|
|
// utilities for working with the js-registry site.
|
|
|
|
|
|
|
|
module.exports = RegClient
|
|
|
|
|
|
|
|
var fs = require('fs')
|
|
|
|
, url = require('url')
|
|
|
|
, path = require('path')
|
|
|
|
, CouchLogin = require('couch-login')
|
|
|
|
, npmlog
|
|
|
|
|
|
|
|
try {
|
|
|
|
npmlog = require("npmlog")
|
|
|
|
} catch (er) {
|
|
|
|
npmlog = { error: noop, warn: noop, info: noop,
|
|
|
|
verbose: noop, silly: noop, http: noop,
|
|
|
|
pause: noop, resume: noop }
|
|
|
|
}
|
|
|
|
|
|
|
|
function noop () {}
|
|
|
|
|
|
|
|
function RegClient (conf) {
|
|
|
|
// accept either a plain-jane object, or a npmconf object
|
|
|
|
// with a "get" method.
|
|
|
|
if (typeof conf.get !== 'function') {
|
|
|
|
var data = conf
|
|
|
|
conf = { get: function (k) { return data[k] }
|
|
|
|
, set: function (k, v) { data[k] = v }
|
|
|
|
, del: function (k) { delete data[k] } }
|
|
|
|
}
|
|
|
|
|
|
|
|
this.conf = conf
|
|
|
|
|
|
|
|
// if provided, then the registry needs to be a url.
|
|
|
|
// if it's not provided, then we're just using the cache only.
|
|
|
|
var registry = conf.get('registry')
|
|
|
|
if (registry) {
|
|
|
|
registry = url.parse(registry)
|
|
|
|
if (!registry.protocol) throw new Error(
|
|
|
|
'Invalid registry: ' + registry.url)
|
|
|
|
registry = registry.href
|
|
|
|
if (registry.slice(-1) !== '/') {
|
|
|
|
registry += '/'
|
|
|
|
}
|
|
|
|
this.conf.set('registry', registry)
|
|
|
|
} else {
|
|
|
|
registry = null
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!conf.get('cache')) throw new Error("Cache dir is required")
|
|
|
|
|
|
|
|
var auth = this.conf.get('_auth')
|
|
|
|
var alwaysAuth = this.conf.get('always-auth')
|
|
|
|
if (auth && !alwaysAuth && registry) {
|
|
|
|
// if we're always authing, then we just send the
|
|
|
|
// user/pass on every thing. otherwise, create a
|
|
|
|
// session, and use that.
|
|
|
|
var token = this.conf.get('_token')
|
|
|
|
this.couchLogin = new CouchLogin(registry, token)
|
|
|
|
this.couchLogin.proxy = this.conf.get('proxy')
|
|
|
|
this.couchLogin.strictSSL = this.conf.get('strict-ssl')
|
|
|
|
this.couchLogin.ca = this.conf.get('ca')
|
|
|
|
this.couchLogin.cert = this.conf.get('cert')
|
|
|
|
this.couchLogin.key = this.conf.get('key')
|
|
|
|
}
|
|
|
|
|
|
|
|
this.log = conf.log || conf.get('log') || npmlog
|
|
|
|
}
|
|
|
|
|
|
|
|
require('fs').readdirSync(__dirname + "/lib").forEach(function (f) {
|
|
|
|
if (!f.match(/\.js$/)) return
|
|
|
|
RegClient.prototype[f.replace(/\.js$/, '')] = require('./lib/' + f)
|
|
|
|
})
|