~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/plugins/launchpad/lp_registration.py

  • Committer: Alexander Belchenko
  • Date: 2007-11-19 22:54:30 UTC
  • mfrom: (3006 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3008.
  • Revision ID: bialix@ukr.net-20071119225430-x0ewosrsagis0yno
merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
72
72
        else:
73
73
            return self.DEFAULT_SERVICE_URL
74
74
 
75
 
    def get_proxy(self):
 
75
    def get_proxy(self, authenticated):
76
76
        """Return the proxy for XMLRPC requests."""
77
 
        # auth info must be in url
78
 
        # TODO: if there's no registrant email perhaps we should just connect
79
 
        # anonymously?
80
 
        scheme, hostinfo, path = urlsplit(self.service_url)[:3]
81
 
        assert '@' not in hostinfo
82
 
        assert self.registrant_email is not None
83
 
        assert self.registrant_password is not None
84
 
        # TODO: perhaps fully quote the password to make it very slightly
85
 
        # obscured
86
 
        # TODO: can we perhaps add extra Authorization headers directly to the 
87
 
        # request, rather than putting this into the url?  perhaps a bit more 
88
 
        # secure against accidentally revealing it.  std66 s3.2.1 discourages putting
89
 
        # the password in the url.
90
 
        hostinfo = '%s:%s@%s' % (urllib.quote(self.registrant_email),
91
 
                                 urllib.quote(self.registrant_password),
92
 
                                 hostinfo)
93
 
        url = urlunsplit((scheme, hostinfo, path, '', ''))
 
77
        if authenticated:
 
78
            # auth info must be in url
 
79
            # TODO: if there's no registrant email perhaps we should
 
80
            # just connect anonymously?
 
81
            scheme, hostinfo, path = urlsplit(self.service_url)[:3]
 
82
            assert '@' not in hostinfo
 
83
            assert self.registrant_email is not None
 
84
            assert self.registrant_password is not None
 
85
            # TODO: perhaps fully quote the password to make it very slightly
 
86
            # obscured
 
87
            # TODO: can we perhaps add extra Authorization headers
 
88
            # directly to the request, rather than putting this into
 
89
            # the url?  perhaps a bit more secure against accidentally
 
90
            # revealing it.  std66 s3.2.1 discourages putting the
 
91
            # password in the url.
 
92
            hostinfo = '%s:%s@%s' % (urllib.quote(self.registrant_email),
 
93
                                     urllib.quote(self.registrant_password),
 
94
                                     hostinfo)
 
95
            url = urlunsplit((scheme, hostinfo, path, '', ''))
 
96
        else:
 
97
            url = self.service_url
94
98
        return xmlrpclib.ServerProxy(url, transport=self.transport)
95
99
 
96
100
    def gather_user_credentials(self):
97
101
        """Get the password from the user."""
98
 
        config = config.GlobalConfig()
99
 
        self.registrant_email = config.user_email()
 
102
        the_config = config.GlobalConfig()
 
103
        self.registrant_email = the_config.user_email()
100
104
        if self.registrant_password is None:
101
105
            auth = config.AuthenticationConfig()
102
106
            scheme, hostinfo = urlsplit(self.service_url)[:2]
105
109
            # We will reuse http[s] credentials if we can, prompt user
106
110
            # otherwise
107
111
            self.registrant_password = auth.get_password(scheme, hostinfo,
 
112
                                                         self.registrant_email,
108
113
                                                         prompt=prompt)
109
114
 
110
 
    def send_request(self, method_name, method_params):
111
 
        proxy = self.get_proxy()
 
115
    def send_request(self, method_name, method_params, authenticated):
 
116
        proxy = self.get_proxy(authenticated)
112
117
        assert method_name
113
118
        method = getattr(proxy, method_name)
114
119
        try:
134
139
 
135
140
    # Set this to the XMLRPC method name.
136
141
    _methodname = None
 
142
    _authenticated = True
137
143
 
138
144
    def _request_params(self):
139
145
        """Return the arguments to pass to the method"""
145
151
        :param service: LaunchpadService indicating where to send
146
152
            the request and the authentication credentials.
147
153
        """
148
 
        return service.send_request(self._methodname, self._request_params())
 
154
        return service.send_request(self._methodname, self._request_params(),
 
155
                                    self._authenticated)
149
156
 
150
157
 
151
158
class DryRunLaunchpadService(LaunchpadService):
154
161
    The dummy service does not need authentication.
155
162
    """
156
163
 
157
 
    def send_request(self, method_name, method_params):
 
164
    def send_request(self, method_name, method_params, authenticated):
158
165
        pass
159
166
 
160
167
    def gather_user_credentials(self):
216
223
        # This must match the parameter tuple expected by Launchpad for this
217
224
        # method
218
225
        return (self.branch_url, self.bug_id, '')
 
226
 
 
227
 
 
228
class ResolveLaunchpadPathRequest(BaseRequest):
 
229
    """Request to resolve the path component of an lp: URL."""
 
230
 
 
231
    _methodname = 'resolve_lp_path'
 
232
    _authenticated = False
 
233
 
 
234
    def __init__(self, path):
 
235
        assert path
 
236
        self.path = path
 
237
 
 
238
    def _request_params(self):
 
239
        """Return xmlrpc request parameters"""
 
240
        return (self.path,)