-
Notifications
You must be signed in to change notification settings - Fork 0
/
Communication.py
283 lines (254 loc) · 13.8 KB
/
Communication.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
import json
from Authentication import Authentication
from DBAgent import DatabaseAgent
from ApplicationLogger import Logger
import re
import nacl.signing
import nacl.encoding
from flask import Flask, request , jsonify
from ModuleLauncher import ModuleLauncher
from dataVerify import dataVerify
import sessionMange
import binascii
def getDict(o):
return o.__dict__
class Communication:
def __init__(self):
self.auth = Authentication()
self.log = Logger()
self.rejx = dataVerify()
# self.modulauncher = ModuleLauncher()
# self.launcher = ModuleLauncher()
# def seralize(self,dicto):
# #self.deseralize(data_json)
# obj = json.dumps(dicto,default=getDict)
# return obj
def deserialize(self, jsonData):
try:
deserialized = json.loads(jsonData)
print(deserialized)
return deserialized
except Exception as expc:
self.log.logEvent("communication deserialize",2,"exception ocureed"+str(expc))
def verifyStructure(self, msgDict):
try:
containsHeader = False
containsBody = False
containsExtraField = False
containsSignature = False
for key in msgDict:
if key == "Header":
containsHeader = True
elif key == "Body":
containsBody = True
elif key == "Signature":
containsSignature = True
else:
containsExtraField = True
break
return containsHeader and containsSignature and containsBody and not containsExtraField
except Exception as expc:
self.log.logEvent("communication verify structure function",2,"exception ocureed"+str(expc))
def createMessage(self, dictData, message):
try:
message.header = dictData["Header"]
message.body = dictData["Body"]
message.Signature = dictData["Signature"]
except Exception as expc:
self.log.logEvent("communication at create message function",2,"exception ocureed"+str(expc))
def sanitizeBody(self,msgBody):
try:
success = False
for key in msgBody:
if self.sanitizeString(key):
if type(msgBody[key]) is dict:
if not self.sanitizeBody(msgBody[key]):
return False
else:
success = True
self.sanitizeBody(msgBody[key])
else:
if self.sanitizeString(msgBody[key]):
success = True
continue
else:
success = False
else:
return False
return success
except Exception as expc:
self.log.logEvent("communication at sanatizeBody function",2,"exception ocureed"+str(expc))
def sanitizeHeader(self,msgheader):
try:
success = True
for msg in msgheader:
if self.sanitizeString(msg):
if self.sanitizeString(msgheader[msg]):
continue
else:
success = False
else:
success = False
return success
except Exception as expc:
self.log.logEvent("communication at sanitizeHeader function",2,"exception ocureed"+str(expc))
def sanitizeString(self, stringData):
try:
text = str(stringData)
print("data is" + text)
ignore_words = [';','"','$','&&','../','*','<','>','%3C','%3E','\'','--','1,2','\x00','`','(',')','file://','input://']
for ch in ignore_words:
if ch in text:
print("1false")
return False
return True
except Exception as expc:
self.log.logEvent("communication at sanitizeString function",2,"exception ocureed"+str(expc))
#######################################################################master handle#######################################################################33
def receiveRequest(self,data,clientid,apiEndPoint):
# try:
print("JSON : ",data)
msg = Message()
signString = str(data).split("Body")[1]
plainMsg = ((signString.split("Signature")[0])[:-2])[2:]
dictData = self.deserialize(data)
if self.verifyStructure(dictData):
self.createMessage(dictData, msg)
print("MESSAGE HEADER: ")
for key in msg.Signature:
print("keys ", key)
if key == "signature":
print(" encrypetedkey will be there")
elif key == "Key":
print("verfykey will be there")
else:
self.log.logEvent("Communication",3,"signatrue part is missing")
print("signature missing there")
return "signature missing there"
verifyKey = msg.Signature["Key"]
signature = msg.Signature["signature"]
contStr = ""
# print("signString..........................",plainMsg)
# sigtest = self.auth.signatureVerify(verifyKey, signature,plainMsg)
# print("Signature Verified::::::::::::::::::::::::::::::::::::::", sigtest)
if self.auth.signatureVerify(verifyKey, signature,plainMsg):
if self.rejx.verifyData(msg.body):
if clientid == "signup" :
modLauncher = ModuleLauncher(clientid, msg.body,verifyKey,'/register')
return modLauncher.handleRequest()
elif clientid == "masterregister":
modLauncher = ModuleLauncher(clientid,msg.body,verifyKey, apiEndPoint)
return modLauncher.handleRequest()
elif clientid == "master":
modLauncher = ModuleLauncher(clientid,msg.body,verifyKey, apiEndPoint)
# return modLauncher.handleRequest()
resDict = modLauncher.handleRequest()
body = resDict["Body"]
print("body part is....",body)
jsnfyBody = json.dumps(body)
print("jsnfyBody) = ",jsnfyBody)
if resDict["Header"]["status"] == "success":
signkey1 = sessionMange.session[verifyKey]["signkey"]
verifykey1 = sessionMange.session[verifyKey]["verifykey"]
print("verifykey type",type(verifykey1))
verify_key_hex =verifykey1.encode(encoder=nacl.encoding.HexEncoder)
print("signature private key type",type(signkey1))
print("type(jsnfyBody) = ", type(jsnfyBody))
sessionSign = signkey1.sign(jsnfyBody.encode("utf-8"))
print("sessionkey type",type(sessionSign))
print("sessionkey ............on backend",sessionSign)
sHexSignature = binascii.hexlify(bytes(sessionSign))
resDict["Signature"]["signature"] = (sHexSignature)
resDict["Signature"]["Key"] = (verify_key_hex)
print("siggened signature message................................",resDict)
return resDict
elif apiEndPoint == "/login":
# modLauncher = ModuleLauncher(clientid,msg.body,verifyKey, apiEndPoint)
# return modLauncher.handleRequest()
try:
modLauncher = ModuleLauncher(clientid,msg.body,verifyKey, apiEndPoint)
resDict = modLauncher.handleRequest()
body = resDict["Body"]
print("body part is....",body)
jsnfyBody = json.dumps(body)
print("jsnfyBody) = ",jsnfyBody)
if resDict["Header"]["status"] == "success":
signkey1 = sessionMange.session[verifyKey]["signkey"]
verifykey1 = sessionMange.session[verifyKey]["verifykey"]
print("verifykey type",type(verifykey1))
verify_key_hex =verifykey1.encode(encoder=nacl.encoding.HexEncoder)
print("signature private key type",type(signkey1))
print("type(jsnfyBody) = ", type(jsnfyBody))
sessionSign = signkey1.sign(jsnfyBody.encode("utf-8"))
print("sessionkey type",type(sessionSign))
print("sessionkey ............",sessionSign)
sHexSignature = binascii.hexlify(bytes(sessionSign))
resDict["Signature"]["signature"] = (sHexSignature)
resDict["Signature"]["Key"] = (verify_key_hex)
return resDict
except Exception as expc:
print("expection",expc)
response = {"Header":{"status":"fail","module":"communication"},"Body":{"message":"wrong username or password","data":""},"Signature":{"signature":"","Key":""}}
return response
elif apiEndPoint == "/logout":
modLauncher = ModuleLauncher(clientid,msg.body,verifyKey, apiEndPoint)
return modLauncher.handleRequest()
# resDict = modLauncher.handleRequest()
# body = resDict["Body"]
# print("body part is....",body)
# jsnfyBody = str(jsonify(body))
# signkey1 = sessionMange.session[verifyKey]["signkey"]
# verifykey1 = sessionMange.session[verifyKey]["verifykey"]
# verify_key_hex =verifykey1.encode(encoder=nacl.encoding.HexEncoder)
# print("signature private key type",type(signkey1))
# print("type(jsnfyBody) = ", type(jsnfyBody))
# sessionSign = signkey1.sign(jsnfyBody.encode("utf-8"))
# print("sessionkey type",type(sessionSign))
# sHexSignature = binascii.hexlify(bytes(sessionSign))
# resDict["Signature"]["signature"] = (sHexSignature)
# resDict["Signature"]["Key"] = (verify_key_hex)
# return resDict
elif self.auth.uRolePermissionCheck(clientid,apiEndPoint,verifyKey) :
# try:
modLauncher = ModuleLauncher(clientid,msg.body,verifyKey, apiEndPoint)
resDict = modLauncher.handleRequest()
body = resDict["Body"]
print("body part is....",body)
jsnfyBody = json.dumps(body)
print("jsnfyBody) = ",jsnfyBody)
if resDict["Header"]["status"] == "success":
signkey1 = sessionMange.session[verifyKey]["signkey"]
verifykey1 = sessionMange.session[verifyKey]["verifykey"]
print("verifykey type",type(verifykey1))
verify_key_hex =verifykey1.encode(encoder=nacl.encoding.HexEncoder)
print("signature private key type",type(signkey1))
print("type(jsnfyBody) = ", type(jsnfyBody))
sessionSign = signkey1.sign(jsnfyBody.encode("utf-8"))
print("sessionkey type",type(sessionSign))
print("sessionkey ............",sessionSign)
sHexSignature = binascii.hexlify(bytes(sessionSign))
resDict["Signature"]["signature"] = (sHexSignature)
resDict["Signature"]["Key"] = (verify_key_hex)
return resDict
# except Exception as expc:
# print("expection",expc)
# self.log.logEvent("communication",2,"role checking function ")
else:
print(">>............................wrong datastructure")
return " wrong datastructure at communication"
else:
self.log.logEvent("Communication",3,"signature is wrong")
return "error occured"
elif self.sanitizeBody(msg.body) and self.sanitizeHeader(msg.header):
print("Message body verified")
else:
self.log.logEvent("Communication",3,"invalied requst formate")
print("Invalid body structure format ")
return "Invalid body structure format "
# except Exception as expc:
# self.log.logEvent("communication at reciveRequest function",2,"exception ocureed"+str(expc))
class Message:
def __init__(self):
self.header = {}
self.body = {}
self.Signature = {}