def authenticate(self, handler, data): username = data['username'] password = data['password'] self.log.debug("Server address:", self.server_address) self.log.debug("Service address:", self.service_address) # No empty passwords! if password is None or password.strip() == '': self.log.warn('username:%s Login denied for blank password', username) return None try: caslib.login_to_cas_service(self.server_address, username, password, self.service_address) return username except Exception as e: return None
def get_user_data(self, username=None, email=None, global_id=None, database_id=None): '''Try to retrieve user profile information for a user''' scheme, host, path, params, query, fragment = urlparse(self.url) if username: query = urlencode([('userByAccountNameEquals', username)], True) elif email: query = urlencode([('userByEmailAddressEquals', email)], True) elif global_id: query = urlencode([('userByGlobalId', global_id)], True) elif database_id: query = urlencode([('userById', database_id)], True) else: raise TypeError('%s.get_user_data requires a username or database_id keyword argument' % type(self).__name__) url = urlunparse((scheme, host, path, params, query, fragment)) _log.info('Retrieving user profile for: %s', username or '#%s' % database_id) try: user_data = self._get_user_data(url) except TryAuthenticating, e: # TryAuthenticating may be a good idea, better tell an adult! if not e.login_url or not self.username: _log.exception(e) raise # This may raise a URLError or CASLoginError. There's nothing much # to be done about it though, so I'm not handling it. _log.info('Failed: %s', e) # FIXME: It would be good to check that we haven't been redirected # someplace strange before we send off our credentials. Hopefully # certificate validation will lessen this possibility. login_to_cas_service(e.login_url, self.username, self.password, opener=self.opener) # If that worked, then give it another go user_data = self._get_user_data(url)
def cas_renew(self): """Renew CAS login. Returns : file_obj - a file handle with the result url_obj: urllib2 opener with cookiejar """ self._file_obj, self._url_obj = caslib.login_to_cas_service( self.get_login_url(renew=True), self._username, self._password) # add handler for POST requests (used by cmd_create_file) self._url_obj.add_handler(MultipartPostHandler.MultipartPostHandler()) # with renew the ticket changed, update it self._set_ticket()
def cas_login(self): """Login to CAS using the supplied username/password. Returns : file_obj - a file handle with the result url_obj: urllib2 opener with cookiejar """ self._file_obj, self._url_obj = caslib.login_to_cas_service( self.get_login_url(), self._username, self._password) # add handler for POST requests (used by cmd_create_file) self._url_obj.add_handler(MultipartPostHandler.MultipartPostHandler()) # set the cas ticket for quick access self._set_ticket()