def addSession(form): if not checkKeys(form, ['email', 'password']): return msg.errMsg("Please check the inputs.") sessions = SessionModel() users = UserModel() (email, password) = (form['email'], form['password']) usersFounded = users.getUser(email=email, password=password, enable=True) if usersFounded == None: return msg.errMsg("Failed to validate user information.") if len(usersFounded) == 0: return msg.errMsg("Invalid email address or password.") uid = usersFounded[0][0] newSessionID = sessions.createSessionID() startTime = datetime.utcnow() startSessionResult = sessions.startSession(newSessionID, uid, startTime) if startSessionResult == None: return msg.errMsg("Failed to start a new session.") return msg.successMsg({ "sessionID": newSessionID, "uid": uid, "startTime": str(startTime) })
def event(cls, event) -> bool: # print(event) if cls.line_bot_api is None or cls.handler is None: return False print(json.dumps(event)) if event['type'] == "message": if event['message'][ 'type'] == "sticker": # sticker ? just dunno wat to doooo replySticker = StickerSendMessage(package_id="11537", sticker_id="52002751") replyText = "ไม่พบการใช้คำสั่งด้วยสติกเกอร์ หากต้องการทราบคำสั่งสามารถพิมพ์ \"help\" " \ "เพื่อดูรายการคำสั่งได้ " cls.line_bot_api.reply_message(event['replyToken'], [ replySticker, TextSendMessage( text=replyText, quick_reply=QuickReply(items=[ QuickReplyButton(action=MessageAction( label="ดูรายการคำสั่งทั้งหมด", text="help")) ])) ]) return True elif event['message'][ 'type'] == "text": # text message as action command message = event['message']['text'].lower() user = User.getUser(event['source']['userId']) if user.state == User.STATE_REMOTE: # todo: parse message to ssh session if message == "exit": statusText = "ปิดการเชื่อมต่อ Remote Console แล้ว" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) user.state = User.STATE_NORMAL user.ssh_session.disconnect() user.ssh_session = None return True try: outputText = user.ssh_session.send_command( event['message']['text']) except IOError: outputText = "คำสั่งไม่มีการตอบกลับ" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=outputText)) return True elif user.state == User.STATE_SETTING: # todo: get config status and parse message to config router if message == "exit": statusText = "ยกเลิกการตั้งค่าแล้ว" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) user.state = User.STATE_NORMAL user.current_config = None user.current_router = None return True if user.current_config == "hostname": router = Router.getRouter(user.current_router) setRouterHostName(router.ip, router.snmp_write, event['message']['text'].strip()) statusText = "ตั้งค่า Hostname เป็น " + event[ 'message']['text'].strip() + " แล้ว" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) user.state = User.STATE_NORMAL user.current_config = None user.current_router = None return True user.state = User.STATE_NORMAL user.current_config = None user.current_router = None return False elif user.state == User.STATE_NORMAL: if message == "help" or message == "?": # show all commands replyText = "👋 รายการคำสั่งที่ใช้งานได้\n🚀 help ; ดูรายการคำสั่งทั้งหมด\n🚀 Router List ;ดู Router ทั้งหมด\n🚀 Status ; แสดงสถานะของระบบ Bot\n\n🔧 Router Select, <router id> ; เลือก Router\n🔧 Router Remote, <router id> ; Remote เข้าสู่ Console ของ Router\n🔧 Router Status, <router id> ; ดูข้อมูลสถานะของ Router\n🔧 Router Config, <router id> ; เข้าสู่โหมดตั้งค่า Router\n" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage( text=replyText, quick_reply=QuickReply(items=[ QuickReplyButton(action=MessageAction( label="ดู Router ทั้งหมด", text="Router List")), QuickReplyButton(action=MessageAction( label="แสดงสถานะของระบบ", text="Status")) ]))) return True elif message == "router list": routers = Router.getRouters() routers_dict = [{ "name": router.name, "hostname": router.hostname, "ip": router.ip, "is_up": router.getStatus() } for router in routers] carousel_template = CarouselTemplate(columns=[ CarouselColumn( text='Hostname: %s\nIP: %s' % (router['hostname'], router['ip']), title="%s [%s]" % (router['name'], "ออนไลน์" if router['is_up'] else "ออฟไลน์"), actions=[ MessageAction(label='เลือก', text='Router Select, ' + router['name']) ], thumbnail_image_url= "https://images.pexels.com/photos/2881224/pexels-photo-2881224.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260" ) for router in routers_dict ]) cls.line_bot_api.reply_message( event['replyToken'], TemplateSendMessage( alt_text= 'ข้อความนี้แสดงได้เฉพาะบนโทรศัพท์มือถือ', template=carousel_template)) return True elif message == "status": # show system status is_syslog_online = True # todo : get syslog server status ?... no it's just always online! maybe ? statusText = "👋 สถานะระบบ\nสถานะบอท : 🟢 ปกติ\nสถานะ Syslog : " + ( "🟢 ปกติ" if is_syslog_online else "🔴 ปิด") cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return True elif len(message.split( ',')) >= 2: # command that having parameters command = message.split(',')[0] params = [i.strip() for i in message.split(',')[1:]] if command == "router select": router = Router.getRouter(params[0]) # print(params[0]) if router is None: statusText = "ไม่พบ Router ที่ท่านเลือก" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return False router_actions = [{ "type": "message", "label": "สถานะ", "text": "Router Status, " + router.name }, { "type": "message", "label": "ตั้งค่า", "text": "Router Config, " + router.name }, { "type": "message", "label": "SSH Remote", "text": "Router Remote, " + router.name }] cls.sendReplyButton( event['replyToken'], router.name, "คุณสามารถจัดการ Router นี้ได้ โดยสามารถเลือกการทำงานได้ที่เมนูด้านล่าง", actions=router_actions) elif command == "router status": router = Router.getRouter(params[0]) if router is None: statusText = "ไม่พบ Router ที่ท่านเลือก" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return False router_detail = getRouterSMMP( router.ip, router.snmp_read) replyText = "ℹ ข้อมูลสถานะ Router : " + router_detail['hostname'] + "\n" \ + "⏱ เปิดใช้งานมาแล้ว : " + router_detail['uptime'].split('.')[0] + " ชั่วโมง" \ + "\n⏱ Latency: %.2f ms\n\n 🌎 Interfaces:\n" % router.getPing() for interface in router_detail['interfaces']: replyText += "- Interface %s : [สถานะ: %s]\n" % \ (interface['name'], ("ปิดใช้งาน ⛔" if interface['admin_status'] == "down" else "ปกติ ✅" if interface['line_status'] == "up" else "ไม่มีการเชื่อมต่อ ⚠")) cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=replyText)) return True elif command == "router config": router = Router.getRouter(params[0]) if router is None: statusText = "ไม่พบ Router ที่ท่านเลือก" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return False router_actions = [ { "type": "message", "label": "ชื่อ Router", "text": "Router Rename, " + router.name }, { "type": "message", "label": "ปิด/เปิด Interfaces", "text": "Router Config Interfaces, " + router.name }, ] cls.sendReplyButton(event['replyToken'], router.name, "แก้ไขข้อมูล Router", actions=router_actions) return True elif command == "router config interfaces": router = Router.getRouter(params[0]) if router is None: statusText = "ไม่พบ Router ที่ท่านเลือก" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return False router_detail = getRouterSMMP( router.ip, router.snmp_read) carousel_template = CarouselTemplate(columns=[ CarouselColumn( text= "ปิด/เปิดการใช้งาน Interface %s บน Router %s" % (interface['name'], router.name), title="%s [%s]" % (interface['name'], ("ปิดใช้งาน ⛔" if interface['admin_status'] == "down" else "ปกติ ✅" if interface['line_status'] == "up" else "ไม่มีการเชื่อมต่อ ⚠")), actions=[ MessageAction( label='เปิดใช้งาน', text='Interface Up, %s, %s' % (router.name, interface['index'])), MessageAction( label='ปิดใช้งาน', text='Interface Down, %s, %s' % (router.name, interface['index'])) ], thumbnail_image_url= "https://images.pexels.com/photos/2881224/pexels-photo-2881224.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260" ) for interface in router_detail['interfaces'] ]) cls.line_bot_api.reply_message( event['replyToken'], TemplateSendMessage( alt_text= 'ข้อความนี้แสดงได้เฉพาะบนโทรศัพท์มือถือ', template=carousel_template)) return True elif command == "router rename": router = Router.getRouter(params[0]) if router is None: statusText = "ไม่พบ Router ที่ท่านเลือก" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return False user.state = User.STATE_SETTING user.current_router = router.name user.current_config = "hostname" statusText = "กรุณาพิมพ์ชื่อ Router ที่ต้องการตั้ง หากต้องการยกเลิกให้พิมพ์ \"exit\"" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return True elif command == "interface up": router = Router.getRouter(params[0]) if router is None: statusText = "ไม่พบ Router ที่ท่านเลือก" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return False interface_index = params[1] setInterfaceAdminStatus(router.ip, router.snmp_write, interface_index, "up") statusText = "เปิดใช้งาน Interface แล้ว" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return True elif command == "interface down": router = Router.getRouter(params[0]) if router is None: statusText = "ไม่พบ Router ที่ท่านเลือก" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return False interface_index = params[1] setInterfaceAdminStatus(router.ip, router.snmp_write, interface_index, "down") statusText = "ปิดใช้งาน Interface แล้ว" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return True elif command == "router remote": try: router = Router.getRouter(params[0]) if router is None: statusText = "ไม่พบ Router ที่ท่านเลือก" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return False # print(router.getConnectionInfo()) net_connect = ConnectHandler( **router.getConnectionInfo()) if len(router.enable_password) > 0: net_connect.enable() user.state = User.STATE_REMOTE user.ssh_session = net_connect statusText = "เชื่อมต่อกับ Console ของ Router แล้ว ท่านสามารถออกจากโหมดนี้ได้โดยใช้คำสั่ง \"exit\"" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) return True except: statusText = "ไม่สามารถเชื่อมต่อกับ Console ได้" cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage(text=statusText)) user.state = User.STATE_NORMAL user.ssh_session = None return False # cls.sendReplyButton(event['replyToken']) elif event['type'] == "postback": pass else: pass cls.line_bot_api.reply_message( event['replyToken'], TextSendMessage( text="ไม่พบคำสั่ง หรือยังไม่สามารถใช้งานได้ในขณะนี้", quick_reply=QuickReply(items=[ QuickReplyButton(action=MessageAction( label="ดูรายการคำสั่งทั้งหมด", text="help")) ]))) return False
def CreateBlockForPublishing(self): #Write code for creating a block if not self.BlockStatus: return self.block = Block(self.id, self.previous_hash, self.lastblockAddress, self.genre, self.size, self.userContent) newsFileHash = [] fileToHash = {} self.creatorList = { self.newsfiles[0]: "QmegEEH5FivGUEUpYMT1kwUqvgGa8dh1ML5NfrtuCbV9QG" } for news in self.newsfiles: print(self.creatorList[news]) newsHash = Ipfs.sendFile(news) newsFileHash.append(newsHash) creatorId = self.creatorList[news] fileToHash[news] = newsHash self.block.addNews(newsFileHash) self.block.createNewsMerkleTree(newsFileHash) #update ContentCreator Rating UserId = [] UserFileHash = [] for content, creator in self.creatorList.items(): body = self.block.getBody() data = {} if creator in body["UserContent"].keys(): userFileHash = body["UserContent"][creator] # userFileHash=self.block["Body"]["UserContent"][creator] res = Ipfs.DownloadFile(userFileHash, "user.json") if res == 1: f = open("/home/gaurav/NAV-Chain/Miner/userFile.json", "r") data = json.load(f) f.close() else: data = { "UserId": creator, "VotingRating": 0, "ContentRating": 0, "ContentList": [content], "MiningRating": 0, "UpiId": "", "BlockList": [], "NavBirth": "" } else: data = { "UserId": creator, "VotingRating": 0, "ContentRating": 0, "ContentList": [content], "MiningRating": 0, "UpiId": "", "BlockList": [], "NavBirth": "" } user = User(data["UserId"], data["VotingRating"], data["ContentRating"], data["ContentList"], data["MiningRating"], data["UpiId"], data["BlockList"], data["NavBirth"]) #Calculate contentRating contentRating = self.block.calculateContentRating(creator) user.updateContentRating(contentRating) user.updateContentList(fileToHash[content]) userFile = json.dumps(user.getUser(), indent=4) f = open("/home/gaurav/NAV-Chain/Miner/userFile.json", "w") f.write(userFile) f.close() UserId.append(creator) UserFileHash.append( Ipfs.sendFile("/home/gaurav/NAV-Chain/Miner/userFile.json")) #Update block list lastMiner = self.blockChain.getLastMiner() if lastMiner in body["UserContent"].keys(): lastMinerFileHash = body["UserContent"][lastMiner] res = Ipfs.DownloadFile(lastMinerFileHash, "LastMiner.json") if res == 1: f = open("LastMiner.json", "r") data = json.load(f) f.close() else: data = { "UserId": lastMiner, "VotingRating": 0, "ContentRating": 0, "ContentList": [content], "MiningRating": 0, "UpiId": "", "BlockList": [], "NavBirth": "" } user = User(data["UserId"], data["VotingRating"], data["ContentRating"], data["ContentList"], data["MiningRating"], data["UpiId"], data["BlockList"], data["NavBirth"]) user.updateBlockList(self.lastblockAddress) userFile = json.dumps(user.getUser(), indent=4) f = open("user.json", "w") f.write(userFile) f.close() UserId.append(creator) UserFileHash.append(Ipfs.sendFile("user.json")) # minerFileHash=self.block["Body"]["UserContent"][self.id] miningRating = 0 if self.id in body["UserContent"].keys(): minerFileHash = body["UserContent"][self.id] miningRating = self.block.calculateMinerRating() res = Ipfs.DownloadFile(minerFileHash, "miner.json") if res == 1: f = open("miner.json", "r") data = json.load(f) f.close() else: data = { "UserId": self.id, "VotingRating": 0, "ContentRating": 0, "ContentList": [], "MiningRating": 0, "UpiId": "", "BlockList": [], "NavBirth": "" } else: data = { "UserId": self.id, "VotingRating": 0, "ContentRating": 0, "ContentList": [], "MiningRating": 0, "UpiId": "", "BlockList": [], "NavBirth": "" } user = User(data["UserId"], data["VotingRating"], data["ContentRating"], data["ContentList"], data["MiningRating"], data["UpiId"], data["BlockList"], data["NavBirth"]) user.updateMiningRating(miningRating) userFile = json.dumps(user.getUser(), indent=4) f = open("userFile.json", "w") f.write(userFile) f.close() UserId.append(creator) UserFileHash.append(Ipfs.sendFile("user.json")) self.block.updateUsers(UserId, UserFileHash)