def itemChange(self, item):
     value = item.text()
     if str(value).isdigit():
         if len(value) < 2:
             value = "0" + value
             item.setText(value)
             row = item.row()
             count = 0
             for card in self.cardList:
                 if count == row:
                     FileHelper().deleteCard(card)
                     newCard = Card(card.name,card.card,card.rank,card.cardType,card.attribute,card.speedDuel,card.atkPoints,card.defPoints,value)
                     FileHelper().saveCard(newCard)
                 count = count + 1
         elif len(value) == 2:
             item.setText(value)
             row = item.row()
             count = 0
             for card in self.cardList:
                 if count == row:
                     FileHelper().deleteCard(card)
                     newCard = Card(card.name,card.card,card.rank,card.cardType,card.attribute,card.speedDuel,card.atkPoints,card.defPoints,value)
                     FileHelper().saveCard(newCard)
                 count = count + 1
     else:
         QMessageBox.about(self.tableWidget,"Error", "Anzahl darf nur Zahlen enthalten. Wert wurde nicht gespeicher.")
Beispiel #2
0
 def createTableViewButton(self):
     tableViewThread = threading.Thread(
         target=TableViewWindow().createTableViewWindow(
             FileHelper().loadCards(),
             self.dontShowCardsWithQuantityZero.get()))
     tableViewThread.daemon = True
     tableViewThread.start()
Beispiel #3
0
	def importScripts(self):
		self.decEncHelper = DecodingEncodingHelper()
		self.channelManager = ChannelManager()
		self.clientManager = ClientManager()
		self.inputHandler = InputHandler(self.upTime)
		self.fileHelper = FileHelper()
		self.logHelper = LogHelper()
Beispiel #4
0
 def createSearchWindowButton(self):
     searchEditThread = threading.Thread(
         target=SearchWindow().createSearchWindow(
             FileHelper().loadCards(),
             self.dontShowCardsWithQuantityZero.get()))
     searchEditThread.daemon = True
     searchEditThread.start()
Beispiel #5
0
    def importScripts(self):
        self.decEncHelper = DecodingEncodingHelper()
        self.channelManager = ChannelManager()
        self.clientManager = ClientManager()
        self.fileHelper = FileHelper()
        self.logHelper = LogHelper()

        self.mysqlHelper = MysqlHelper()
 def deleteRow(self):
     for row in self.tableWidget.selectedIndexes():
         rowCount = row.row()
     count = 0
     for card in self.cardList:
         if count == rowCount:
             FileHelper().deleteCard(card)
         count = count + 1
     messagebox.showinfo("Info", "Zum Hauptmenu zurückkehren um aktualisierte tabelle zu erhalten.")
 def createCard(self):
     self.verifyEntry()
     if self.creatCardBool:
         rank = str(self.rankEntry.get())
         if len(rank) < 2:
             rank = "0" + rank
         quantity = str(self.quantityEntry.get())
         if len(quantity) < 2:
             quantity = "0" + quantity
         atkPoints = str(self.atkPointsEntry.get())
         if len(atkPoints) == 1:
             atkPoints = "000" + atkPoints
         elif len(atkPoints) == 2:
             atkPoints = "00" + atkPoints
         elif len(atkPoints) == 3:
             atkPoints = "0" + atkPoints
         defPoints = str(self.defPointsEntry.get())
         if len(defPoints) == 1:
             defPoints = "000" + defPoints
         elif len(defPoints) == 2:
             defPoints = "00" + defPoints
         elif len(defPoints) == 3:
             defPoints = "0" + defPoints
         card = Card(str(self.nameEntry.get()),
                     str(self.cardEntryVariable.get()), rank,
                     str(self.typeEntryVariable.get()),
                     str(self.attributeEntryVariable.get()),
                     str(self.speedDuelEntryVariable.get()), atkPoints,
                     defPoints, quantity)
         FileHelper().saveCard(card)
         self.cardList.append(card)
         self.cardCreatorWindow.destroy()
         FileHelper().backupCards()
         try:
             if self.mode.get() == 1:
                 self.createCardCreatorWindow(self.cardList, self.mode)
         except AttributeError:
             var = None
     self.creatCardBool = True
