2010-05-04 41 views
4

Bugzilla API开始,我编写了一个快速的Perl脚本来克隆Bugzilla产品(在其新产品下重新创建所有组件)。 Bugzilla Perl API在命令行中非常易于使用。我可以直接在数据库上工作,但我想要一个更长期的解决方案。另一种选择是web服务,但我认为我会尝试直接使用API​​。如何在脚本中使用Bugzilla Perl API时进行身份验证?

我遇到的一个问题是作为我的Bz管理员用户进行身份验证,因此我可以创建新组件。查看Bugzilla的Bugzilla.pm文件,我发现它们只是从Bugzilla::Auth对象运行login()。我不知道如何获取用户名和密码。我想我可以将脚本添加到Bugzilla管理界面中...

你们中的任何一个人都能指引我走向正确的方向吗?

+0

上面的Bugzilla API URL现在产生了404错误。 – jeremiah 2013-05-24 12:31:00

+1

让我们参考“提示”开发版本,即使它可能不是人们想要的确切东西。 http://www.bugzilla.org/docs/tip/en/html/api/或主文档页面http://www.bugzilla.org/docs/ – 2014-12-30 19:10:29

回答

2

哦,我是相当无知的今天,我把重点放在“网络服务”,不明白你真正想要的东西。

如果您只是使用API​​与数据库进行通信(而不是直接操纵数据库),您是否真的需要以任何用户身份进行身份验证?

在3.2源代码树中,查看merge-users.pl,例如使用Bugzilla::User对象。难道你不能这样做Bugzilla::Component

您还应该看看sanitycheck.pl,它使用Bugzilla->set_user

+0

谢谢;这非常有帮助。我结束了Bugzilla-> set_user()以及Bugzilla-> usage_mode(Bugzilla :: Constants :: USAGE_MODE_CMDLINE),它让我的脚本复制了我想要的所有组件。 – 2010-05-05 18:11:41

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

由于某些本地定制,升级不是微不足道的,但我希望有一天能做到。在我看来,尽管使用Web服务的真正问题是我看不到任何添加新产品或组件的方法。 [1]:http://www.bugzilla.org/docs/tip/en/html/api/Bugzilla/WebService/Product.html – 2010-05-05 00:41:56

1

以下代码片段可能会输入问题。 这里我们还检查用户是否拥有正确的“编辑组件”凭证。

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"}); 
相关问题