Hello community,

here is the log from the commit of package python-shodan for openSUSE:Factory 
checked in at 2019-10-02 12:00:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-shodan (Old)
 and      /work/SRC/openSUSE:Factory/.python-shodan.new.2352 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-shodan"

Wed Oct  2 12:00:43 2019 rev:15 rq:734407 version:1.19.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-shodan/python-shodan.changes      
2019-09-11 10:35:35.283292834 +0200
+++ /work/SRC/openSUSE:Factory/.python-shodan.new.2352/python-shodan.changes    
2019-10-02 12:00:46.242743358 +0200
@@ -1,0 +2,11 @@
+Tue Oct  1 15:47:16 UTC 2019 - Marketa Calabkova <[email protected]>
+
+- Update to 1.19.0
+  * Ability to specify list of fields to include when converting to CSV/ Excel
+  * Filter the Shodan Firehose based on tags in the banner
+  * Fix bug that caused unicode error when printing domain information
+  * Add flag to let users get their IPv6 address shodan myip -6
+  * Add library methods for the new Notifications API
+  * New method to edit the list of IPs for an existing network alert
+
+-------------------------------------------------------------------

Old:
----
  shodan-1.15.0.tar.gz

New:
----
  shodan-1.19.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-shodan.spec ++++++
--- /var/tmp/diff_new_pack.WJCVoR/_old  2019-10-02 12:00:47.782739411 +0200
+++ /var/tmp/diff_new_pack.WJCVoR/_new  2019-10-02 12:00:47.802739359 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %{!?license: %global license %doc}
 Name:           python-shodan
-Version:        1.15.0
+Version:        1.19.0
 Release:        0
 Summary:        Python library and command-line utility for Shodan
 License:        MIT

++++++ shodan-1.15.0.tar.gz -> shodan-1.19.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shodan-1.15.0/CHANGELOG.md 
new/shodan-1.19.0/CHANGELOG.md
--- old/shodan-1.15.0/CHANGELOG.md      2019-08-13 03:15:35.000000000 +0200
+++ new/shodan-1.19.0/CHANGELOG.md      2019-09-29 20:29:46.000000000 +0200
@@ -1,6 +1,24 @@
 CHANGELOG
 =========
 