Beispiel #8
0
 def __init__(self):
     self.fileHelper = FileHelper()
     self.logHelper = LogHelper()
     config = self.fileHelper.getConfig("Mysql Server Config")
     try:
         self.connection = mysql.connector.connect(user=config.username,
                                                   password=config.password,
                                                   host=config.ip,
                                                   database=config.database)
     except:
         print("Couldn't establish connection to mysql database(" +
               config.database + ") with ip: " +
               config.ip)  #TODO: find a way to handle with this
Beispiel #9
0
    def __init__(self):

        msg = QMessageBox()
        msg.setText("Hinweis: Nur Codes Deutscher Karten verwenden.")
        msg.exec()

        super(Main, self).__init__()
        self.mainWindow = uic.loadUi("CardOrganizer3.ui", self)
        self.cardList = FileHelper().loadCards()

        self.codeEntry = self.mainWindow.codeEntry
        self.quantityEntry = self.mainWindow.quantityEntry
        self.speedDualEntry = self.mainWindow.speedDualEntry

        self.mainWindow.addButton.clicked.connect(self.addCard)
Beispiel #10
0
    def __init__(self, announce):
        self.mysqlMode = 0  # 0 = Mysql; 1 = MysqlLite

        self.fileHelper = FileHelper()
        self.logHelper = LogHelper()
        config = self.fileHelper.getConfig("Mysql Server Config")
        try:
            self.connection = mysql.connector.connect(user=config.username,
                                                      password=config.password,
                                                      host=config.ip,
                                                      database=config.database)
        except:
            self.mysqlMode = 1
            if (announce):
                print(
                    "[" + datetime.datetime.now().strftime("%H:%M:%S") +
                    " ERROR]: Couldn't establish connection to mysql database("
                    + config.database + ") with ip: " + config.ip)
                print("[" + datetime.datetime.now().strftime("%H:%M:%S") +
                      " INFO]: Falling back to MysqlLite.")

            #sqllite

            self.conn = self.create_connection("data/database.db")

            checkForAccountsTable = "SELECT * FROM accounts"

            result = self.executeCommandOnLite(self.conn,
                                               checkForAccountsTable)
            try:
                for row in result:
                    if row[0] == 1:
                        result = True
                    else:
                        result = False
            except:
                result = False
            if result == False:
                createTableStatement = "CREATE TABLE accounts (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, password TEXT NOT NULL, email TEXT NOT NULL, rank TEXT NOT NULL, loggedIn TINYINT NOT NULL DEFAULT '0');"
                print("[" + datetime.datetime.now().strftime("%H:%M:%S") +
                      " INFO]: Created accounts table in MysqlLite database.")
                self.executeCommandOnLite(self.conn, createTableStatement)
Beispiel #11
0
    def handle(self):
        logHelper = LoggingHelper()
        fileHelper = FileHelper()

        self.client = self.request

        self.clients = Clients()
        if self.appendClient:
            logHelper.printAndWriteServerLog("[Server/Info] " +
                                             str(self.client_address[0]) +
                                             ":" +
                                             str(self.client_address[1]) +
                                             " connected to the server")
            for clientInList in fileHelper.readTXTFile("data/", "banList"):
                clientInListString = clientInList.split(":")
                try:
                    banTime = clientInListString[1]
                except IndexError:
                    var = None
                if self.client_address[0] + "\n" in clientInList:
                    logHelper.printAndWriteServerLog(
                        "[Server/Info] " + str(self.client_address[0]) + ":" +
                        str(self.client_address[1]) +
                        " is permanantly banned on the server")
                    self.client.sendall(
                        self.StringToBytes(
                            "405[Client/Info] You are permanantly banned on this server"
                        ))
                    self.client.close()
                    self.appendClient = False
                elif self.client_address[0] + ":" + banTime in clientInList:
                    currTime = datetime.datetime.now().timestamp()
                    banTime = banTime[:-1]
                    if (currTime > float(banTime)):
                        print("1")
                    else:
                        print("2")
                    logHelper.printAndWriteServerLog(
                        "[Server/Info] " + str(self.client_address[0]) + ":" +
                        str(self.client_address[1]) +
                        " is temporary banned on the server. Remaining Time: "
                        + str(int((float(banTime) - currTime) / 60)) +
                        "Minutes")
                    self.client.sendall(
                        self.StringToBytes(
                            "405[Client/Info] You are temporary banned on this server. Remaining Time: "
                            + str(int((float(banTime) - currTime) / 60)) +
                            "Minutes"))
                    self.client.close()
                    self.appendClient = False
                else:
                    self.clients.addClient(self.client, "None")
                    self.appendClient = False

        try:
            self.data = self.BytesToString(self.client.recv(1024).strip())
            if len(self.data[6:]) == 0:
                logHelper.printAndWriteServerLog("[Server/Info] " +
                                                 str(self.client_address[0]) +
                                                 ":" +
                                                 str(self.client_address[1]) +
                                                 " sent client informations")
                self.handleRequest(self.data, self.client)
            else:
                logHelper.printAndWriteChannelLog("[Server/Channel/Info] " +
                                                  str(self.client_address[0]) +
                                                  ":" +
                                                  str(self.client_address[1]) +
                                                  " " + self.data[3:])
                self.handleRequest(self.data, self.client)
        except:
            logHelper.printAndWriteServerLog("[Server/Error] " +
                                             str(self.client_address[0]) +
                                             ":" +
                                             str(self.client_address[1]) +
                                             " closed connection unexpectedly")
            self.clients.removeClient(self.client, self.username)
