add /api/v1/sim-cards GET endpoint
This commit is contained in:
@@ -24,6 +24,8 @@ file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(messag
|
|||||||
app.logger.addHandler(file_handler)
|
app.logger.addHandler(file_handler)
|
||||||
app.logger.setLevel(logging.INFO)
|
app.logger.setLevel(logging.INFO)
|
||||||
|
|
||||||
|
msg_403_not_primary = "Only a PRIMARY device can perform this action"
|
||||||
|
|
||||||
|
|
||||||
@app.route("/api/v1/login", methods=["POST"])
|
@app.route("/api/v1/login", methods=["POST"])
|
||||||
def login():
|
def login():
|
||||||
@@ -69,5 +71,19 @@ def refresh_token():
|
|||||||
@jwt_required()
|
@jwt_required()
|
||||||
def get_all_devices():
|
def get_all_devices():
|
||||||
if get_jwt()["typ"] != "PRIMARY":
|
if get_jwt()["typ"] != "PRIMARY":
|
||||||
return make_response(jsonify(msg="Only a PRIMARY device can list all devices"), 403)
|
return make_response(jsonify(msg=msg_403_not_primary), 403)
|
||||||
return make_response(jsonify([d.to_dict() for d in db.get_all_devices(cur)]), 200)
|
return make_response(jsonify([d.to_dict() for d in db.get_all_devices(cur)]), 200)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/api/v1/sim-cards", methods=["GET"])
|
||||||
|
@jwt_required()
|
||||||
|
def get_sim_cards_by_device():
|
||||||
|
if not is_primary(get_jwt()):
|
||||||
|
return make_response(jsonify(msg=msg_403_not_primary), 403)
|
||||||
|
|
||||||
|
access_key = request.args.get('access_key', None)
|
||||||
|
return make_response(jsonify([s.to_dict() for s in db.get_sim_cards_by_device(cur, access_key)]), 200)
|
||||||
|
|
||||||
|
|
||||||
|
def is_primary(jwt):
|
||||||
|
return jwt["typ"] == "PRIMARY"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from dto import Device
|
from dto import Device, SimCard
|
||||||
|
|
||||||
|
|
||||||
def get_all_devices(cur) -> list[Device]:
|
def get_all_devices(cur) -> list[Device]:
|
||||||
@@ -10,3 +10,13 @@ def get_all_devices(cur) -> list[Device]:
|
|||||||
devices.append(Device.convert(item))
|
devices.append(Device.convert(item))
|
||||||
return devices
|
return devices
|
||||||
|
|
||||||
|
|
||||||
|
def get_sim_cards_by_device(cur, access_key: str) -> list[SimCard]:
|
||||||
|
if access_key is None or not access_key:
|
||||||
|
return []
|
||||||
|
|
||||||
|
sim_cards_from_db = cur.execute("SELECT phone_number, device_access_key FROM sim_cards WHERE device_access_key = ?", (access_key,)).fetchall()
|
||||||
|
sim_cards = []
|
||||||
|
for item in sim_cards_from_db:
|
||||||
|
sim_cards.append(SimCard.convert(item))
|
||||||
|
return sim_cards
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
class Device:
|
from dataclasses import dataclass
|
||||||
def __init__(self, access_key, device_type, name):
|
|
||||||
self.access_key = access_key
|
|
||||||
self.device_type = device_type
|
|
||||||
self.name = name
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Device:
|
||||||
|
access_key: str
|
||||||
|
device_type: str
|
||||||
|
name: str
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
return {
|
return {
|
||||||
@@ -15,3 +16,16 @@ class Device:
|
|||||||
def convert(device_from_db) -> Device:
|
def convert(device_from_db) -> Device:
|
||||||
return Device(*device_from_db)
|
return Device(*device_from_db)
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SimCard:
|
||||||
|
phone_number: str
|
||||||
|
device_access_key: str
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return {
|
||||||
|
'phone_number': self.phone_number,
|
||||||
|
'device_access_key': self.device_access_key
|
||||||
|
}
|
||||||
|
|
||||||
|
def convert(sim_from_db) -> SimCard:
|
||||||
|
return SimCard(*sim_from_db)
|
||||||
|
|||||||
+8
-1
@@ -14,7 +14,7 @@ cur = con.cursor()
|
|||||||
cur.execute("CREATE TABLE devices(access_key, secret_key_hash, type, name)")
|
cur.execute("CREATE TABLE devices(access_key, secret_key_hash, type, name)")
|
||||||
cur.execute("CREATE TABLE messages(content, ts_received, ts_sent, sender, recipient)")
|
cur.execute("CREATE TABLE messages(content, ts_received, ts_sent, sender, recipient)")
|
||||||
cur.execute("CREATE TABLE sim_events(sim_id, ts, note, cost, currency)")
|
cur.execute("CREATE TABLE sim_events(sim_id, ts, note, cost, currency)")
|
||||||
cur.execute("CREATE TABLE sim_cards(phone_number, device_id)")
|
cur.execute("CREATE TABLE sim_cards(phone_number, device_access_key)")
|
||||||
|
|
||||||
pw1_hash = flask_bcrypt.generate_password_hash('pw1').decode('utf-8')
|
pw1_hash = flask_bcrypt.generate_password_hash('pw1').decode('utf-8')
|
||||||
pw2_hash = flask_bcrypt.generate_password_hash('pw2').decode('utf-8')
|
pw2_hash = flask_bcrypt.generate_password_hash('pw2').decode('utf-8')
|
||||||
@@ -24,6 +24,13 @@ cur.execute("""
|
|||||||
('test_access_key2', ?, 'SECONDARY', 'test-secondary')
|
('test_access_key2', ?, 'SECONDARY', 'test-secondary')
|
||||||
""", (pw1_hash, pw2_hash))
|
""", (pw1_hash, pw2_hash))
|
||||||
|
|
||||||
|
cur.execute("""
|
||||||
|
INSERT INTO sim_cards VALUES
|
||||||
|
('+420123456789', 'test_access_key'),
|
||||||
|
('+421000111222', 'test_access_key'),
|
||||||
|
('+422999888777', 'test_access_key2')
|
||||||
|
""")
|
||||||
|
|
||||||
con.commit()
|
con.commit()
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user