+1.19.0
+------
+* New method to edit the list of IPs for an existing network alert
+
+1.18.0
+------
+* Add library methods for the new Notifications API
+
+1.17.0
+------
+* Fix bug that caused unicode error when printing domain information (#106)
+* Add flag to let users get their IPv6 address **shodan myip -6**(#35)
+
+1.16.0
+------
+* Ability to specify list of fields to include when converting to CSV/ Excel 
(#107)
+* Filter the Shodan Firehose based on tags in the banner
+
 1.15.0
 ------
 * New option "--skip" for download command to help users resume a download
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shodan-1.15.0/PKG-INFO new/shodan-1.19.0/PKG-INFO
--- old/shodan-1.15.0/PKG-INFO  2019-08-13 03:40:03.000000000 +0200
+++ new/shodan-1.19.0/PKG-INFO  2019-09-29 20:33:46.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: shodan
-Version: 1.15.0
+Version: 1.19.0
 Summary: Python library and command-line utility for Shodan 
(https://developer.shodan.io)
 Home-page: http://github.com/achillean/shodan-python/tree/master
 Author: John Matherly
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shodan-1.15.0/setup.py new/shodan-1.19.0/setup.py
--- old/shodan-1.15.0/setup.py  2019-08-13 03:14:12.000000000 +0200
+++ new/shodan-1.19.0/setup.py  2019-09-29 20:13:33.000000000 +0200
@@ -7,7 +7,7 @@
 
 setup(
     name='shodan',
-    version='1.15.0',
+    version='1.19.0',
     description='Python library and command-line utility for Shodan 
(https://developer.shodan.io)',
     long_description=README,
     long_description_content_type='text/x-rst',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shodan-1.15.0/shodan/__main__.py 
new/shodan-1.19.0/shodan/__main__.py
--- old/shodan-1.15.0/shodan/__main__.py        2019-08-13 03:22:56.000000000 
+0200
+++ new/shodan-1.19.0/shodan/__main__.py        2019-09-22 01:40:22.000000000 
+0200
@@ -89,15 +89,23 @@
     'xlsx': ExcelConverter,
 }
 @main.command()
[email protected]('--fields', help='List of properties to output.', default=None)
 @click.argument('input', metavar='<input file>')
 @click.argument('format', metavar='<output format>', 
type=click.Choice(CONVERTERS.keys()))
-def convert(input, format):
+def convert(fields, input, format):
     """Convert the given input data file into a different format. The 
following file formats are supported:
 
     kml, csv, geo.json, images, xlsx
 
     Example: shodan convert data.json.gz kml
     """
+    # Check that the converter allows a custom list of fields
+    converter_class = CONVERTERS.get(format)
+    if fields:
+        if not hasattr(converter_class, 'fields'):
+            raise click.ClickException('File format doesnt support custom list 
of fields')
+        converter_class.fields = [item.strip() for item in fields.split(',')]  
# Use the custom fields the user specified
+    
     # Get the basename for the input file
     basename = input.replace('.json.gz', '').replace('.json', '')
 
@@ -113,7 +121,7 @@
     progress_bar_thread.start()
 
     # Initialize the file converter
-    converter = CONVERTERS.get(format)(fout)
+    converter = converter_class(fout)
 
     converter.process([input])
 
@@ -143,7 +151,7 @@
     click.echo('')
     for record in info['data']:
         click.echo(
-            '{:32}  {:14}  {}'.format(
+            u'{:32}  {:14}  {}'.format(
                 click.style(record['subdomain'], fg='cyan'),
                 click.style(record['type'], fg='yellow'),
                 record['value']
@@ -392,11 +400,17 @@
 
 
 @main.command()
-def myip():
[email protected]('--ipv6', '-6', is_flag=True, default=False, help='Try to use 
IPv6 instead of IPv4')
+def myip(ipv6):
     """Print your external IP address"""
     key = get_api_key()
 
     api = shodan.Shodan(key)
+
+    # Use the IPv6-enabled domain if requested
+    if ipv6:
+        api.base_url = 'https://apiv6.shodan.io'
+    
     try:
         click.echo(api.tools.myip())
     except shodan.APIError as e:
@@ -577,8 +591,9 @@
 @click.option('--countries', help='A comma-separated list of countries to grab 
data on.', default=None, type=str)
 @click.option('--asn', help='A comma-separated list of ASNs to grab data on.', 
default=None, type=str)
 @click.option('--alert', help='The network alert ID or "all" to subscribe to 
all network alerts on your account.', default=None, type=str)
[email protected]('--tags', help='A comma-separated list of tags to grab data 
on.', default=None, type=str)
 @click.option('--compresslevel', help='The gzip compression level (0-9; 0 = no 
compression, 9 = most compression', default=9, type=int)
-def stream(color, fields, separator, limit, datadir, ports, quiet, timeout, 
streamer, countries, asn, alert, compresslevel):
+def stream(color, fields, separator, limit, datadir, ports, quiet, timeout, 
streamer, countries, asn, alert, tags, compresslevel):
     """Stream data in real-time."""
     # Setup the Shodan API
     key = get_api_key()
@@ -604,9 +619,11 @@
         stream_type.append('asn')
     if alert:
         stream_type.append('alert')
+    if tags:
+        stream_type.append('tags')
 
     if len(stream_type) > 1:
-        raise click.ClickException('Please use --ports, --countries OR --asn. 
You cant subscribe to multiple filtered streams at once.')
+        raise click.ClickException('Please use --ports, --countries, --tags OR 
--asn. You cant subscribe to multiple filtered streams at once.')
 
     stream_args = None
 
@@ -627,6 +644,9 @@
 
     if countries:
         stream_args = countries.split(',')
+    
+    if tags:
+        stream_args = tags.split(',')
 
     # Flatten the list of stream types
     # Possible values are:
@@ -647,6 +667,7 @@
             'asn': api.stream.asn(args, timeout=timeout),
             'countries': api.stream.countries(args, timeout=timeout),
             'ports': api.stream.ports(args, timeout=timeout),
+            'tags': api.stream.tags(args, timeout=timeout),
         }.get(name, 'all')
 
     stream = _create_stream(stream_type, stream_args, timeout=timeout)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shodan-1.15.0/shodan/client.py 
new/shodan-1.19.0/shodan/client.py
--- old/shodan-1.15.0/shodan/client.py  2019-08-13 03:22:34.000000000 +0200
+++ new/shodan-1.19.0/shodan/client.py  2019-09-29 20:12:51.000000000 +0200
@@ -74,6 +74,72 @@
             """
             return self.parent._request('/dns/domain/{}'.format(domain), {})
 
+    class Notifier:
+
+        def __init__(self, parent):
+            self.parent = parent
+        
+        def create(self, provider, args, description=None):
+            """Get the settings for the specified notifier that a user has 
configured.
+
+            :param provider: Provider name
+            :type provider: str
+            :param args: Provider arguments
+            :type args: dict
+            :param description: Human-friendly description of the notifier
+            :type description: str
+            :returns: dict -- fields are 'success' and 'id' of the notifier
+            """
+            args['provider'] = provider
+
+            if description:
+                args['description'] = description
+            
+            return self.parent._request('/notifier', args, method='post')
+        
+        def edit(self, nid, args):
+            """Get the settings for the specified notifier that a user has 
configured.
+
+            :param nid: Notifier ID
+            :type nid: str
+            :param args: Provider arguments
+            :type args: dict
+            :returns: dict -- fields are 'success' and 'id' of the notifier
+            """
+            return self.parent._request('/notifier/{}'.format(nid), args, 
method='put')
+        
+        def get(self, nid):
+            """Get the settings for the specified notifier that a user has 
configured.
+
+            :param nid: Notifier ID
+            :type nid: str
+            :returns: dict -- object describing the notifier settings
+            """
+            return self.parent._request('/notifier/{}'.format(nid), {})
+
+        def list_notifiers(self):
+            """Returns a list of notifiers that the user has added.
+
+            :returns: A list of notifierse that are available on the account
+            """
+            return self.parent._request('/notifier', {})
+
+        def list_providers(self):
+            """Returns a list of supported notification providers.
+
+            :returns: A list of providers where each object describes a 
provider
+            """
+            return self.parent._request('/notifier/provider', {})
+        
+        def remove(self, nid):
+            """Delete the provided notifier.
+
+            :param nid: Notifier ID
+            :type nid: str
+            :returns: dict -- 'success' set to True if action succeeded
+            """
+            return self.parent._request('/notifier/{}'.format(nid), {}, 
method='delete')
+
     class Tools:
 
         def __init__(self, parent):
@@ -195,6 +261,7 @@
         self.dns = self.Dns(self)
         self.exploits = self.Exploits(self)
         self.labs = self.Labs(self)
+        self.notifier = self.Notifier(self)
         self.org = self.Organization(self)
         self.tools = self.Tools(self)
         self.stream = Stream(key, proxies=proxies)
@@ -573,6 +640,27 @@
 
         return response
 
+    def edit_alert(self, aid, ip):
+        """Edit the IPs that should be monitored by the alert.
+
+        :param aid: Alert ID
+        :type name: str
+        :param ip: Network range(s) to monitor
+        :type ip: str OR list of str
+
+        :returns: A dict describing the alert
+        """
+        data = {
+            'filters': {
+                'ip': ip,
+            },
+        }
+
+        response = api_request(self.api_key, '/shodan/alert/{}'.format(aid), 
data=data, params={}, method='post',
+                               proxies=self._session.proxies)
+
+        return response
+
     def alerts(self, aid=None, include_expired=True):
         """List all of the active alerts that the user created."""
         if aid:
@@ -617,3 +705,11 @@
     def unignore_alert_trigger_notification(self, aid, trigger, ip, port):
         """Re-enable trigger notifications for the provided IP and port"""
         return 
self._request('/shodan/alert/{}/trigger/{}/ignore/{}:{}'.format(aid, trigger, 
ip, port), {}, method='delete')
+    
+    def add_alert_notifier(self, aid, nid):
+        """Enable the given notifier for an alert that has triggers enabled."""
+        return self._request('/shodan/alert/{}/notifier/{}'.format(aid, nid), 
{}, method='put')
+    
+    def remove_alert_notifier(self, aid, nid):
+        """Remove the given notifier for an alert that has triggers enabled."""
+        return self._request('/shodan/alert/{}/notifier/{}'.format(aid, nid), 
{}, method='delete')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shodan-1.15.0/shodan/stream.py 
new/shodan-1.19.0/shodan/stream.py
--- old/shodan-1.15.0/shodan/stream.py  2019-02-11 01:05:46.000000000 +0100
+++ new/shodan-1.19.0/shodan/stream.py  2019-09-21 19:00:41.000000000 +0200
@@ -123,3 +123,14 @@
         stream = self._create_stream('/shodan/ports/%s' % ','.join([str(port) 
for port in ports]), timeout=timeout)
         for line in self._iter_stream(stream, raw):
             yield line
+
+    def tags(self, tags, raw=False, timeout=None):
+        """
+        A filtered version of the "banners" stream to only return banners that 
match the tags of interest.
+
+        :param tags: A list of tags to return banner data on.
+        :type tags: string[]
+        """
+        stream = self._create_stream('/shodan/tags/%s' % ','.join(tags), 
timeout=timeout)
+        for line in self._iter_stream(stream, raw):
+            yield line
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shodan-1.15.0/shodan.egg-info/PKG-INFO 
new/shodan-1.19.0/shodan.egg-info/PKG-INFO
--- old/shodan-1.15.0/shodan.egg-info/PKG-INFO  2019-08-13 03:40:03.000000000 
+0200
+++ new/shodan-1.19.0/shodan.egg-info/PKG-INFO  2019-09-29 20:33:46.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: shodan
-Version: 1.15.0
+Version: 1.19.0
 Summary: Python library and command-line utility for Shodan 
(https://developer.shodan.io)
 Home-page: http://github.com/achillean/shodan-python/tree/master
 Author: John Matherly


Reply via email to