Beispiel #12
0
    def __init__(self):
        self.cardList = FileHelper().loadCards()
        self.app = QApplication([])
        msg = QMessageBox()
        msg.setText("Hinweis: Nur Codes Deutscher Karten verwenden.")
        msg.exec()
        window = QWidget()
        layout = QGridLayout()
        self.codeEntry = QLineEdit()
        self.quantityEntry = QLineEdit()
        self.speedDualEntry = QCheckBox("Speed Dual")
        addButton = QPushButton("Hinzufügen")
        addButton.clicked.connect(self.addCard)

        self.trapCardsTable = QTableWidget()
        rows = 0
        for card in self.cardList:
            if card.cardObject == "trap":
                rows = rows + 1
        self.trapCardsTable.setRowCount(rows)
        self.trapCardsTable.setColumnCount(5)
        self.trapCardsTable.setHorizontalHeaderLabels(
            ["Name:", "Typ:", "Text:", "Speed Dual:", "Anzahl:"])
        self.trapCardsTable.setSortingEnabled(True)
        self.trapCardsTable.resizeColumnsToContents()
        self.trapCardsTable.resizeRowsToContents()
        header = self.trapCardsTable.horizontalHeader()
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(4, QtWidgets.QHeaderView.ResizeToContents)
        count = 0
        for card in self.cardList:
            if card.cardObject == "trap":
                self.trapCardsTable.setItem(count, 0,
                                            QTableWidgetItem(card.name))
                self.trapCardsTable.setItem(count, 1,
                                            QTableWidgetItem(card.trapType))
                self.trapCardsTable.setItem(count, 2,
                                            QTableWidgetItem(card.text))
                self.trapCardsTable.setItem(count, 3,
                                            QTableWidgetItem(card.speedDuel))
                self.trapCardsTable.setItem(count, 4,
                                            QTableWidgetItem(card.quantity))
                count = count + 1

        self.spellCardsTable = QTableWidget()
        rows = 0
        for card in self.cardList:
            if card.cardObject == "spell":
                rows = rows + 1
        self.spellCardsTable.setRowCount(rows)
        self.spellCardsTable.setColumnCount(5)
        self.spellCardsTable.setHorizontalHeaderLabels(
            ["Name:", "Typ:", "Text:", "Speed Dual:", "Anzahl:"])
        self.spellCardsTable.setSortingEnabled(True)
        self.spellCardsTable.resizeColumnsToContents()
        self.spellCardsTable.resizeRowsToContents()
        header = self.spellCardsTable.horizontalHeader()
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(4, QtWidgets.QHeaderView.ResizeToContents)
        count = 0
        for card in self.cardList:
            if card.cardObject == "spell":
                self.spellCardsTable.setItem(count, 0,
                                             QTableWidgetItem(card.name))
                self.spellCardsTable.setItem(count, 1,
                                             QTableWidgetItem(card.spellType))
                self.spellCardsTable.setItem(count, 2,
                                             QTableWidgetItem(card.text))
                self.spellCardsTable.setItem(count, 3,
                                             QTableWidgetItem(card.speedDuel))
                self.spellCardsTable.setItem(count, 4,
                                             QTableWidgetItem(card.quantity))
                count = count + 1

        self.monsterCardsTable = QTableWidget()
        rows = 0
        for card in self.cardList:
            if card.cardObject == "monster":
                rows = rows + 1
        self.monsterCardsTable.setRowCount(rows)
        self.monsterCardsTable.setColumnCount(10)
        self.monsterCardsTable.setHorizontalHeaderLabels([
            "Name:", "Attribut:", "Level:", "Monstertyp:", "Kartentyp:",
            "ATK:", "DEF:", "Text:", "Speed Duel:", "Anzahl:"
        ])
        self.monsterCardsTable.setSortingEnabled(True)
        self.monsterCardsTable.resizeColumnsToContents()
        self.monsterCardsTable.resizeRowsToContents()
        header = self.monsterCardsTable.horizontalHeader()
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(4, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(5, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(6, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(8, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(9, QtWidgets.QHeaderView.ResizeToContents)
        count = 0
        for card in self.cardList:
            if card.cardObject == "monster":
                self.monsterCardsTable.setItem(count, 0,
                                               QTableWidgetItem(card.name))
                self.monsterCardsTable.setItem(
                    count, 1, QTableWidgetItem(card.attribute))
                self.monsterCardsTable.setItem(count, 2,
                                               QTableWidgetItem(card.level))
                self.monsterCardsTable.setItem(
                    count, 3, QTableWidgetItem(card.monsterType))
                self.monsterCardsTable.setItem(count, 4,
                                               QTableWidgetItem(card.cardType))
                self.monsterCardsTable.setItem(
                    count, 5, QTableWidgetItem(card.atkPoints))
                self.monsterCardsTable.setItem(
                    count, 6, QTableWidgetItem(card.defPoints))
                self.monsterCardsTable.setItem(count, 7,
                                               QTableWidgetItem(card.text))
                self.monsterCardsTable.setItem(
                    count, 8, QTableWidgetItem(card.speedDuel))
                self.monsterCardsTable.setItem(count, 9,
                                               QTableWidgetItem(card.quantity))
                count = count + 1
        layout.addWidget(QLabel('Karten Code:'), 0, 0)
        layout.addWidget(self.codeEntry, 0, 1)
        layout.addWidget(self.speedDualEntry, 2, 0)
        layout.addWidget(QLabel("Anzahl:"), 1, 0)
        layout.addWidget(self.quantityEntry, 1, 1)
        layout.addWidget(addButton, 3, 0)
        trapCardsLabel = QLabel("Fallen Karten:")
        trapCardsLabel.setStyleSheet('color: purple')
        layout.addWidget(trapCardsLabel, 4, 0)
        spellCardsLabel = QLabel("Zauber Karten:")
        spellCardsLabel.setStyleSheet('color: green')
        layout.addWidget(spellCardsLabel, 4, 1)
        layout.addWidget(self.trapCardsTable, 5, 0)
        layout.addWidget(self.spellCardsTable, 5, 1)
        monsterCardsLabel = QLabel("Monster Karten:")
        monsterCardsLabel.setStyleSheet('color: #662907')
        layout.addWidget(monsterCardsLabel, 6, 0)
        layout.addWidget(self.monsterCardsTable, 7, 0, 8, 0)
        window.setLayout(layout)
        window.show()
        self.app.exec_()
Beispiel #13
0
 def addCard(
     self
 ):  #make ad many function eg code,code,code all with quanitity given
     codeList = list()
     quantity = self.quantityEntry.text()
     code = self.codeEntry.text()
     codes = code.split(",")
     for code in codes:
         codeList.append(code)
     if len(code) == 0:
         msg = QMessageBox()
         msg.setText("Fehler: Code darf nicht leer sein.")
         msg.exec()
     else:
         if len(quantity) == 0:
             msg = QMessageBox()
             msg.setText("Fehler: Anzahl darf nicht leer sein.")
             msg.exec()
         else:
             if str(quantity).isdigit():
                 if self.speedDualEntry.isChecked():
                     speedDuel = "Jan"
                 else:
                     speedDuel = "Nein"
                 for code in codeList:
                     url = "https://www.db.yugioh-card.com/yugiohdb/card_search.action?ope=1&sess=1&keyword=" + code + "&stype=4&ctype=&starfr=&starto=&pscalefr=&pscaleto=&linkmarkerfr=&linkmarkerto=&link_m=2&atkfr=&atkto=&deffr=&defto=&othercon=2"
                     if platform == "darwin":
                         driver = webdriver.Chrome(
                             "/Users/jangj/Desktop/OneDrive/Desktop/Workspace/Privat/Python/Leonard/CardOrganizer2/chromedriver"
                         )
                     elif platform == "win32":
                         driver = webdriver.Chrome(
                             "B:\Programme\cardsorter2\chromedriver.exe")
                     driver.get(url)
                     typeOfCard = driver.find_element_by_class_name(
                         "box_card_attribute")
                     if typeOfCard.text == "FALLE":
                         nameSourced = driver.find_element_by_class_name(
                             "card_status")
                         name = nameSourced.text
                         name = str(name).replace("\n", "")
                         name = str(name).replace(":", "")
                         trapType = "Normal"
                         try:
                             trapTypeSourced = driver.find_element_by_class_name(
                                 "box_card_effect")
                             trapType = trapTypeSourced.text
                         except:
                             var = None
                         textSourced = driver.find_element_by_class_name(
                             "box_card_text")
                         text = textSourced.text
                         text = str(text).replace("\n", "")
                         text = str(text).replace(":", "")
                         if "\u25cf" in text:
                             text = str(text).replace("\u25cf", "-")
                         trapCardObject = TrapCard("trap", name, trapType,
                                                   text, speedDuel,
                                                   quantity)
                         for card in self.cardList:
                             if card.name == trapCardObject.name:
                                 msg = QMessageBox(
                                 )  #TODO:add buttons with add quantity that was given, add card as new uniq, not add
                                 msg.setText(
                                     "Hinweis: Fallen Karte mit dem selben Namen exisitert bereits."
                                 )
                                 msg.exec()
                         self.cardList.append(trapCardObject)
                         FileHelper().saveCard(trapCardObject)
                         self.addRow(trapCardObject)
                     elif typeOfCard.text == "ZAUBER":
                         nameSourced = driver.find_element_by_class_name(
                             "card_status")
                         name = nameSourced.text
                         name = str(name).replace("\n", "")
                         name = str(name).replace(":", "")
                         spellType = "Normal"
                         try:
                             spellTypeSourced = driver.find_element_by_class_name(
                                 "box_card_effect")
                             spellType = spellTypeSourced.text
                         except:
                             var = None
                         textSourced = driver.find_element_by_class_name(
                             "box_card_text")
                         text = textSourced.text
                         text = str(text).replace("\n", "")
                         text = str(text).replace(":", "")
                         if "\u25cf" in text:
                             text = str(text).replace("\u25cf", "-")
                         spellCardObject = SpellCard(
                             "spell", name, spellType, text, speedDuel,
                             quantity)
                         for card in self.cardList:
                             if card.name == spellCardObject.name:
                                 msg = QMessageBox(
                                 )  #TODO:add buttons with add quantity that was given, add card as new uniq, not add
                                 msg.setText(
                                     "Hinweis: Zauber Karte mit dem selben Namen exisitert bereits."
                                 )
                                 msg.exec()
                         self.cardList.append(spellCardObject)
                         FileHelper().saveCard(spellCardObject)
                         self.addRow(spellCardObject)
                     else:
                         nameSourced = driver.find_element_by_class_name(
                             "card_status")
                         name = nameSourced.text
                         name = str(name).replace("\n", "")
                         name = str(name).replace(":", "")
                         attributeSourced = driver.find_element_by_class_name(
                             "box_card_attribute")
                         attribute = attributeSourced.text
                         try:
                             levelSourced = driver.find_element_by_css_selector(
                                 "span.box_card_level_rank.level")
                             level = levelSourced.text
                         except:
                             try:
                                 levelSourced = driver.find_element_by_class_name(
                                     "box_card_linkmarker")
                                 level = levelSourced.text
                             except:
                                 var = None
                         infoSourced = driver.find_element_by_class_name(
                             "card_info_species_and_other_item")
                         info = infoSourced.text
                         info = str(info).strip("[")
                         info = str(info).strip("]")
                         info = str(info).strip()
                         info = str(info).split("/")
                         if len(info) == 1:
                             monsterType = info[0]
                             cardType = "Normal"
                         elif len(info) == 2:
                             monsterType = info[0]
                             cardType = str(info[1]).strip()
                         else:
                             monsterType = info[0]
                             cardType = str(info[1]).strip() + "/" + str(
                                 info[2]).strip()
                         atkPointsSourced = driver.find_element_by_class_name(
                             "atk_power")
                         atkPoints = atkPointsSourced.text
                         atkPoints = str(atkPoints).replace("ATK ", "")
                         defPointsSourced = driver.find_element_by_class_name(
                             "def_power")
                         defPoints = defPointsSourced.text
                         defPoints = str(defPoints).replace("DEF ", "")
                         textSourced = driver.find_element_by_class_name(
                             "box_card_text")
                         text = textSourced.text
                         text = str(text).replace("\n", "")
                         text = str(text).replace(":", "")
                         if "\u25cf" in text:
                             text = str(text).replace("\u25cf", "-")
                         monsterCardObject = MonsterCard(
                             "monster", name, attribute, level, monsterType,
                             cardType, atkPoints, defPoints, text,
                             speedDuel, quantity)
                         for card in self.cardList:
                             if card.name == monsterCardObject.name:
                                 msg = QMessageBox(
                                 )  #TODO:add buttons with add quantity that was given, add card as new uniq, not add
                                 msg.setText(
                                     "Hinweis: Monster Karte mit dem selben Namen exisitert bereits."
                                 )
                                 msg.exec()
                         self.cardList.append(monsterCardObject)
                         FileHelper().saveCard(monsterCardObject)
                         self.addRow(monsterCardObject)
                     driver.close()
                     FileHelper().backupCards()
                     self.codeEntry.setText("")
                     self.quantityEntry.setText("")
             else:
                 msg = QMessageBox()
                 msg.setText("Fehler: Anzahl muss eine Zahl sein.")
                 msg.exec()
Beispiel #14
0
    def handle(
        self
    ):  #overwrite TODO: find a way to import script only once not once per handle call
        self.decEncHelper = DecodingEncodingHelper()
        self.channelManager = ChannelManager()
        self.clientManager = ClientManager()
        self.mysqlHelper = MysqlHelper()
        self.fileHelper = FileHelper()
        self.logHelper = LogHelper()

        if self.appendClient:
            self.clientObject = Client(self.request, "*NOT_ASSIGNED*",
                                       "*NOT_ASSIGNED*", "*NOT_ASSIGNED*")
            if len(self.fileHelper.readTXTFile("data/", "banList")) > 1:
                for client in self.fileHelper.readTXTFile("data/", "banList"):
                    try:
                        banTime = client.split(":")[1]
                    except IndexError:
                        pass
                    if self.clientObject.ip + "\n" == client:
                        self.logHelper.log(
                            "info", self.clientObject.ip + ":" +
                            str(self.clientObject.port) +
                            " is permanantly banned on the server")
                        self.clientObject.socketObject.sendall(
                            self.decEncHelper.stringToBytes(
                                "405[Client/Info] You are permanantly banned on this server"
                            ))
                        self.clientObject.socketObject.close()
                        self.appendClient = False
                    elif self.clientObject.ip + ":" + banTime == client:
                        currentTimeStamp = datetime.datetime.now().timestamp()
                        banTime = banTime[:-1]
                        if (currentTimeStamp > float(banTime)):
                            self.fileHelper.removeClientFromBanList(
                                self.clientObject.ip)
                            self.clientManager.addClient(self.clientObject)
                            self.logHelper.log(
                                "info",
                                str(self.clientObject.ip) + ":" +
                                str(self.clientObject.port) +
                                " connected to the server")
                            print(
                                self.mysqlHelper.getAccountRank(
                                    self.clientObject))
                            if len(
                                    self.mysqlHelper.getAccountRank(
                                        self.clientObject)) < 3:

                                self.clientObject.rank = "user"
                                self.mysqlHelper.updateAccountRank(
                                    self.clientObject)
                            self.appendClient = False
                            self.tryRecv = True
                        else:
                            self.logHelper.log(
                                "info", self.clientObject.ip + ":" +
                                str(self.clientObject.port) +
                                " is temporary banned on the server. Remaining Time: "
                                + str(
                                    int((float(banTime) - currentTimeStamp) /
                                        60)) + "Minutes")
                            self.clientObject.socketObject.sendall(
                                self.decEncHelper.stringToBytes(
                                    "405[Client/Info] You are temporary banned on this server. Remaining Time: "
                                    + str(
                                        int((float(banTime) -
                                             currentTimeStamp) / 60)) +
                                    " Minutes"))
                            self.channelManager.removeChannelMember(
                                self.clientObject.channelObject,
                                self.clientObject)
                            self.clientObject.socketObject.close()
                            self.appendClient = False
                            break
                    elif "BanList:\n" == client:
                        pass
                    else:
                        self.clientManager.addClient(self.clientObject)
                        self.logHelper.log(
                            "info",
                            str(self.clientObject.ip) + ":" +
                            str(self.clientObject.port) +
                            " connected to the server.")
                        self.appendClient = False
                        self.tryRecv = True
            else:
                self.clientManager.addClient(self.clientObject)
                self.logHelper.log(
                    "info",
                    str(self.clientObject.ip) + ":" +
                    str(self.clientObject.port) + " connected to the server.")
                self.appendClient = False
                self.tryRecv = True

        if self.tryRecv:
            try:
                self.data = self.decEncHelper.bytesToString(
                    self.clientObject.socketObject.recv(1024))
                self.handleRequest(self.data, self.clientObject)
            except:
                for clientObjectInList in self.clientManager.clientList:
                    if clientObjectInList != self.clientObject:
                        if self.loggedIn:
                            if self.channelManager.channelContains(
                                    clientObjectInList,
                                    self.clientObject.channelObject.name):
                                clientObjectInList.socketObject.sendall(
                                    self.decEncHelper.stringToBytes(
                                        "811[Client/Info] " +
                                        self.clientObject.username + " quit."))
                self.logHelper.log(
                    "info", self.clientObject.ip + ":" +
                    str(self.clientObject.port) + " Disconnected")
                self.mysqlHelper.logoutAccount(self.clientObject)
                self.clientManager.removeClient(self.clientObject)
                if self.loggedIn:
                    self.channelManager.removeChannelMember(
                        self.clientObject.channelObject, self.clientObject)
Beispiel #15
0
 def backupCardFileDataButton(self):
     FileHelper().backupCards()
     messagebox.showinfo("Info", "Backup wurde erstellt.")
Beispiel #16
0
 def createCardWindowButton(self):
     cardCreatorThread = threading.Thread(
         target=CardCreatorWindow().createCardCreatorWindow(
             FileHelper().loadCards(), self.addCardsMode))
     cardCreatorThread.daemon = True
     cardCreatorThread.start()
Beispiel #17
0
class Server():

    inptHandler = None
    logHelper = None

    server = None

    ip = ""

    #config
    t = FileHelper().getConfig()[2]
    port = int(t[5:])

    #helper
    def BytesToString(self, bytes):
        return str(bytes, "utf-8")

    def StringToBytes(self, string):
        return bytes(string, "utf-8")

    def __init__(self):
        self.inptHandler = InputHandler()
        self.logHelper = LoggingHelper()

        self.ip = str(socket.gethostbyname(socket.gethostname()))
        self.server = ServerThread((self.ip, self.port), RequestHandler)

        serverThread = threading.Thread(target=self.server.serve_forever)
        serverThread.daemon = True
        serverThread.start()

        self.logHelper.printAndWriteServerLog("[Server/Info] Started on ip: " +
                                              str(self.ip) + " with port: " +
                                              str(self.port) + " in " +
                                              serverThread.name)
        self.askForInput()

    def askForInput(self):
        while True:
            try:
                message = input()
            except KeyboardInterrupt:
                self.logHelper.printAndWriteServerLog(
                    "[Server/Info] Gracefully stopping server...")
                from utils.RequestHandler import Clients  #pylint: disable=E0611
                if len(Clients().clientList) < 1:
                    self.logHelper.printAndWriteServerLog(
                        "[Server/Info] Gracefully stopped server")
                    break
                else:
                    for client in Clients().clientList:
                        for key in client.keys():
                            key.sendall(
                                self.StringToBytes(
                                    "403" + "[Client/Info] Server shut down"))
                    self.logHelper.printAndWriteServerLog(
                        "[Server/Info] Gracefully stopped server")
                    break

            if str(message).startswith("/"):
                self.inptHandler.handleInput(str(message[1:]))
            else:
                self.logHelper.printAndWriteServerLog(
                    "[Server/Error] Unknown command: (" + str(message) + ")")
                self.logHelper.printAndWriteServerLog(
                    "[Server/Error] type /help for a list of commands")
Beispiel #18
0
 def __init__(self):
     self.fileHelper = FileHelper()
     self.logHelper = LoggingHelper()
     self.clients = Clients()
Beispiel #19
0
 def createStatWindowButton(self):
     tableViewThread = threading.Thread(
         target=StatWindow().createStatWindow(FileHelper().loadCards()))
     tableViewThread.daemon = True
     tableViewThread.start()
Beispiel #20
0
 def importScripts(self):
     self.decEncHelper = DecodingEncodingHelper()
     self.inputHandler = InputHandler(self.output)
     self.fileHelper = FileHelper(self.output)
     self.guiHelper = GUIHelper(self.output)
Beispiel #21
0
    def handle(self):
        logHelper = LoggingHelper()
        fileHelper = FileHelper()
        self.client = self.request

        self.clients = Clients()
        if self.appendClient:
            logHelper.printAndWriteServerLog("[Server/Info] " +
                                             str(self.client_address[0]) +
                                             ":" +
                                             str(self.client_address[1]) +
                                             " connected to the server")
            for clientInList in fileHelper.readTXTFile("data/", "banList"):
                clientInListString = clientInList.split(":")
                try:
                    banTime = clientInListString[1]
                except IndexError:
                    var = None  #pylint: disable=W0612
                if self.client_address[0] + "\n" in clientInList:
                    logHelper.printAndWriteServerLog(
                        "[Server/Info] " + str(self.client_address[0]) + ":" +
                        str(self.client_address[1]) +
                        " is permanantly banned on the server")
                    self.client.sendall(
                        self.StringToBytes(
                            "405[Client/Info] You are permanantly banned on this server"
                        ))
                    self.client.close()
                    self.appendClient = False
                elif self.client_address[
                        0] + ":" + banTime in clientInList:  #FIX_ME_DEPLETED:decrease banntime overtime
                    logHelper.printAndWriteServerLog(
                        "[Server/Info] " + str(self.client_address[0]) + ":" +
                        str(self.client_address[1]) +
                        " is temporary banned on the server. Remaining Time: "
                        + clientInListString[1] + "Minutes")
                    self.client.sendall(
                        self.StringToBytes(
                            "405[Client/Info] You are temporary banned on this server. Remaining Time: "
                            + str(int(clientInListString[1])) + "Minutes"))
                    self.client.close()
                    self.appendClient = False
                else:
                    self.clients.addClient(self.client, "None")
                    self.appendClient = False

        try:
            self.data = self.BytesToString(self.client.recv(1024).strip())
            if len(self.data[6:]) == 0:
                logHelper.printAndWriteServerLog("[Server/Info] " +
                                                 str(self.client_address[0]) +
                                                 ":" +
                                                 str(self.client_address[1]) +
                                                 " sent client informations")
                self.handleRequest(self.data)
            else:
                logHelper.printAndWriteChannelLog("[Server/Channel/Info] " +
                                                  str(self.client_address[0]) +
                                                  ":" +
                                                  str(self.client_address[1]) +
                                                  " " + self.data[3:])
                self.handleRequest(self.data)
        except:
            logHelper.printAndWriteServerLog("[Server/Error] " +
                                             str(self.client_address[0]) +
                                             ":" +
                                             str(self.client_address[1]) +
                                             " closed connection unexpectedly")
            self.clients.removeClient(self.client, self.username)
Beispiel #22
0
 def __init__(self):
     FileHelper().backupCards()
     MainWindow().createMainWindow()