mirror of https://github.com/akuker/RASCSI.git
71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
"""
|
|
Module for commands sent to the RaSCSI backend service.
|
|
"""
|
|
from os import path
|
|
from unidecode import unidecode
|
|
from socket_cmds import send_pb_command
|
|
import rascsi_interface_pb2 as proto
|
|
|
|
def device_list(token):
|
|
"""
|
|
Sends a DEVICES_INFO command to the server.
|
|
Returns a list of dicts with info on all attached devices.
|
|
"""
|
|
command = proto.PbCommand()
|
|
command.operation = proto.PbOperation.DEVICES_INFO
|
|
command.params["token"] = token
|
|
data = send_pb_command(command.SerializeToString())
|
|
result = proto.PbResult()
|
|
result.ParseFromString(data)
|
|
|
|
dlist = []
|
|
i = 0
|
|
|
|
while i < len(result.devices_info.devices):
|
|
did = result.devices_info.devices[i].id
|
|
dtype = proto.PbDeviceType.Name(result.devices_info.devices[i].type)
|
|
dstat = result.devices_info.devices[i].status
|
|
dprop = result.devices_info.devices[i].properties
|
|
|
|
# Building the status string
|
|
dstat_msg = []
|
|
if dstat.protected and dprop.protectable:
|
|
dstat_msg.append("Write-Protected")
|
|
if dstat.removed and dprop.removable:
|
|
dstat_msg.append("No Media")
|
|
if dstat.locked and dprop.lockable:
|
|
dstat_msg.append("Locked")
|
|
|
|
# Transliterate non-ASCII chars in the file name to ASCII
|
|
dfile = unidecode(path.basename(result.devices_info.devices[i].file.name))
|
|
dven = result.devices_info.devices[i].vendor
|
|
dprod = result.devices_info.devices[i].product
|
|
|
|
dlist.append({
|
|
"id": did,
|
|
"device_type": dtype,
|
|
"status": ", ".join(dstat_msg),
|
|
"file": dfile,
|
|
"vendor": dven,
|
|
"product": dprod,
|
|
})
|
|
i += 1
|
|
|
|
return dlist
|
|
|
|
|
|
def is_token_auth(token):
|
|
"""
|
|
Sends a CHECK_AUTHENTICATION command to the server.
|
|
Tells you whether RaSCSI backend is protected by a token password or not.
|
|
Returns (bool) status and (str) msg.
|
|
"""
|
|
command = proto.PbCommand()
|
|
command.operation = proto.PbOperation.CHECK_AUTHENTICATION
|
|
command.params["token"] = token
|
|
|
|
data = send_pb_command(command.SerializeToString())
|
|
result = proto.PbResult()
|
|
result.ParseFromString(data)
|
|
return {"status": result.status, "msg": result.msg}
|