Skip to content

Instantly share code, notes, and snippets.

@Steve-Tech
Last active August 24, 2021 10:04
Show Gist options
  • Save Steve-Tech/c929e74912abf2241588e15441a1d590 to your computer and use it in GitHub Desktop.
Save Steve-Tech/c929e74912abf2241588e15441a1d590 to your computer and use it in GitHub Desktop.
QNAP Switch System Python API Query
import requests
from base64 import b64encode
class QSS:
def __init__(self, baseurl, **kwargs):
self.baseurl = baseurl
self.session = requests.Session()
self.autologin = kwargs.get('autologin', False) # Keyword to check every request if logged in
self.username = kwargs.get('username', None) # Can be used instead of login function
self.password = kwargs.get('password', None)
def login(self, username, password, **kwargs):
self.autologin = kwargs.get('autologin', self.autologin)
if self.autologin: # Store login if autologin set
self.username = username
self.password = password
login_data = {"username": username, "password": b64encode(password.encode()).decode()} # Password is base64 encoded
login = self.session.post(self.baseurl + "api/v1/users/login", json = login_data).json()
assert login['error_code'] == 200, "Login Failed" # Check if logged in successfully
assert login['result'] != 'null', "Login Failed"
token = login['result']
self.session.headers.update({'authorization': "Bearer " + token}) # Set auth token
def getAPI(self, endpoint):
request = self.session.get(self.baseurl + endpoint).json()
if self.autologin and request['error_code'] == 401: # Login if needed and enabled
self.login(self.username, self.password)
request = self.session.get(self.baseurl + endpoint).json()
return request
def about(self):
return self.getAPI("api/about")
def lacp(self):
return self.getAPI("api/v1/lacp/info")
def firmware(self):
return self.getAPI("api/v1/firmware/info")
def system_board(self):
return self.getAPI("api/v1/system/board")
def lacp_group(self):
return self.getAPI("api/v1/lacp/group")
def system_info(self):
return self.getAPI("api/v1/system/info")
def sntp(self):
return self.getAPI("api/v1/sntp")
def clock(self):
return self.getAPI("api/v1/system/clock")
def timezone(self):
return self.getAPI("api/v1/sntp/timezone")
def sensor(self):
return self.getAPI("api/v1/system/sensor")
def ipv4(self):
return self.getAPI("api/v1/ip/ipv4/interface")
def ports_status(self):
return self.getAPI("api/v1/ports/status")
def ports(self):
return self.getAPI("api/v1/ports")
def resource(self):
return self.getAPI("api/v1/ports/resource")
def firmware(self):
return self.getAPI("api/v1/firmware/condition")
def ipv4_status(self):
return self.getAPI("api/v1/ip/ipv4/interface/status")
from QSS_API import QSS
root_url = "http://QSW-M408-4C/"
switch = QSS(root_url)
username = input("Username: ")
password = input("Password: ")
switch.login(username, password)
print(switch.about())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment