Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/cache.js8
-rw-r--r--test/fixtures/scoped-underscore-1.3.1.tgzbin0 -> 55415 bytes
-rw-r--r--test/tap/shrinkwrap-scoped-auth.js108
3 files changed, 115 insertions, 1 deletions
diff --git a/lib/cache.js b/lib/cache.js
index 1c5495405..357063551 100644
--- a/lib/cache.js
+++ b/lib/cache.js
@@ -82,6 +82,7 @@ var npm = require("./npm.js")
, npa = require("npm-package-arg")
, getStat = require("./cache/get-stat.js")
, cachedPackageRoot = require("./cache/cached-package-root.js")
+ , mapToRegistry = require("./utils/map-to-registry.js")
cache.usage = "npm cache add <tarball file>"
+ "\nnpm cache add <folder>"
@@ -289,7 +290,12 @@ function add (args, where, cb) {
addLocal(p, null, cb)
break
case "remote":
- addRemoteTarball(p.spec, {name : p.name}, null, null, cb)
+ // get auth, if possible
+ mapToRegistry(spec, npm.config, function (err, uri, auth) {
+ if (err) return cb(err)
+
+ addRemoteTarball(p.spec, {name : p.name}, null, auth, cb)
+ })
break
case "git":
addRemoteGit(p.spec, false, cb)
diff --git a/test/fixtures/scoped-underscore-1.3.1.tgz b/test/fixtures/scoped-underscore-1.3.1.tgz
new file mode 100644
index 000000000..d98a34599
--- /dev/null
+++ b/test/fixtures/scoped-underscore-1.3.1.tgz
Binary files differ
diff --git a/test/tap/shrinkwrap-scoped-auth.js b/test/tap/shrinkwrap-scoped-auth.js
new file mode 100644
index 000000000..d6bb6b8d6
--- /dev/null
+++ b/test/tap/shrinkwrap-scoped-auth.js
@@ -0,0 +1,108 @@
+var resolve = require("path").resolve
+var writeFileSync = require("graceful-fs").writeFileSync
+
+var mkdirp = require("mkdirp")
+var mr = require("npm-registry-mock")
+var osenv = require("osenv")
+var rimraf = require("rimraf")
+var test = require("tap").test
+
+var common = require("../common-tap.js")
+var toNerfDart = require("../../lib/config/nerf-dart.js")
+
+var pkg = resolve(__dirname, "shrinkwrap-scoped-auth")
+var outfile = resolve(pkg, "_npmrc")
+var modules = resolve(pkg, "node_modules")
+var tarballPath = "/scoped-underscore/-/scoped-underscore-1.3.1.tgz"
+var tarballURL = common.registry + tarballPath
+var tarball = resolve(__dirname, "../fixtures/scoped-underscore-1.3.1.tgz")
+
+var server
+
+var EXEC_OPTS = {
+ cwd : pkg
+}
+
+function mocks (server) {
+ var auth = "Bearer 0xabad1dea"
+ server.get(tarballPath, { authorization : auth }).replyWithFile(200, tarball)
+ server.get(tarballPath).reply(401, {
+ error : "unauthorized",
+ reason : "You are not authorized to access this db."
+ })
+}
+
+test("setup", function (t) {
+ mr({ port : common.port, mocks : mocks }, function (s) {
+ server = s
+ t.ok(s, "set up mock registry")
+ setup()
+ t.end()
+ })
+})
+
+test("authed npm install with shrinkwrapped scoped package", function (t) {
+ common.npm(
+ [
+ "install",
+ "--loglevel", "silent",
+ "--fetch-retries", 0,
+ "--userconfig", outfile
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "test runner executed without error")
+ t.equal(code, 0, "npm install exited OK")
+ t.notOk(stderr, "no output on stderr")
+ t.equal(
+ stdout,
+ "@scoped/underscore@1.3.1 node_modules/@scoped/underscore\n",
+ "module installed where expected"
+ )
+
+ t.end()
+ }
+ )
+})
+
+test("cleanup", function (t) {
+ server.close()
+ cleanup()
+ t.end()
+})
+
+var contents = "@scoped:registry="+common.registry+"\n" +
+ toNerfDart(common.registry)+":_authToken=0xabad1dea\n"
+
+var json = {
+ name : "test-package-install",
+ version : "1.0.0"
+}
+
+var shrinkwrap = {
+ name : "test-package-install",
+ version : "1.0.0",
+ dependencies : {
+ "@scoped/underscore" : {
+ resolved : tarballURL,
+ from : ">=1.3.1 <2",
+ version : "1.3.1"
+ }
+ }
+}
+
+function setup () {
+ cleanup()
+ mkdirp.sync(modules)
+ writeFileSync(resolve(pkg, "package.json"), JSON.stringify(json, null, 2)+"\n")
+ writeFileSync(outfile, contents)
+ writeFileSync(
+ resolve(pkg, "npm-shrinkwrap.json"),
+ JSON.stringify(shrinkwrap, null, 2)+"\n"
+ )
+}
+
+function cleanup() {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg)
+}