[PATCH] bugzilla: support Bugzilla 4.4.3+ API login token authentication (issue4257)
Augie Fackler
raf at durin42.com
Mon May 26 11:13:42 CDT 2014
On Fri, May 23, 2014 at 05:42:51PM +0100, Jim Hague wrote:
> # HG changeset patch
> # User Jim Hague <jim.hague at acm.org>
> # Date 1400862544 -3600
> # Fri May 23 17:29:04 2014 +0100
> # Branch stable
> # Node ID 1522f121693156c814fd1d037c3dbc57a3639030
> # Parent 54d7657d7d1e6a62315eea53f4498657e766bb60
> bugzilla: support Bugzilla 4.4.3+ API login token authentication (issue4257)
Looks reasonable, queued for stable. Thanks!
>
> Bugzilla 4.4.3 and later remove the old cookie based session authentication
> from the Web Services API and replace it with a login token. The session
> can now also be restricted to the originating IP.
>
> Add the necessary to the extension so it works with 4.4.3 and later.
>
> diff -r 54d7657d7d1e -r 1522f1216931 hgext/bugzilla.py
> --- a/hgext/bugzilla.py Mon May 05 16:54:15 2014 +0200
> +++ b/hgext/bugzilla.py Fri May 23 17:29:04 2014 +0100
> @@ -1,7 +1,7 @@
> # bugzilla.py - bugzilla integration for mercurial
> #
> # Copyright 2006 Vadim Gelfer <vadim.gelfer at gmail.com>
> -# Copyright 2011-2 Jim Hague <jim.hague at acm.org>
> +# Copyright 2011-4 Jim Hague <jim.hague at acm.org>
> #
> # This software may be used and distributed according to the terms of the
> # GNU General Public License version 2 or any later version.
> @@ -523,7 +523,7 @@
>
> The regular xmlrpclib transports ignore cookies. Which causes
> a bit of a problem when you need a cookie-based login, as with
> - the Bugzilla XMLRPC interface.
> + the Bugzilla XMLRPC interface prior to 4.4.3.
>
> So this is a helper for defining a Transport which looks for
> cookies being set in responses and saves them to add to all future
> @@ -620,7 +620,9 @@
> ver = self.bzproxy.Bugzilla.version()['version'].split('.')
> self.bzvermajor = int(ver[0])
> self.bzverminor = int(ver[1])
> - self.bzproxy.User.login({'login': user, 'password': passwd})
> + login = self.bzproxy.User.login({'login': user, 'password': passwd,
> + 'restrict_login': True})
> + self.bztoken = login.get('token', '')
>
> def transport(self, uri):
> if urlparse.urlparse(uri, "http")[0] == "https":
> @@ -631,13 +633,15 @@
> def get_bug_comments(self, id):
> """Return a string with all comment text for a bug."""
> c = self.bzproxy.Bug.comments({'ids': [id],
> - 'include_fields': ['text']})
> + 'include_fields': ['text'],
> + 'token': self.bztoken})
> return ''.join([t['text'] for t in c['bugs'][str(id)]['comments']])
>
> def filter_real_bug_ids(self, bugs):
> probe = self.bzproxy.Bug.get({'ids': sorted(bugs.keys()),
> 'include_fields': [],
> 'permissive': True,
> + 'token': self.bztoken,
> })
> for badbug in probe['faults']:
> id = badbug['id']
> @@ -662,6 +666,7 @@
> if 'fix' in newstate:
> args['status'] = self.fixstatus
> args['resolution'] = self.fixresolution
> + args['token'] = self.bztoken
> self.bzproxy.Bug.update(args)
> else:
> if 'fix' in newstate:
> @@ -719,10 +724,12 @@
> than the subject line, and leave a blank line after it.
> '''
> user = self.map_committer(committer)
> - matches = self.bzproxy.User.get({'match': [user]})
> + matches = self.bzproxy.User.get({'match': [user],
> + 'token': self.bztoken})
> if not matches['users']:
> user = self.ui.config('bugzilla', 'user', 'bugs')
> - matches = self.bzproxy.User.get({'match': [user]})
> + matches = self.bzproxy.User.get({'match': [user],
> + 'token': self.bztoken})
> if not matches['users']:
> raise util.Abort(_("default bugzilla user %s email not found") %
> user)
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list