diff --git a/README.md b/README.md index 4607d2e..acd65d4 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ pip install -r requirements.txt ## Configuration -Copy the env-dist file to .env and set your legacy SatNOGS Network credentials. +Copy the env-dist file to .env and set your SatNOGS Network API token. ## Test run diff --git a/env-dist b/env-dist index 1cc532e..26ed44e 100644 --- a/env-dist +++ b/env-dist @@ -1,5 +1,4 @@ # Copy this file to .env and complete the information needed -# Username and password to SatNOGS Network using the old authentication system -NETWORK_USERNAME = '' -NETWORK_PASSWORD = '' +# Your SatNOGS network API token +NETWORK_API_TOKEN = '' diff --git a/satnogs_client.py b/satnogs_client.py index 761892c..06f4d09 100644 --- a/satnogs_client.py +++ b/satnogs_client.py @@ -145,19 +145,20 @@ def get_groundstation_info(ground_station_id, allow_testing): return {} -def schedule_observation(session, norad_cat_id, uuid, ground_station_id, starttime, endtime): - - obsURL = '{}/observations/new/'.format(settings.NETWORK_BASE_URL) # Observation URL - # Get the observation/new/ page to get the CSFR token - obs = session.get(obsURL) - obs_html = lxml.html.fromstring(obs.text) - hidden_inputs = obs_html.xpath(r'//form//input[@type="hidden"]') - form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs} - form["obs-0-transmitter_uuid"] = uuid - form["obs-0-start"] = starttime - form["obs-0-end"] = endtime - form["obs-0-ground_station"] = ground_station_id - form["obs-TOTAL_FORMS"] = str(1) - form["obs-INITIAL_FORMS"] = str(0) - session.post(obsURL, data=form, headers={'referer': obsURL}) - logging.debug("Scheduled!") +def schedule_observation(uuid, + ground_station_id, + starttime, + endtime): + observation = [{'ground_station': ground_station_id, + 'transmitter_uuid': uuid, + 'start': starttime, + 'end': endtime}] + try: + r = requests.post('{}/api/observations/'.format(settings.NETWORK_BASE_URL), + json=observation, + headers={'Authorization': 'Token {}'.format(settings.NETWORK_API_TOKEN)}) + r.raise_for_status() + logging.debug("Scheduled!") + except requests.HTTPError: + err = r.json() + logging.info("Failed to schedule pass: {}".format(err)) diff --git a/schedule_single_station.py b/schedule_single_station.py index e054052..b7d9dd5 100755 --- a/schedule_single_station.py +++ b/schedule_single_station.py @@ -1,6 +1,5 @@ #!/usr/bin/env python from __future__ import division -import requests import ephem from datetime import datetime, timedelta import os @@ -271,28 +270,6 @@ def main(): # Login and schedule passes if schedule and schedule_needed: - loginUrl = '{}/accounts/login/'.format(settings.NETWORK_BASE_URL) # login URL - session = requests.session() - login = session.get(loginUrl) # Get login page for CSFR token - login_html = lxml.html.fromstring(login.text) - login_hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]') # Get CSFR token - form = {x.attrib["name"]: x.attrib["value"] for x in login_hidden_inputs} - form["login"] = settings.NETWORK_USERNAME - form["password"] = settings.NETWORK_PASSWORD - - # Login - result = session.post(loginUrl, - data=form, - headers={ - 'referer': loginUrl, - 'user-agent': 'satnogs-auto-scheduler/0.0.1' - }) - if result.url.endswith("/accounts/login/"): - logging.info("Authentication failed") - sys.exit(-1) - else: - logging.info("Authentication successful") - # Sort passes scheduledpasses_sorted = sorted(scheduledpasses, key=lambda satpass: satpass['tr']) @@ -303,10 +280,10 @@ def main(): (int(satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']), satpass['priority'], satpass['uuid'], satpass['name'].rstrip())) - schedule_observation(session, int(satpass['id']), satpass['uuid'], + schedule_observation(satpass['uuid'], ground_station_id, - satpass['tr'].strftime("%Y-%m-%d %H:%M:%S") + ".000", - satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000") + satpass['tr'].strftime("%Y-%m-%d %H:%M:%S"), + satpass['ts'].strftime("%Y-%m-%d %H:%M:%S")) logging.info("All passes are scheduled. Exiting!") diff --git a/settings.py b/settings.py index fb68013..dc92d60 100644 --- a/settings.py +++ b/settings.py @@ -9,5 +9,4 @@ MAX_NORAD_CAT_ID = config('MAX_NORAD_CAT_ID', default=90000) MIN_PASS_DURATION = config('MIN_PASS_DURATION', default=2) # In minutes # Credentials -NETWORK_USERNAME = config('NETWORK_USERNAME', default='') -NETWORK_PASSWORD = config('NETWORK_PASSWORD', default='') +NETWORK_API_TOKEN = config('NETWORK_API_TOKEN', default='')