如何在node.js中为bitbucket-api的密码转义圆括号

时间:2014-04-06 10:34:13

标签: node.js bitbucket-api

我正在尝试使用node.js中的bitbucket-api访问BitBucket上的特定存储库,而我的密码包含有趣的字符(圆括号和空格)。它不会抛出任何有用的错误或让我获取数据。

我碰巧喜欢我的密码所以我不想改变它。我知道从密码中删除圆括号和空格可以解决问题。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

经过大量搜索并进入curl-transport.js的实现后,我找到了解决此问题的方法。它依赖于对curl-transport传递给require('child_process').exec的理解。

本质上,该机制的工作原理是为CURL启动一个新进程并传入命令行参数。通过使用圆括号,它会混淆CURL,并且通过使用空格会混淆命令行参数解析。因此,为了解决这个问题,只需添加双引号作为用户名的第一个字符,并将结束双引号添加为密码的最后一个字符;所以当两个字符串连接起来时(即:username +“:”+ password),最后的字符串将是"USERNAME:PASSWORD",它将作为一个参数传递给进程。

我的节点代码如下所示:

var bitbucket = require('bitbucket-api');
var credentials = { username: '"USERNAME', password: 'PASSWORD With Spaces and ()s"' };
var client = bitbucket.createClient(credentials);
var repository = client.getRepository({ slug: 'repoName', owner: 'USERNAME' }, function (err, repo) {
    //Code to access the repo object.
    console.log(repo);
});

注意用户名在值的开头有一个额外的双引号(这是黑客攻击)。我已经添加了空格并在下面强调了它,因为它并不明显::

  • 用户名:' USERNAME'

注意密码在值的末尾有一个额外的双引号(这是黑客攻击)。我添加了空格并在下面强调了它,因为它并不明显:

  • 密码:'密码带空格和()s '

然后调用将成功,您将获得存储库的详细信息。

顺便说一下,这个修复程序在Windows 8上的bitbucket-api的V0.0.6中适用于我。


一个有用的说明:

在Windows上,请记住将以下内容放入您的路径中,以便找到CURL。您可以通过[Win8: Windows-X]->System->Advanced System Settings->Advanced->System Variables->Path->Edit...

执行此操作

确保git的二进制文件位于CURL的路径中:

C:\Program Files (x86)\Git\bin

另外,如果你试图让它在heroku上工作,那么你可能需要通过在C:\ Heroku下重新安装Heroku工具带来解决路径问题(请参阅其他帖子了解原因)并将以下内容添加到路径:

C:\Heroku\ruby-1.9.2\bin;C:\Heroku\bin;C:\Program Files (x86)\Git\bin