Last active
August 24, 2021 10:04
-
-
Save Steve-Tech/c929e74912abf2241588e15441a1d590 to your computer and use it in GitHub Desktop.
QNAP Switch System Python API Query
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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