diff --git a/product/ERP5Wizard/Tool/WizardTool.py b/product/ERP5Wizard/Tool/WizardTool.py index 50c13d84c83209e92d5a4319bfa68f95b62403b6..a1af94413abf0e775a21b8a6648b56575afa7e16 100644 --- a/product/ERP5Wizard/Tool/WizardTool.py +++ b/product/ERP5Wizard/Tool/WizardTool.py @@ -46,6 +46,21 @@ import cookielib cookiejar = cookielib.CookieJar() referer = None +def _isUserAcknowledged(cookiejar): + """ Is user authenticated to remote system through a cookie. """ + for cookie in cookiejar: + if cookie.name == '__ac' and cookie.value != '': + return 1 + return 0 + +def _getAcCookieFromServer(url, opener, cookiejar, username, password, header_dict = {}): + """ get __ac cookie from server """ + data = urllib.urlencode({'__ac_name': username, + '__ac_password': password}) + request = urllib2.Request(url, data, header_dict) + f = opener.open(request) + return f + def _setSuperSecurityManager(self): """ Change to super user account. """ user = self.getWrappedOwner() @@ -272,8 +287,18 @@ class WizardTool(BaseTool): user_and_password = self._getSubsribedUserAndPassword() if (len(user_and_password)==2 and user_and_password[0] and user_and_password[1]): - auth = 'Basic %s' % base64.standard_b64encode('%s:%s' % user_and_password) - header_dict['Authorization'] = auth + # try login to server only once using cookie method + if not _isUserAcknowledged(cookiejar): + server_url = self.getServerUrl() + f = _getAcCookieFromServer('%s/WebSite_login' %server_url, + self.simple_opener_director, + cookiejar, + user_and_password[0], + user_and_password[1]) + # if server doesn't support cookie authentication try basic authentication + if not _isUserAcknowledged(cookiejar): + auth = 'Basic %s' % base64.standard_b64encode('%s:%s' % user_and_password) + header_dict['Authorization'] = auth if content_type: header_dict['Content-Type'] = content_type