Skip to content

Commit 69733db

Browse files
committed
New Endpoint for device sharing
1 parent dc8b95a commit 69733db

File tree

3 files changed

+75
-74
lines changed

3 files changed

+75
-74
lines changed

Network/Lambda/Database/Data/Hardware.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ class Hardware(Data):
2828
"""Specifies the playback_url attribute column name"""
2929
S3_RECORDING_PREFIX = "s3_recording_prefix"
3030
"""Specifies the s3_recording_prefix attribute column name"""
31-
COLUMNS = [ID, RESOLUTION_NAME, CHANNEL_NAME, DEVICE_ID, NAME, ARN, STREAM_KEY, INGEST_ENDPOINT, PLAYBACK_URL, S3_RECORDING_PREFIX]
31+
CODE = "code"
32+
"""Specifies the code attribute column name"""
33+
COLUMNS = [ID, RESOLUTION_NAME, CHANNEL_NAME, DEVICE_ID, NAME, ARN, STREAM_KEY, INGEST_ENDPOINT, PLAYBACK_URL, S3_RECORDING_PREFIX, CODE]
3234
"""organizes the name, id, account id, and resolution name into an array"""
3335
EXPLICIT_ID = f"{TABLE}.{ID}"
3436
"""Creates an explicit version of the id variable column name"""
@@ -52,15 +54,17 @@ class Hardware(Data):
5254
"""Creates an explicit version of the playback_url name variable column name"""
5355
EXPLICIT_S3_RECORDING_PREFIX = f"{TABLE}.{S3_RECORDING_PREFIX}"
5456
"""Creates an explicit version of the s3_recording_prefix name variable column name"""
57+
EXPLICIT_CODE = f"{TABLE}.{CODE}"
58+
"""Creates an explicit version of the code name variable column name"""
5559
EXPLICIT_COLUMNS = [EXPLICIT_ID, EXPLICIT_RESOLUTION_NAME, EXPLICIT_CHANNEL_NAME, EXPLICIT_DEVICE_ID, EXPLICIT_NAME, EXPLICIT_ARN,
5660
EXPLICIT_STREAM_KEY, EXPLICIT_INGEST_ENDPOINT, EXPLICIT_PLAYBACK_URL,
57-
EXPLICIT_S3_RECORDING_PREFIX]
61+
EXPLICIT_S3_RECORDING_PREFIX, EXPLICIT_CODE]
5862
"""Organizes the explicit versions of the variables above into an array"""
5963

6064
def __init__(self, device_name: str, max_resolution: str, channel_name: str,
6165
arn: str, stream_key: str, ingest_endpoint: str,
6266
playback_url: str, device_id: str = "md5(ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000))",
63-
s3_recording_prefix: str = None, hardware_id: int = None):
67+
s3_recording_prefix: str = None, code: str = None, hardware_id: int = None):
6468
"""Initializes the name, max resolution, hardware id, and account id variables"""
6569
self.channel_name = channel_name
6670
"""channel_name : string< Store the channel_name of the hardware"""
@@ -80,6 +84,8 @@ def __init__(self, device_name: str, max_resolution: str, channel_name: str,
8084
"""playback_url : string< Store the playback_url of the hardware"""
8185
self.s3_recording_prefix = str(s3_recording_prefix)
8286
"""s3_recording_prefix : string< Store the s3_recording_prefix of the hardware"""
87+
self.code = str(code)
88+
"""code : string< Store the code of the hardware"""
8389
self.hardware_id = int(hardware_id) if hardware_id is not None else None
8490
"""hardware_id : int< Specify the hardware_id of the hardware (Optional)."""
8591

@@ -88,9 +94,9 @@ def __str__(self):
8894
return "[Hardware ] :MAX_RESOLUTION: {:<12} HARDWARE_ID:{:<12} " \
8995
"CHANNEL_NAME: {:<12} DEVICE_NAME:{:<12} DEVICE_ID:{:<12} " \
9096
"ARN:{:<12} STREAM_KEY:{:<12} INGEST_ENDPOINT:{:<12} PLAYBACK_URL:{:<12} " \
91-
"S3_RECORDING_PREFIX:{:<12}".format(
97+
"S3_RECORDING_PREFIX:{:<12} CODE:{:<12}".format(
9298
self.max_resolution, str(self.hardware_id), self.channel_name, self.device_name, self.device_id, self.arn,
93-
self.stream_key, self.ingest_endpoint, self.playback_url, self.s3_recording_prefix
99+
self.stream_key, self.ingest_endpoint, self.playback_url, self.s3_recording_prefix, self.code
94100
)
95101

96102
@staticmethod
@@ -113,11 +119,13 @@ def dict_to_object(payload: dict, explicit=False) -> "Hardware":
113119
payload[Hardware.EXPLICIT_CHANNEL_NAME], payload[Hardware.EXPLICIT_ARN],
114120
payload[Hardware.EXPLICIT_STREAM_KEY], payload[Hardware.EXPLICIT_INGEST_ENDPOINT],
115121
payload[Hardware.EXPLICIT_PLAYBACK_URL], payload[Hardware.EXPLICIT_DEVICE_ID],
116-
payload[Hardware.EXPLICIT_S3_RECORDING_PREFIX], payload[Hardware.EXPLICIT_ID])
122+
payload[Hardware.EXPLICIT_S3_RECORDING_PREFIX], payload[Hardware.EXPLICIT_CODE],
123+
payload[Hardware.EXPLICIT_ID])
117124
else:
118125
return Hardware(payload[Hardware.NAME], payload[Hardware.RESOLUTION_NAME],
119126
payload[Hardware.CHANNEL_NAME], payload[Hardware.ARN],
120127
payload[Hardware.STREAM_KEY], payload[Hardware.INGEST_ENDPOINT],
121128
payload[Hardware.PLAYBACK_URL], payload[Hardware.DEVICE_ID],
122-
payload[Hardware.S3_RECORDING_PREFIX], payload[Hardware.ID])
129+
payload[Hardware.S3_RECORDING_PREFIX], payload[Hardware.CODE],
130+
payload[Hardware.ID])
123131

