Page 1 of 2

Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a7874])

Posted: December 9th, 2016, 3:59 pm
by zacharylm
Since the last update, SAB has started to fail when trying to send a notification via Pushbullet. Other applications (e.g. Couchpotato, Sonarr) have no issue doing the same. Below is the pertinent portion of the log. Please let me know if any other info is needed.

Code: Select all

2016-12-09 12:46:49,368::INFO::[api:792] Sending Pushbullet notification
2016-12-09 12:46:49,468::WARNING::[notifier:489] Failed to send pushbullet message
2016-12-09 12:46:49,469::INFO::[notifier:490] Traceback:
Traceback (most recent call last):
  File "/usr/share/sabnzbdplus/sabnzbd/notifier.py", line 481, in send_pushbullet
    'Content-type': 'application/json'})
  File "/usr/lib/python2.7/httplib.py", line 1017, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1051, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 1013, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 864, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 826, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 1220, in connect
    self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
  File "/usr/lib/python2.7/ssl.py", line 487, in wrap_socket
    ciphers=ciphers)
  File "/usr/lib/python2.7/ssl.py", line 243, in __init__
    self.do_handshake()
  File "/usr/lib/python2.7/ssl.py", line 405, in do_handshake
    self._sslobj.do_handshake()
SSLError: [Errno 8] _ssl.c:510: EOF occurred in violation of protocol

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 9th, 2016, 4:38 pm
by safihre
Looking up this message it seems to have to do something with an TLS problem.
We just use the build-in SSL provider from Python, nothing special really and nothing has changed between versions.
So I think it's something with Pushbullet's API certificate, but I can't tell you what exactly..

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 9th, 2016, 5:08 pm
by sander
As you're on Ubuntu, let's analyze your setup with this small script that does about the same as SABnzbd itself:

Code: Select all

import httplib, urllib, json

conn = httplib.HTTPSConnection('api.pushbullet.com:443')
conn.request('POST', '/v2/pushes', json.dumps({'type': 'note','device': "bla",'title': "title",'body': "msg"}),headers={'Authorization': 'Bearer ' + "dddd8d88d8d8", 'Content-type': 'application/json'})
res = conn.getresponse()

print res.status
print res.read()

Result on my Ubuntu:

Code: Select all

$ python test-pushbullet.py 
401
{"error":{"code":"invalid_access_token","type":"invalid_request","message":"Access token is missing or invalid.","cat":"(=^・ω・^)y="},"error_code":"invalid_access_token"}
So, a correct 401. No Ugly SSL / EOL message.

Please post back your result.

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 10th, 2016, 5:15 pm
by sander
@zacharylm ... follow up please ....

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 4:29 pm
by zacharylm
Apologies for the late response, apparently I need to check my forum setting as I never received an email notifying me of a reply to my post. Anyhoo, here's the result:

Code: Select all

Traceback (most recent call last):
  File "sabtest.py", line 4, in <module>
    conn.request('POST', '/v2/pushes', json.dumps({'type': 'note','device': "bla",'title': "title",'body': "msg"}),headers={'Authorization': 'Bearer ' + "dddd8d88d8d8", 'Content-type': 'application/json'})
  File "/usr/lib/python2.7/httplib.py", line 1017, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1051, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 1013, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 864, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 826, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 1220, in connect
    self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
  File "/usr/lib/python2.7/ssl.py", line 487, in wrap_socket
    ciphers=ciphers)
  File "/usr/lib/python2.7/ssl.py", line 243, in __init__
    self.do_handshake()
  File "/usr/lib/python2.7/ssl.py", line 405, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [Errno 8] _ssl.c:510: EOF occurred in violation of protocol

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 4:42 pm
by sander
OK, good that you follow up.

The result of the python script shows your Ubuntu / python / SSL setup has a problem. The problem is not in SABnzbd; you can generate the problem with a few lines of plain python code, without any SABnzbd involved.

Googling "ssl.SSLError: [Errno 8] _ssl.c:510: EOF occurred in violation of protocol" does not immediately make clear what is going on ... It could be related to SSL 2/3: python tries that first, but api.pushbullet.com does only support TLS 1 and higher (which is a good thing)

Which Ubuntu are you running? Fully updated?

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 4:54 pm
by zacharylm
Running 14.04.5 LTS (GNU/Linux 4.4.0-53-generic x86_64). As far as apt is telling me, and save for doing the release upgrade to 16.04, I'm up-to-date.

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 4:58 pm
by sander
zacharylm wrote:Running 14.04.5 LTS (GNU/Linux 4.4.0-53-generic x86_64). As far as apt is telling me, and save for doing the release upgrade to 16.04, I'm up-to-date.
I tried on my Ubuntu 14.04.5 (instead of my 16.04 as I did before) and ... ouch:

Code: Select all

