def setup(self, args):
        user_config = get_user_config(self.settings)
        ssh_key_path = self._get_setup_ssh_key_path(user_config, args)
        if not is_key_valid(ssh_key_path):
            # If given key path is not default and does not exist
            # we raise an error
            if ssh_key_path != get_default_ssh_key_path():
                raise InputErrorException('WrongPublicKey')

            # If given key path was the default one, we create the key
            # pair for the user
            print >> sys.stderr, "Key '{0}' seems to not be a RSA public key or not found!".format(ssh_key_path)
            create_new_default_ssh_keys()

        ssh_key_content = readContentOf(ssh_key_path)

        ssh_auth = self._get_setup_ssh_auth(self.settings, user_config, args)

        if args.email:
            set_user_config(self.settings, email=args.email)

        try:
            users = self.api.read_users()
            self.api.create_user_key(
                users[0]['username'],
                ssh_key_content)

        except ConflictDuplicateError:
            # Key already added, nothing to do.
            pass

        set_user_config(self.settings,
                        ssh_auth=ssh_auth,
                        ssh_path=ssh_key_path)