def on_login(self): """ Checking login and password in database and init start processes in main window. After close login windows and show main window. """ self.loginTmr.stop() state = False if (self.ui.edLogin.text() == "") or (self.ui.edPasswd.text() == ""): QtGui.QMessageBox.warning(self, 'Ошибка', 'Введите логин или пароль!', QtGui.QMessageBox.Yes) return if (self.ui.cbSave.checkState() == QtCore.Qt.Checked): self.save_passwd() mdb = MariaDB() if not mdb.connect(self._mw.MDBServer, self._mw.MDBUser, self._mw.MDBPasswd, "DokuMail"): QtGui.QMessageBox.critical(self, 'Ошибка', 'Ошибка соединения с Базой Данных!', QtGui.QMessageBox.Yes) return state = mdb.check_login(self.ui.edLogin.text(), self.ui.edPasswd.text()) username = mdb.get_alias_by_user(self.ui.edLogin.text()) mdb.close() if state == True: self.hide() WndParams().on_screen_center(self._mw) self._mw.setWindowTitle("Doku (" + username + ")") self._mw.show() import platform if platform.system() == "Windows" and self.isAuto: QtCore.QTimer().singleShot(1500, self.finish) self._mw.passwd = self.ui.edPasswd.text() self._mw.user = self.ui.edLogin.text() self._mw.loginWnd = self self._mw.init_app() else: QtGui.QMessageBox.critical(self, 'Ошибка', 'Неверный логин или пароль!', QtGui.QMessageBox.Yes)
def run(self): data = str try: data = AES256_decode_msg( self.conn.recv(1024), self.r_key ) data = json.loads(data) except: return if data["header"] == self.header and data["type"] == "login": self.usr = data["user"] h_pwd = data["passwd"] """ Check user's login and password """ mdb = MariaDB() if not mdb.connect(self.cfg["MariaDB"]["ip"], self.cfg["MariaDB"]["login"], self.cfg["MariaDB"]["password"], self.cfg["MariaDB"]["base"]): Log().local("SERVER", "Error connection to Database", LOG_CRITICAL, mdb) return if not mdb.check_login(self.usr, h_pwd): Log().local(self.usr, "Access denided. Client disconnected.", LOG_CRITICAL, mdb) mdb.close() self.conn.close() return """ User authorized """ answ = json.dumps({"header": self.header, "answ": "login-ok"}) self.conn.send( AES256_encode_msg(answ, self.r_key) ) """ Reciveing files """ lfiles = str("") now_date = datetime.date.today() now_time = datetime.datetime.now() now_time_str = str(now_time).split(" ")[1].split(".")[0] data = AES256_decode_msg( self.conn.recv(1024), self.r_key ) data = json.loads(data) """ Get messages """ if data["type"] == 'get-message': answ = {"header": self.header, "answ": ""} msgInfo = mdb.get_msg_info(self.usr) if msgInfo["type"] == "empty": mdb.change_state(self.usr, "isMsg", 0) answ["answ"] = "empty-msg" self.conn.send(AES256_encode_msg(json.dumps(answ), self.r_key)) self.conn.close() return idMsg = msgInfo["name"] fromMsg = msgInfo["from"] timeMsg = msgInfo["time"] answ = {"header": self.header, "answ": "msg", "From": mdb.get_alias_by_user(fromMsg), "Time": timeMsg} self.conn.send(AES256_encode_msg(json.dumps(answ), self.r_key)) self.conn.recv(1024) f = open("".join(("data/", self.usr, "/", idMsg, ".bin")), "rb") self.conn.send(f.read()) f.close() mdb.delete_message(self.usr, fromMsg, idMsg) Log().local(self.usr, "Get new message", LOG_INFO, mdb) """ Reciveing files """ if data["type"] == 'get-files': isUpdate = False if data["operation"] == "update": isUpdate = True elif data["operation"] == 'download': isUpdate = False files = [] if not isUpdate: files = mdb.get_file_list(self.usr) else: files = mdb.get_update_list() if files == '': answ = {"header": self.header, "type": "not-files"} self.sock.send( AES256_encode_msg(json.dumps(answ), self.r_key )) return answ = {"header": self.header, "count": len(files)} self.conn.send(AES256_encode_msg(json.dumps(answ), self.r_key)) self.conn.recv(1024) dest = str if isUpdate: Log().local(self.usr, "Start update", LOG_INFO, mdb) for sfile in files: answ = {"header": self.header, "type": "sf", "filename": sfile} self.conn.send(AES256_encode_msg(json.dumps(answ), self.r_key)) self.conn.recv(1024) Log().local(self.usr, "Get file " + sfile, LOG_INFO, mdb) if not isUpdate: dest = "".join(("data/", self.usr, "/files/", sfile, ".bin")) else: dest = "data/update/" + sfile f = open(dest, "rb") while True: data = f.read(4096) if len(data) != 0: self.conn.send(data) else: break f.close() self.conn.send(b"[end]") if not isUpdate: path = str mdb.delete_file(self.usr, sfile) os.remove("data/" + self.usr + "/files/" + sfile + ".bin") self.conn.recv(1024).decode('utf-8') Log().local(self.usr, "All files downloaded.", LOG_INFO, mdb) answ = {"header": self.header, "type": "end-retrieve"} self.conn.send(AES256_encode_msg(json.dumps(answ), self.r_key)) if not isUpdate: mdb.change_state(self.usr, "isFiles", 0) else: mdb.change_state(self.usr, "isUpdate", 0) self.conn.close() return """ Send messages """ if data["type"] == "send-message": toUsers = [] answ = {"header": self.header, "answ": ""} if (data["ToUsers"] == "$ALL_USERS$") and (not mdb.check_user_admin(self.usr)): answ["answ"] = "fail-access" self.conn.send(json.dumps(answ).encode("utf-8")) Log().local(self.usr, "User does not have privileges! Disconnected.", LOG_INFO, mdb) self.conn.close() return answ["answ"] = "ok" self.conn.send( AES256_encode_msg(json.dumps(answ), self.r_key)) msg = self.conn.recv(4096) msg_name = "".join((str(now_date.year), str(now_date.month), str(now_date.day), str(now_time.hour), str(now_time.minute), str(now_time.second))) if not data["ToUsers"] == "$ALL_USERS$": toUsers.append( data["ToUsers"] ) else: toUsers = mdb.get_user_list(self.usr) for toUsr in toUsers: if not os.path.exists("data/" + toUsr): os.makedirs("data/" + toUsr) msgFile = open("".join(("data/", toUsr, "/", msg_name, ".bin")), 'wb') msgFile.write(msg) msgFile.close() mdb.add_file(msg_name, 'msg', self.usr, toUsr, str(now_date), now_time_str) Log().local(self.usr, "Message to " + toUsr + " sended.", LOG_INFO, mdb) mdb.change_state(toUsr, "isMsg", 1) sz = os.path.getsize("".join(("data/", toUsr, "/", msg_name, ".bin"))) sz = round(sz / 1024, 2) mdb.stat(self.usr, "msg", str(sz), now_time_str, str(now_date)) answ["answ"] = "send-msg-ok" self.conn.send( AES256_encode_msg(json.dumps(answ), self.r_key) ) """ Upload backup message to server """ if self.cfg["MediaFire"]["enable"] == True: from firecloud import MediaFire fire = MediaFire() fire.set_config(self.cfg) fire.upload_msg("".join(("data/", toUsr, "/", msg_name, ".bin"))) return """ Create/Delete news log """ if data["type"] == "news": if data["action"] == "create": Log().local(self.usr, "".join(('Create news "', data["news-header"],'"')), LOG_INFO, mdb) elif data["action"] == "delete": Log().local(self.usr, "".join(('Delete news "', data["news-header"],'"')), LOG_INFO, mdb) return """ Send files """ if data["type"] == "send-files": self.conn.send(b'ok') toUsr = data["ToUser"] while True: answ = AES256_decode_msg(self.conn.recv(1024), self.r_key) answ = json.loads(answ) if not answ["header"] == self.header: return if answ["type"] == "end-retrieve": mdb.change_state(toUsr, "isFiles", 1) break if not os.path.exists("".join(("data/" + toUsr + "/files/"))): os.makedirs("".join(("data/", toUsr, "/files/"))) self.conn.send(b'recieveing...') fname = "" if answ["type"] == "sf": fname = answ["filename"] index = 0 newfn = fname while True: if not os.path.exists("".join(("data/", toUsr, "/files/", newfn, ".bin"))): fname = newfn break else: newfn = fname index += 1 fn = fname.split(".") nm = fn[0] + "(" + str(index) + ")" fe = fn[1] newfn = nm + "." + fe f = open("".join(("data/", toUsr, "/files/", fname, ".bin")), "wb") while True: data = self.conn.recv(4096) l = len(data) - 5 try: if data[l:] == b'[end]': f.write(data[:l]) f.close() lfiles = lfiles + fname + "," sz = os.path.getsize("".join(("data/", toUsr, "/files/", fname, ".bin"))) sz = round(sz / 1024, 2) mdb.stat(self.usr, "file", str(sz), now_time_str, str(now_date)) Log().local(self.usr, "Send file: " + fname + " to " + toUsr, LOG_INFO, mdb) mdb.add_file(fname, "file", self.usr, toUsr, str(now_date), now_time_str) self.conn.send("complete".encode('utf-8')) break except: Log().local(self.usr, "Error while downloading files", LOG_CRITICAL, mdb) f.write(data) mdb.close() self.conn.close()