sander@haring:~$ python test-pushbullet-1.py 
Traceback (most recent call last):
  File "test-pushbullet-1.py", line 4, in <module>
    conn.request('POST', '/v2/pushes', json.dumps({'type': 'note','device': "bla",'title': "title",'body': "msg"}),headers={'Authorization': 'Bearer ' + "dddd8d88d8d8", 'Content-type': 'application/json'})
  File "/usr/lib/python2.7/httplib.py", line 1017, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1051, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 1013, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 864, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 826, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 1220, in connect
    self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
  File "/usr/lib/python2.7/ssl.py", line 487, in wrap_socket
    ciphers=ciphers)
  File "/usr/lib/python2.7/ssl.py", line 243, in __init__
    self.do_handshake()
  File "/usr/lib/python2.7/ssl.py", line 405, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [Errno 8] _ssl.c:510: EOF occurred in violation of protocol
Same problem :-(

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 5:09 pm
by sander
Even with this 3-liner I get the error on my Ubuntu 14.04.5 with api.pushbullet.com (not with other HTTPS sites):

Code: Select all

import urllib2
response = urllib2.urlopen('https://api.pushbullet.com/')
html = response.read()
Result:

Code: Select all

$ python urllib2-2.py
Traceback (most recent call last):
  File "urllib2-2.py", line 2, in <module>
    response = urllib2.urlopen('https://api.pushbullet.com/')
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 404, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 422, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1222, in https_open
    return self.do_open(httplib.HTTPSConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1184, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 5:12 pm
by zacharylm
Hmmm. Well, I'm glad that it can be reproduced, but it sucks for the big picture. Also interesting that SABnzbd is the only program on my box that seems to be affected. Went back and was still able to do test notifications from Sonarr and CouchPotato (can't seem to find a way to test Headphones, though) so I wonder what is different in their implementations.

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 5:15 pm
by sander
It seems to be related to the version of Python:


Python 2.7.11 on Ubuntu 14.04.5 is OK:

Code: Select all

sander@haring:~/pushbullet-test$ /opt/python2711/bin/python urllib2-2.py
{"cat":"(=^.^=)","happy_to_see_you":true,"message":"Welcome to the Pushbullet API!"}

Python 2.7.6 on Ubuntu 14.04.5 is not OK:

Code: Select all

sander@haring:~/pushbullet-test$ python urllib2-2.py
Traceback (most recent call last):
  File "urllib2-2.py", line 2, in <module>
    response = urllib2.urlopen('https://api.pushbullet.com/')
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 404, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 422, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1222, in https_open
    return self.do_open(httplib.HTTPSConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1184, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>
sander@haring:~/pushbullet-test$ 
sander@haring:~/pushbullet-test$ 
sander@haring:~/pushbullet-test$ python -V
Python 2.7.6
The same error as you got;

Code: Select all

[Errno 8] _ssl.c:510: EOF occurred in violation of protocol>

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 5:26 pm
by sander
zacharylm wrote:Hmmm. Well, I'm glad that it can be reproduced, but it sucks for the big picture. Also interesting that SABnzbd is the only program on my box that seems to be affected. Went back and was still able to do test notifications from Sonarr and CouchPotato (can't seem to find a way to test Headphones, though) so I wonder what is different in their implementations.
And Sonarr and CouchPotato run on the same Ubuntu 14.04, with the same Python?

I checked CouchPotato, and it uses the same url

Code: Select all

 url = 'https://api.pushbullet.com/v2/%s'
so there is no difference there. :-(

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 11th, 2016, 5:47 pm
by zacharylm
As far as I can tell, yeah. I double-checked the init scripts in /defaults/etc and I don't seem to be calling out a different version of Python. Is there a better way to be sure?

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 12th, 2016, 9:20 am
by sander
Too bad: I tried plain HTTP as a workaround, but:

Code: Select all

2016-12-12 15:19:44,098::INFO::[api:797] Sending Pushbullet notification
2016-12-12 15:19:45,848::ERROR::[notifier:485] Bad response from Pushbullet (403): {"error":{"code":"invalid_request","type":"invalid_request","message":"This server is only accessible over HTTPS.","cat":"(=^â¥^=)"},"error_code":"invalid_request"}
... so alas HTTP is not a workaround.

EDIT:

I looked around, but I don't know how to solve this. So, workaround is to install Python 2.7.9 or higher on a Ubuntu 14.04, and use that.

Re: Pushbullet Notifications Failing (Ubuntu, v1.1.1 [33a787

Posted: December 12th, 2016, 3:43 pm
by sander
Good news: I got it working on my Ubuntu 14.04, both standalone and in SAB.

Standalone ... please fill out your pushbullet apikey and then test:

Code: Select all

import requests, json
device = "bla"
title = "my title"
msg = "my message"
apikey = "o.kdLtzjXCMzblblabla"   # Fill this out!!
if True:
        data_send = {"type": "note", "device": device, "title": title, "body": msg}
        res = requests.post('https://api.pushbullet.com/v2/pushes', data=json.dumps(data_send),
                headers={'Authorization': 'Bearer ' + apikey, 'Content-Type': 'application/json'})
        print res.status_code
If that works, I have a solution for SAB on with python 2.7.6.