Add flag for offical mobile app

This commit is contained in:
JonnyWong16 2020-06-20 16:16:35 -07:00
parent 9a932aea12
commit 7c801c2f5e
No known key found for this signature in database
GPG key ID: B1F1F9807184697A
6 changed files with 38 additions and 21 deletions

View file

@ -13,7 +13,11 @@ DOCUMENTATION :: END
% for device in sorted(devices_list, key=lambda k: k['device_name']):
<li class="mobile-device pointer" data-id="${device['id']}" data-name="${device['device_name']}">
<span>
<span class="toggle-left"><i class="fa fa-lg fa-fw fa-mobile"></i></span>
% if device['official']:
<span class="toggle-left"><i class="fa fa-lg fa-fw fa-mobile"></i></span>
% else:
<span class="toggle-left officail-tooltip" data-toggle="tooltip" data-placement="top" title="Unofficial or Unknown App"><i class="fa fa-lg fa-fw fa-exclamation-triangle"></i></span>
% endif
${device['friendly_name'] or device['device_name']} &nbsp;<span class="friendly_name">(${device['id']})</span>
<span class="toggle-right"><i class="fa fa-lg fa-fw fa-cog"></i></span>
<span class="toggle-right friendly_name" id="device-last_seen-${device['id']}">
@ -138,4 +142,6 @@ DOCUMENTATION :: END
}
verifiedDevice = true;
})
$('.officail-tooltip').tooltip();
</script>

View file

@ -1435,6 +1435,7 @@
<label>Registered Devices</label>
<p class="help-block">Register a new device using a QR code, or configure an existing device by clicking the settings icon on the right.</p>
<p id="app_api_msg" style="color: #eb8600;">Warning: The API must be enabled under <a data-tab-destination="web_interface" data-target="api_enabled">Web Interface</a> to use the app.</p>
<br />
<div class="row">
<div id="plexpy-mobile-devices-table" class="col-md-12">
<div class='text-muted'><i class="fa fa-refresh fa-spin"></i> Loading registered devices...</div>

View file

@ -745,7 +745,7 @@ def dbcheck():
c_db.execute(
'CREATE TABLE IF NOT EXISTS mobile_devices (id INTEGER PRIMARY KEY AUTOINCREMENT, '
'device_id TEXT NOT NULL UNIQUE, device_token TEXT, device_name TEXT, friendly_name TEXT, '
'last_seen INTEGER)'
'last_seen INTEGER, official INTEGER DEFAULT 0)'
)
# tvmaze_lookup table :: This table keeps record of the TVmaze lookups
@ -2001,6 +2001,19 @@ def dbcheck():
'ALTER TABLE mobile_devices ADD COLUMN last_seen INTEGER'
)
# Upgrade mobile_devices table from earlier versions
try:
c_db.execute('SELECT official FROM mobile_devices')
except sqlite3.OperationalError:
logger.debug("Altering database. Updating database table mobile_devices.")
c_db.execute(
'ALTER TABLE mobile_devices ADD COLUMN official INTEGER DEFAULT 0'
)
# Update official mobile device flag
for device_id, in c_db.execute('SELECT device_id FROM mobile_devices').fetchall():
c_db.execute('UPDATE mobile_devices SET official = ? WHERE device_id = ?',
[mobile_app.validate_device_id(device_id), device_id])
# Upgrade notifiers table from earlier versions
try:
c_db.execute('SELECT custom_conditions FROM notifiers')

View file

@ -416,11 +416,6 @@ class API2(object):
self._api_result_type = 'error'
return
elif not notifiers.ANDROIDAPP().validate_device_id(device_id=device_id):
self._api_msg = 'Device registration failed: invalid OneSignal Player ID.'
self._api_result_type = 'error'
return
result = mobile_app.add_mobile_device(device_id=device_id,
device_name=device_name,
device_token=self._api_apikey,

View file

@ -18,6 +18,7 @@
from __future__ import unicode_literals
from future.builtins import str
import requests
import threading
import plexpy
@ -34,6 +35,8 @@ else:
TEMP_DEVICE_TOKEN = None
INVALIDATE_TIMER = None
_ONESIGNAL_APP_ID = '3b4b666a-d557-4b92-acdf-e2c8c4b95357'
def set_temp_device_token(token=None):
global TEMP_DEVICE_TOKEN
@ -84,7 +87,8 @@ def add_mobile_device(device_id=None, device_name=None, device_token=None, frien
keys = {'device_id': device_id}
values = {'device_name': device_name,
'device_token': device_token}
'device_token': device_token,
'official': validate_device_id(device_id=device_id)}
if friendly_name:
values['friendly_name'] = friendly_name
@ -161,6 +165,14 @@ def set_last_seen(device_token=None):
return
def validate_device_id(device_id):
headers = {'Content-Type': 'application/json'}
payload = {'app_id': _ONESIGNAL_APP_ID}
r = requests.get('https://onesignal.com/api/v1/players/{}'.format(device_id), headers=headers, json=payload)
return r.status_code == 200
def blacklist_logger():
devices = get_mobile_devices()
for d in devices:

View file

@ -882,16 +882,6 @@ class ANDROIDAPP(Notifier):
'priority': 3
}
_ONESIGNAL_APP_ID = '3b4b666a-d557-4b92-acdf-e2c8c4b95357'
def validate_device_id(self, device_id):
headers = {'Content-Type': 'application/json'}
payload = {'app_id': self._ONESIGNAL_APP_ID}
r = requests.get('https://onesignal.com/api/v1/players/{}'.format(device_id), headers=headers, json=payload)
if r.status_code == 200:
return r.json()
def agent_notify(self, subject='', body='', action='', notification_id=None, **kwargs):
# Check mobile device is still registered
device = mobile_app.get_mobile_devices(device_id=self.config['device_id'])
@ -938,7 +928,7 @@ class ANDROIDAPP(Notifier):
#logger.debug("Nonce (base64): {}".format(base64.b64encode(nonce)))
#logger.debug("Salt (base64): {}".format(base64.b64encode(salt)))
payload = {'app_id': self._ONESIGNAL_APP_ID,
payload = {'app_id': mobile_app._ONESIGNAL_APP_ID,
'include_player_ids': [self.config['device_id']],
'contents': {'en': 'Tautulli Notification'},
'data': {'encrypted': True,
@ -951,7 +941,7 @@ class ANDROIDAPP(Notifier):
"Android app notifications will be sent unecrypted. "
"Install the library to encrypt the notifications.")
payload = {'app_id': self._ONESIGNAL_APP_ID,
payload = {'app_id': mobile_app._ONESIGNAL_APP_ID,
'include_player_ids': [self.config['device_id']],
'contents': {'en': 'Tautulli Notification'},
'data': {'encrypted': False,
@ -968,7 +958,7 @@ class ANDROIDAPP(Notifier):
db = database.MonitorDatabase()
try:
query = 'SELECT * FROM mobile_devices'
query = 'SELECT * FROM mobile_devices WHERE official = 1'
result = db.select(query=query)
except Exception as e:
logger.warn("Tautulli Notifiers :: Unable to retrieve Android app devices list: %s." % e)