def check_repository(cls, path, username=None, password=None, local_site_name=None): """ Performs checks on a repository to test its validity. This should check if a repository exists and can be connected to. This will also check if the repository requires an HTTPS certificate. The result is returned as an exception. The exception may contain extra information, such as a human-readable description of the problem. If the repository is valid and can be connected to, no exception will be thrown. """ if sshutils.is_ssh_uri(path): username, hostname = SCMTool.get_auth_from_uri(path, username) logging.debug( "%s: Attempting ssh connection with host: %s, username: %s" % \ (cls.__name__, hostname, username)) try: sshutils.check_host(hostname, username, password, local_site_name) except SSHAuthenticationError, e: # Represent an SSHAuthenticationError as a standard # AuthenticationError. raise AuthenticationError(e.allowed_types, unicode(e), e.user_key) except:
def check_repository(cls, path, username=None, password=None, local_site_name=None): """ Performs checks on a repository to test its validity. This should check if a repository exists and can be connected to. This will also check if the repository requires an HTTPS certificate. The result is returned as an exception. The exception may contain extra information, such as a human-readable description of the problem. If the repository is valid and can be connected to, no exception will be thrown. """ if sshutils.is_ssh_uri(path): username, hostname = SCMTool.get_auth_from_uri(path, username) logging.debug( "%s: Attempting ssh connection with host: %s, username: %s" % (cls.__name__, hostname, username)) try: sshutils.check_host(hostname, username, password, local_site_name) except SSHAuthenticationError as e: # Represent an SSHAuthenticationError as a standard # AuthenticationError. raise AuthenticationError(e.allowed_types, six.text_type(e), e.user_key) except: # Re-raise anything else raise
def check_repository(cls, path, username=None, password=None, local_site_name=None): """ Performs checks on a repository to test its validity. This should check if a repository exists and can be connected to. This will also check if the repository requires an HTTPS certificate. The result is returned as an exception. The exception may contain extra information, such as a human-readable description of the problem. If the repository is valid and can be connected to, no exception will be thrown. """ super(BZRTool, cls).check_repository(path, username, password, local_site_name) if local_site_name and sshutils.is_ssh_uri(path): path += '?rb-local-site-name=%s' % local_site_name try: tree, branch, repository, relpath = \ bzrdir.BzrDir.open_containing_tree_branch_or_repository( path.encode('ascii')) except AttributeError: raise RepositoryNotFoundError() except NotBranchError: raise RepositoryNotFoundError() except Exception as e: raise SCMError(e)
def check_repository(cls, path, username=None, password=None, local_site_name=None): """ Performs checks on a repository to test its validity. This should check if a repository exists and can be connected to. This will also check if the repository requires an HTTPS certificate. The result is returned as an exception. The exception may contain extra information, such as a human-readable description of the problem. If the repository is valid and can be connected to, no exception will be thrown. """ super(BZRTool, cls).check_repository(path, username, password, local_site_name) if local_site_name and sshutils.is_ssh_uri(path): path += '?rb-local-site-name=%s' % local_site_name try: tree, branch, repository, relpath = \ bzrdir.BzrDir.open_containing_tree_branch_or_repository(path) except AttributeError: raise RepositoryNotFoundError() except NotBranchError, e: raise RepositoryNotFoundError()
def _get_full_path(self, path, basedir=None): """Returns the full path to a file.""" parts = [self.repository.path.rstrip("/")] if basedir: parts.append(basedir.strip("/")) parts.append(path.strip("/")) final_path = "/".join(parts) if final_path.startswith("/"): final_path = "file://%s" % final_path if self.repository.local_site and sshutils.is_ssh_uri(final_path): final_path += "?rb-local-site-name=%s" % self.repository.local_site.name return final_path
def _get_full_path(self, path, basedir=None): """Returns the full path to a file.""" parts = [self.repository.path.rstrip("/")] if basedir: parts.append(basedir.strip("/")) parts.append(path.strip("/")) final_path = "/".join(parts) if final_path.startswith("/"): final_path = "file://%s" % final_path if self.repository.local_site and sshutils.is_ssh_uri(final_path): final_path += '?rb-local-site-name=%s' % \ self.repository.local_site.name return final_path
def check_repository(cls, path, username=None, password=None, local_site_name=None): """Check a repository configuration for validity. This should check if a repository exists and can be connected to. This will also check if the repository requires an HTTPS certificate. The result, if the repository configuration is invalid, is returned as an exception. The exception may contain extra information, such as a human-readable description of the problem. Many types of errors can be returned, based on issues with the repository, authentication, HTTPS certificate, or SSH keys. If the repository configuration is valid and a connection can be established, this will simply return. Subclasses should override this to provide more specific validation logic. Args: path (unicode): The repository path. username (unicode, optional): The optional username for the repository. password (unicode, optional): The optional password for the repository. local_site_name (unicode, optional): The name of the Local Site that owns this repository. This is optional. Raises: reviewboard.scmtools.errors.AuthenticationError: The provided username/password or the configured SSH key could not be used to authenticate with the repository. reviewboard.scmtools.errors.RepositoryNotFoundError: A repository could not be found at the given path. reviewboard.scmtools.errors.SCMError: There was a generic error with the repository or its configuration. Details will be provided in the error message. reviewboard.scmtools.errors.UnverifiedCertificateError: The SSL certificate on the server could not be verified. Information on the certificate will be returned in order to allow verification and acceptance using :py:meth:`accept_certificate`. reviewboard.ssh.errors.BadHostKeyError: An SSH path was provided, but the host key for the repository did not match the expected key. reviewboard.ssh.errors.SSHError: An SSH path was provided, but there was an error establishing the SSH connection. reviewboard.ssh.errors.SSHInvalidPortError: An SSH path was provided, but the port specified was not a valid number. Exception: An unexpected exception has ocurred. Callers should check for this and handle it. """ if sshutils.is_ssh_uri(path): username, hostname = SCMTool.get_auth_from_uri(path, username) logging.debug( "%s: Attempting ssh connection with host: %s, username: %s" % (cls.__name__, hostname, username)) try: sshutils.check_host(hostname, username, password, local_site_name) except SSHAuthenticationError as e: # Represent an SSHAuthenticationError as a standard # AuthenticationError. raise AuthenticationError(e.allowed_types, six.text_type(e), e.user_key) except: # Re-raise anything else raise
def check_repository(cls, path, username=None, password=None, local_site_name=None): """Check a repository configuration for validity. This should check if a repository exists and can be connected to. This will also check if the repository requires an HTTPS certificate. The result, if the repository configuration is invalid, is returned as an exception. The exception may contain extra information, such as a human-readable description of the problem. Many types of errors can be returned, based on issues with the repository, authentication, HTTPS certificate, or SSH keys. If the repository configuration is valid and a connection can be established, this will simply return. Subclasses should override this to provide more specific validation logic. Args: path (unicode): The repository path. username (unicode, optional): The optional username for the repository. password (unicode, optional): The optional password for the repository. local_site_name (unicode, optional): The name of the Local Site that owns this repository. This is optional. Raises: reviewboard.scmtools.errors.AuthenticationError: The provided username/password or the configured SSH key could not be used to authenticate with the repository. reviewboard.scmtools.errors.RepositoryNotFoundError: A repository could not be found at the given path. reviewboard.scmtools.errors.SCMError: There was a generic error with the repository or its configuration. Details will be provided in the error message. reviewboard.scmtools.errors.UnverifiedCertificateError: The SSL certificate on the server could not be verified. Information on the certificate will be returned in order to allow verification and acceptance using :py:meth:`accept_certificate`. reviewboard.ssh.errors.BadHostKeyError: An SSH path was provided, but the host key for the repository did not match the expected key. reviewboard.ssh.errors.SSHError: An SSH path was provided, but there was an error establishing the SSH connection. reviewboard.ssh.errors.SSHInvalidPortError: An SSH path was provided, but the port specified was not a valid number. Exception: An unexpected exception has ocurred. Callers should check for this and handle it. """ if sshutils.is_ssh_uri(path): username, hostname = SCMTool.get_auth_from_uri(path, username) logging.debug( "%s: Attempting ssh connection with host: %s, username: %s" % (cls.__name__, hostname, username) ) try: sshutils.check_host(hostname, username, password, local_site_name) except SSHAuthenticationError as e: # Represent an SSHAuthenticationError as a standard # AuthenticationError. raise AuthenticationError(e.allowed_types, six.text_type(e), e.user_key) except: # Re-raise anything else raise