在Bugzilla API工作时,我编写了一个快速的Perl脚本来克隆Bugzilla产品(在新产品下重新创建所有组件)。 Bugzilla Perl API在命令行中非常容易使用。我本可以直接在数据库上工作,但我想要一个更长期的解决方案。另一种选择是webservice,但我想我这次尝试直接使用API。
我遇到的一个问题是作为我的Bz管理员用户进行身份验证,因此我可以创建新的组件。看看Bugzilla的Bugzilla.pm文件,我发现它们只是从Bugzilla::Auth对象运行login()
。我不知道如何获取用户名和密码。我想我可以将脚本添加到Bugzilla管理界面...
你们有没有人能指出我正确的方向?
答案 0 :(得分:2)
自3.2以来,Web服务功能已经有了一些重大升级,你能升级吗?
至少在3.6中,请查看contrib/bz_webservice_demo.pl
了解如何使用User.login
方法。
http://www.bugzilla.org/docs/tip/en/html/api/Bugzilla/WebService/User.html
答案 1 :(得分:2)
哦,我今天很无知,我专注于“网络服务”而且不明白你真正想要的是什么。
如果您只是使用API与数据库进行通信(而不是直接操作数据库),您是否真的需要以任何用户身份进行身份验证?
在3.2源代码树中,例如查看merge-users.pl
,它使用Bugzilla::User
个对象。你不能对Bugzilla::Component
做同样的事情吗?
您还应该查看使用sanitycheck.pl
的{{1}}。
答案 2 :(得分:1)
以下代码段可能会输入问题。 在这里,我们还检查用户是否具有正确的“editcomponents”凭证。
my $user = new Bugzilla::User({ name => $login })
|| ThrowUserError('invalid_username', { name => $login });
# Authenticate using this user account.
Bugzilla->set_user($user);
$user->in_group('editcomponents')
|| ThrowUserError("auth_failure", {group => "editcomponents",
action => "add",
object => "products"});