71 login, password = _login, _password |
71 login, password = _login, _password |
72 else: |
72 else: |
73 login, password = req.get_authorization() |
73 login, password = req.get_authorization() |
74 if not login: |
74 if not login: |
75 # No session and no login -> try anonymous |
75 # No session and no login -> try anonymous |
76 login, password = self.vreg.config.anonymous_user() |
76 login, password = self._cw.vreg.config.anonymous_user() |
77 if not login: # anonymous not authorized |
77 if not login: # anonymous not authorized |
78 raise ExplicitLogin() |
78 raise ExplicitLogin() |
79 # remove possibly cached cursor coming from closed connection |
79 # remove possibly cached cursor coming from closed connection |
80 clear_cache(req, 'cursor') |
80 clear_cache(req, 'cursor') |
81 cnxprops = ConnectionProperties(self.vreg.config.repo_method, |
81 cnxprops = ConnectionProperties(self._cw.vreg.config.repo_method, |
82 close=False, log=self.log_queries) |
82 close=False, log=self.log_queries) |
83 try: |
83 try: |
84 cnx = repo_connect(self.repo, login, password, cnxprops=cnxprops) |
84 cnx = repo_connect(self.repo, login, password, cnxprops=cnxprops) |
85 except AuthenticationError: |
85 except AuthenticationError: |
86 req.set_message(req._('authentication failure')) |
86 req.set_message(req._('authentication failure')) |
87 # restore an anonymous connection if possible |
87 # restore an anonymous connection if possible |
88 anonlogin, anonpassword = self.vreg.config.anonymous_user() |
88 anonlogin, anonpassword = self._cw.vreg.config.anonymous_user() |
89 if anonlogin and anonlogin != login: |
89 if anonlogin and anonlogin != login: |
90 cnx = repo_connect(self.repo, anonlogin, anonpassword, |
90 cnx = repo_connect(self.repo, anonlogin, anonpassword, |
91 cnxprops=cnxprops) |
91 cnxprops=cnxprops) |
92 self._init_cnx(cnx, anonlogin, anonpassword) |
92 self._init_cnx(cnx, anonlogin, anonpassword) |
93 else: |
93 else: |
98 req.set_connection(cnx) |
98 req.set_connection(cnx) |
99 return cnx |
99 return cnx |
100 |
100 |
101 def _init_cnx(self, cnx, login, password): |
101 def _init_cnx(self, cnx, login, password): |
102 # decorate connection |
102 # decorate connection |
103 if login == self.vreg.config.anonymous_user()[0]: |
103 if login == self._cw.vreg.config.anonymous_user()[0]: |
104 cnx.anonymous_connection = True |
104 cnx.anonymous_connection = True |
105 cnx.vreg = self.vreg |
105 cnx.vreg = self._cw.vreg |
106 cnx.login = login |
106 cnx.login = login |
107 cnx.password = password |
107 cnx.password = password |
108 |
108 |