Network/Lambda/Database/MPCDatabase.py

Lines changed: 9 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -886,49 +886,12 @@ def varidate_timestamp(self, table_name, field: str, value: str) -> bool:
886886
"sk_us-east-1_DdqDOfelQCU9_ofTx6s4yekNFgesMT8eLdWIS9k8zLV",
887887
"rtmps://1958e2d97d88.global-contribute.live-video.net:443/app/",
888888
"https://1958e2d97d88.us-east-1.playback.live-video.net/api/video/v1/us-east-1.052524269538.channel.HCBh4loJzOvw.m3u8")
889-
hardware2 = Hardware("Hardware-2", "1080p", "test-ivs",
890-
"arn:aws:ivs:us-east-1:052524269538:channel/HCBh4loJzOvw",
891-
"sk_us-east-1_DdqDOfelQCU9_ofTx6s4yekNFgesMT8eLdWIS9k8zLV",
892-
"rtmps://1958e2d97d88.global-contribute.live-video.net:443/app/",
893-
"https://1958e2d97d88.us-east-1.playback.live-video.net/api/video/v1/us-east-1.052524269538.channel.HCBh4loJzOvw.m3u8")
894-
hardware3 = Hardware("Hardware-3", "1080p", "test-ivs",
895-
"arn:aws:ivs:us-east-1:052524269538:channel/HCBh4loJzOvw",
896-
"sk_us-east-1_DdqDOfelQCU9_ofTx6s4yekNFgesMT8eLdWIS9k8zLV",
897-
"rtmps://1958e2d97d88.global-contribute.live-video.net:443/app/",
898-
"https://1958e2d97d88.us-east-1.playback.live-video.net/api/video/v1/us-east-1.052524269538.channel.HCBh4loJzOvw.m3u8")
899-
hardware4 = Hardware("Hardware-4", "1080p", "test-ivs",
900-
"arn:aws:ivs:us-east-1:052524269538:channel/HCBh4loJzOvw",
901-
"sk_us-east-1_DdqDOfelQCU9_ofTx6s4yekNFgesMT8eLdWIS9k8zLV",
902-
"rtmps://1958e2d97d88.global-contribute.live-video.net:443/app/",
903-
"https://1958e2d97d88.us-east-1.playback.live-video.net/api/video/v1/us-east-1.052524269538.channel.HCBh4loJzOvw.m3u8")
904-
hardware5 = Hardware("Hardware-5", "720p", "test-ivs",
905-
"arn:aws:ivs:us-east-1:052524269538:channel/HCBh4loJzOvw",
906-
"sk_us-east-1_DdqDOfelQCU9_ofTx6s4yekNFgesMT8eLdWIS9k8zLV",
907-
"rtmps://1958e2d97d88.global-contribute.live-video.net:443/app/",
908-
"https://1958e2d97d88.us-east-1.playback.live-video.net/api/video/v1/us-east-1.052524269538.channel.HCBh4loJzOvw.m3u8")
909-
hardware6 = Hardware("Hardware-6", "720p", "test-ivs",
910-
"arn:aws:ivs:us-east-1:052524269538:channel/HCBh4loJzOvw",
911-
"sk_us-east-1_DdqDOfelQCU9_ofTx6s4yekNFgesMT8eLdWIS9k8zLV",
912-
"rtmps://1958e2d97d88.global-contribute.live-video.net:443/app/",
913-
"https://1958e2d97d88.us-east-1.playback.live-video.net/api/video/v1/us-east-1.052524269538.channel.HCBh4loJzOvw.m3u8")
914-
hardware7 = Hardware("Hardware-7", "720p", "test-ivs",
915-
"arn:aws:ivs:us-east-1:052524269538:channel/HCBh4loJzOvw",
916-
"sk_us-east-1_DdqDOfelQCU9_ofTx6s4yekNFgesMT8eLdWIS9k8zLV",
917-
"rtmps://1958e2d97d88.global-contribute.live-video.net:443/app/",
918-
"https://1958e2d97d88.us-east-1.playback.live-video.net/api/video/v1/us-east-1.052524269538.channel.HCBh4loJzOvw.m3u8")
919-
920-
for h in [hardware1, hardware2, hardware3, hardware4, hardware5, hardware6, hardware7]:
889+
for h in [hardware1]:
921890
database.insert(h, ignore=True)
922891

