Beispiel #1
0
  def _save_as_config(self, path):
    conf = stem.util.conf.Config()
    conf.set('name', self.name)
    conf.set('synopsis', self.synopsis)
    conf.set('description', self.description)

    if self.man_commit:
      conf.set('man_commit', self.man_commit)

    if self.stem_commit:
      conf.set('stem_commit', self.stem_commit)

    for k, v in self.commandline_options.items():
      conf.set('commandline_options', '%s => %s' % (k, v), overwrite = False)

    for k, v in self.signals.items():
      conf.set('signals', '%s => %s' % (k, v), overwrite = False)

    for k, v in self.files.items():
      conf.set('files', '%s => %s' % (k, v), overwrite = False)

    for k, v in self.config_options.items():
      conf.set('config_options.%s.category' % k, v.category)
      conf.set('config_options.%s.name' % k, v.name)
      conf.set('config_options.%s.usage' % k, v.usage)
      conf.set('config_options.%s.summary' % k, v.summary)
      conf.set('config_options.%s.description' % k, v.description)

    conf.save(path)
Beispiel #2
0
  def _write(fallbacks: Dict[str, 'stem.directory.Fallback'], tor_commit: str, stem_commit: str, headers: Mapping[str, str], path: str = FALLBACK_CACHE_PATH) -> None:
    """
    Persists fallback directories to a location in a way that can be read by
    from_cache().

    :param fallbacks: mapping of fingerprints to their fallback directory
    :param tor_commit: tor commit the fallbacks came from
    :param stem_commit: stem commit the fallbacks came from
    :param headers: metadata about the file these came from
    :param path: location fallbacks will be persisted to
    """

    conf = stem.util.conf.Config()
    conf.set('tor_commit', tor_commit)
    conf.set('stem_commit', stem_commit)

    for k, v in headers.items():
      conf.set('header.%s' % k, v)

    for directory in sorted(fallbacks.values(), key = lambda x: x.fingerprint):
      fingerprint = directory.fingerprint
      conf.set('%s.address' % fingerprint, directory.address)
      conf.set('%s.or_port' % fingerprint, str(directory.or_port))
      conf.set('%s.dir_port' % fingerprint, str(directory.dir_port))
      conf.set('%s.nickname' % fingerprint, directory.nickname)
      conf.set('%s.has_extrainfo' % fingerprint, 'true' if directory.has_extrainfo else 'false')

      if directory.orport_v6:
        conf.set('%s.orport6_address' % fingerprint, str(directory.orport_v6[0]))
        conf.set('%s.orport6_port' % fingerprint, str(directory.orport_v6[1]))

    conf.save(path)
Beispiel #3
0
    def save(self, path):
        """
    Persists the manual content to a given location.

    :param str path: path to save our manual content to

    :raises: **IOError** if unsuccessful
    """

        conf = stem.util.conf.Config()
        conf.set('name', self.name)
        conf.set('synopsis', self.synopsis)
        conf.set('description', self.description)

        if self.man_commit:
            conf.set('man_commit', self.man_commit)

        if self.stem_commit:
            conf.set('stem_commit', self.stem_commit)

        for k, v in self.commandline_options.items():
            conf.set('commandline_options',
                     '%s => %s' % (k, v),
                     overwrite=False)

        for k, v in self.signals.items():
            conf.set('signals', '%s => %s' % (k, v), overwrite=False)

        for k, v in self.files.items():
            conf.set('files', '%s => %s' % (k, v), overwrite=False)

        for k, v in self.config_options.items():
            conf.set('config_options.%s.category' % k, v.category)
            conf.set('config_options.%s.name' % k, v.name)
            conf.set('config_options.%s.usage' % k, v.usage)
            conf.set('config_options.%s.summary' % k, v.summary)
            conf.set('config_options.%s.description' % k, v.description)

        conf.save(path)