923892
account_hardware_map = {
924893
id_a: {
925-
hardware1, hardware2, hardware3
926-
},
927-
id_a1: {
928-
hardware4, hardware5
929-
},
930-
id_a2: {
931-
hardware6, hardware7
894+
hardware1
932895
}
933896
}
934897

@@ -938,12 +901,12 @@ def varidate_timestamp(self, table_name, field: str, value: str) -> bool:
938901
Hardware.NAME, hardware.device_name)
939902
database.insert(Account_has_Hardware(id, id_h), True)
940903

941-
id_a_h = database.get_fields_by_field(Account_has_Hardware, Account_has_Hardware.HARDWARE_ID,
942-
Account_has_Hardware.ACCOUNT_ID, str(id_a))
943-
id_a1_h = database.get_fields_by_field(Account_has_Hardware, Account_has_Hardware.HARDWARE_ID,
944-
Account_has_Hardware.ACCOUNT_ID, str(id_a1))
945-
id_a2_h = database.get_fields_by_field(Account_has_Hardware, Account_has_Hardware.HARDWARE_ID,
946-
Account_has_Hardware.ACCOUNT_ID, str(id_a2))
904+
# id_a_h = database.get_fields_by_field(Account_has_Hardware, Account_has_Hardware.HARDWARE_ID,
905+
# Account_has_Hardware.ACCOUNT_ID, str(id_a))
906+
# id_a1_h = database.get_fields_by_field(Account_has_Hardware, Account_has_Hardware.HARDWARE_ID,
907+
# Account_has_Hardware.ACCOUNT_ID, str(id_a1))
908+
# id_a2_h = database.get_fields_by_field(Account_has_Hardware, Account_has_Hardware.HARDWARE_ID,
909+
# Account_has_Hardware.ACCOUNT_ID, str(id_a2))
947910

948911
data = database.get_all(Hardware)
949912
for d in data:
@@ -968,7 +931,7 @@ def varidate_timestamp(self, table_name, field: str, value: str) -> bool:
968931
for d in data:
969932
print(str(d))
970933

971-
print(id_a_h)
934+
# print(id_a_h)
972935
# recording1 = Recording("_import_616e5dcf2a2362.07330217_preview.mp4", "CURDATE()", "NOW()", account_id=id_a,
973936
# hardware_id=random.choice(id_a_h))
974937
# recording2 = Recording("_import_616e710b7f2ff0.35776522_preview.mp4", "CURDATE()", "NOW()", account_id=id_a,
@@ -987,22 +950,5 @@ def varidate_timestamp(self, table_name, field: str, value: str) -> bool:
987950
# print(str(d))
988951

989952
a = Account("Keita Nakashima", "Password", "tun05036@temple.edu")
990-
database.insert(a, ignore=True)
991-
992-
database.update(Account, MatchItem(Account.ID, 4),
993-
[MatchItem(Account.TOKEN, "md5(ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000))")])
994-
a = database.get_by_name(Account, "Keita Nakashima")
995-
print(a)
996-
max = database.get_max_id(Account)
997-
print(database.get_field_by_name(Account, Account.TOKEN, "Keita Nakashima"))
998-
print(max)
999-
1000-
database.delete(Account, [MatchItem(Account.NAME, "username")])
1001-
print("Value" + str(database.get_field_by_name(Account, Account.ID, "username")))
1002-
1003-
print(database.get_field_by_field(Account, Account.NAME, Account.EMAIL, "username1@email.com"))
1004-
print(MatchItem("Key", "NONE").value)
1005-
print(database.varidate_timestamp(Account, Account.NAME, "username1"))
1006-
1007953

1008954
database.close()

Network/Lambda/lambda_function.py

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,53 @@ def hardware_newname(event, pathPara, queryPara):
554554
return json_payload({"name": f"{prefix} {max(prefixed_numbers) + 1}"})
555555

556556

557+
@api.handle("/hardware/share", httpMethod=MPC_API.POST)
558+
def hardware_newname(event, pathPara, queryPara):
559+
"""Inserts new rows into the hardware table based on account id"""
560+
body = event["body"]
561+
if not database.verify_fields_by_joins(
562+
Account,
563+
[(Account_has_Hardware, Account_has_Hardware.EXPLICIT_ACCOUNT_ID,
564+
Account.EXPLICIT_ID),
565+
(Hardware, Hardware.EXPLICIT_HARDWARE_ID,
566+
Account_has_Hardware.EXPLICIT_HARDWARE_ID)],
567+
[(Account.TOKEN, body[Account.TOKEN]),
568+
(Hardware.EXPLICIT_DEVICE_ID, body[Hardware.DEVICE_ID])]):
569+
return json_payload({"message": Error.DEVICE_NOT_FOUND}, True)
570+
571+
code = random.randint(0, 999999)
572+
code_zero = str(code).zfill(6)
573+
if database.verify_field(Hardware, Hardware.CODE, code_zero):
574+
return json_payload({"message": "Failed to generate code"}, True)
575+
576+
database.update_fields(Hardware, (Hardware.DEVICE_ID, body[Hardware.DEVICE_ID]), [(Hardware.CODE, code_zero)])
577+
578+
result_code = database.get_field_by_field(Hardware, Hardware.CODE, Hardware.DEVICE_ID, body[Hardware.DEVICE_ID])
579+
580+
return json_payload({"code": result_code})
581+
582+
583+
@api.handle("/hardware/code", httpMethod=MPC_API.POST)
584+
def hardware_newname(event, pathPara, queryPara):
585+
"""Inserts new rows into the hardware table based on account id"""
586+
body = event["body"]
587+
588+
id_a = database.get_field_by_field(Account, Account.ID, Account.TOKEN, body[Account.TOKEN])
589+
id_h = database.get_field_by_field(Hardware, Hardware.ID, Hardware.CODE, body[Hardware.CODE])
590+
591+
if id_a is None:
592+
return json_payload({"message": Error.UNKNOWN_ACCOUNT}, True)
593+
594+
if id_h is None:
595+
return json_payload({"message": Error.DEVICE_NOT_FOUND}, True)
596+
597+
database.update_fields(Hardware, (Hardware.CODE, body[Hardware.CODE]), [(Hardware.CODE, None)])
598+
599+
database.insert(Account_has_Hardware(id_a, id_h))
600+
601+
return json_payload({"message": "Successfully connected account to device"})
602+
603+
557604
@api.handle("/hardware/{id}")
558605
def hardware_request_by_id(event, pathPara, queryPara):
559606
"""Gets information from the hardware table based on specified id"""
@@ -915,7 +962,7 @@ def send_email(event, pathPara, queryPara):
915962
def file_all(event, pathPara, queryPara):
916963
token = event["body"]["token"]
917964
if not database.verify_field(Account, Account.TOKEN, token):
918-
return json_payload({"message": "Account does not exist"})
965+
return json_payload({"message": Error.UNKNOWN_ACCOUNT}, True)
919966

920967
records = database.query(
921968
f"""Select distinct arn From Account
@@ -951,7 +998,7 @@ def file_all(event, pathPara, queryPara):
951998
def file_delete(event, pathPara, queryPara):
952999
token = event["body"]["token"]
9531000
if not database.verify_field(Account, Account.TOKEN, token):
954-
return json_payload({"message": "Account does not exist"})
1001+
return json_payload({"message": Error.UNKNOWN_ACCOUNT}, True)
9551002

9561003
# channelId/year-month-date-hour-minute-id
9571004
file_name = event["body"][Recording.NAME]
@@ -969,14 +1016,14 @@ def file_delete(event, pathPara, queryPara):
9691016

9701017
if __name__ == "__main__":
9711018
event = {
972-
"resource": "/hardware/delete",
1019+
"resource": "/hardware/all",
9731020
"httpMethod": MPC_API.POST,
9741021
"body": """{
9751022
"username": "John Smith",
9761023
"password": "Password",
9771024
"email": "default@temple.edu",
9781025
"code": "658186",
979-
"token": "f7af2efa2a0e81263b136664ca61e0d9",
1026+
"token": "afd39d162160bf1e0ef609efd8dc3530",
9801027
"file_name": "vIvvphhE1OJL/2023-4-27-17-35-t0QjMMgqDKRm",
9811028
"device_id": "5f2a07aa327872954a00d28027549a94567b5b76dfefed03b9c9bc77"
9821029
}"""

0 commit comments

Comments
 (0)