Beispiel #4
0
  def save(self, path):
    """
    Persists the manual content to a given location.

    :param str path: path to save our manual content to

    :raises: **IOError** if unsuccessful
    """

    conf = stem.util.conf.Config()
    conf.set('name', self.name)
    conf.set('synopsis', self.synopsis)
    conf.set('description', self.description)

    if self.man_commit:
      conf.set('man_commit', self.man_commit)

    if self.stem_commit:
      conf.set('stem_commit', self.stem_commit)

    for k, v in self.commandline_options.items():
      conf.set('commandline_options', '%s => %s' % (k, v), overwrite = False)

    for k, v in self.signals.items():
      conf.set('signals', '%s => %s' % (k, v), overwrite = False)

    for k, v in self.files.items():
      conf.set('files', '%s => %s' % (k, v), overwrite = False)

    for k, v in self.config_options.items():
      conf.set('config_options.%s.category' % k, v.category)
      conf.set('config_options.%s.name' % k, v.name)
      conf.set('config_options.%s.usage' % k, v.usage)
      conf.set('config_options.%s.summary' % k, v.summary)
      conf.set('config_options.%s.description' % k, v.description)

    conf.save(path)
Beispiel #5
0
  print('Latest tor commit editing fallback directories: %s' % fallback_dir_commit)
  print('Current stem commit: %s' % stem_commit)
  print('')

  cached_fallback_directories = stem.descriptor.remote.FallbackDirectory.from_cache()
  latest_fallback_directories = stem.descriptor.remote.FallbackDirectory.from_remote()

  if cached_fallback_directories == latest_fallback_directories:
    print('Fallback directories are already up to date, nothing to do.')
    sys.exit(0)

  print('Differences detected...\n')
  print(stem.descriptor.remote._fallback_directory_differences(cached_fallback_directories, latest_fallback_directories))

  conf = stem.util.conf.Config()
  conf.set('tor_commit', fallback_dir_commit)
  conf.set('stem_commit', stem_commit)

  for directory in sorted(latest_fallback_directories.values(), lambda x, y: cmp(x.fingerprint, y.fingerprint)):
    fingerprint = directory.fingerprint
    conf.set('%s.address' % fingerprint, directory.address)
    conf.set('%s.or_port' % fingerprint, str(directory.or_port))
    conf.set('%s.dir_port' % fingerprint, str(directory.dir_port))

    if directory.orport_v6:
      conf.set('%s.orport6_address' % fingerprint, str(directory.orport_v6[0]))
      conf.set('%s.orport6_port' % fingerprint, str(directory.orport_v6[1]))

  conf.save(stem.descriptor.remote.CACHE_PATH)
    stem_commit = stem.util.system.call('git rev-parse HEAD')[0]
  except IOError as exc:
    print("Unable to determine stem's current commit: %s" % exc)
    sys.exit(1)

  print('Latest tor commit editing fallback directories: %s' % fallback_dir_commit)
  print('Current stem commit: %s' % stem_commit)
  print('')

  cached_fallback_directories = stem.descriptor.remote.FallbackDirectory.from_cache()
  latest_fallback_directories = stem.descriptor.remote.FallbackDirectory.from_remote()

  if cached_fallback_directories == latest_fallback_directories:
    print('Fallback directories are already up to date, nothing to do.')
    sys.exit(0)

  print('Differences detected...\n')
  print(stem.descriptor.remote._fallback_directory_differences(cached_fallback_directories, latest_fallback_directories))

  conf = stem.util.conf.Config()
  conf.set('tor_commit', fallback_dir_commit)
  conf.set('stem_commit', stem_commit)

  for directory in latest_fallback_directories.values():
    fingerprint = directory.fingerprint
    conf.set('%s.address' % fingerprint, directory.address)
    conf.set('%s.or_port' % fingerprint, str(directory.or_port))
    conf.set('%s.dir_port' % fingerprint, str(directory.dir_port))

  conf.save(stem.descriptor.remote.CACHE_PATH)