def exec_command(self, command, args, client_socket): if command == 'uptime': up = time.strftime("%H:%M:%S", time.gmtime(self.uptime())) message.send_msg(message.COMMAND, "Server uptime is {} seconds\n".format(up), client_socket) elif command == 'rooms': message.send_msg( message.COMMAND, "Chatrooms available: {}\n".format(self.list_chatrooms()), client_socket) elif command == 'users': if args: d_parse = re.search(r"^(\w+)", args) if d_parse: message.send_msg( message.COMMAND, "Users online in #{}: {}\n".format( args, self.list_users_in_room(args)), client_socket) else: message.send_msg( message.COMMAND, "Users online: {}\n".format(self.list_users()), client_socket) elif command == 'help': user = self.server.client_users[client_socket] message.send_msg( message.COMMAND, "Server commands: \n{}\n".format( self.build_help(user.is_admin)), client_socket) elif command == 'kick': self.server.kick_user(client_socket, args)
def admin_message_send(): to = request.values.get('to') subject = request.values.get('subject') summary = request.values.get('summary') content = request.values.get('content') if subject == '': session['error_message'] = '标题为必填。' return redirect(url_for('admin_message')) if to == '': session['error_message'] = '收件方必填。' return redirect(url_for('admin_message')) if summary == '': session['error_message'] = '简介必填' return redirect(url_for('admin_message')) send_content = '{:<30}'.format(summary) + content if to == 'all': for b_username in r_session.smembers('users'): send_msg(b_username.decode('utf-8'), subject, send_content, 3600 * 24 * 7) else: send_msg(to, subject, send_content, 3600 * 24) return redirect(url_for(endpoint='admin_message'))
def start_client(): with socketcontext(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) thread.start_new_thread(post_listener, (s,)) username = raw_input("Provide a username: ") while True: msg = raw_input() message.send_msg(s, username, msg)
def run(self): print("processing search request") self.datareceive = recv_msg(self.c) self.publickey = pickle.loads(self.datareceive) self.results, = evaluate([filefeatures, self.publickey, 'encrypt_m']) self.datasend = pickle.dumps(self.results) send_msg(self.c, self.datasend) print("compelete") self.c.close()
def retrieve_menu(data): ''' Retrieve menu of options ''' user_phone = data['user_phone'] trigger_message_sid = data['trigger_message_sid'] from_ = conf.twilio_num_from_ msg = """Menu\n1.MENU to see options\n2.CREATE to start a new task\n3.DELETE to remove a task\n4.EXIT to restart conversation""" send_msg(msg, user_phone, from_)
def run(self): print("processing mail request") self.datareceive = recv_msg(self.c) self.filenum = pickle.loads(self.datareceive) self.mailcontent = open(filenames[self.filenum], 'rb').read().decode('utf-8', 'ignore') self.datasend = pickle.dumps(self.mailcontent) send_msg(self.c, self.datasend) print("compelete") self.c.close()
def sendAESData(msg, server, nounce): try: hash = getHash(msg) data = str(msg) + ";" + str(hash) print data encrypt = AESCipher(nounce).encrypt(data) send_msg(server, encrypt) except Exception as e: print "Unable to send AES encrypted data" print e return 0
def do_send(self, line): addr = db.data.find("data", "all")[0]['addr'] to = raw_input("To: ") if len(to) != 32: if len(str(addressbook.check_entry(to))) != 32: print "Address Invalid." return else: to = str(addressbook.check_entry(to)) title = raw_input("Title: ") msg = raw_input("Message: ") if not to or not title or not msg: print "You need to fill out all the fields." else: print message.send_msg(msg, title, to, addr)
def admin_message_send(): send_type = request.values.get('type') to = request.values.get('to') subject = request.values.get('subject') summary = request.values.get('summary') content = request.values.get('content') if subject == '': session['error_message'] = '标题为必填。' return redirect(url_for('admin_message')) if to == '': session['error_message'] = '收件方必填。' return redirect(url_for('admin_message')) if summary == '': session['error_message'] = '简介必填' return redirect(url_for('admin_message')) send_content = '{:<30}'.format(summary) + content if send_type == 'message': user = session.get('user_info') if to == 'all': for b_username in r_session.smembers('users'): send_msg(b_username.decode('utf-8'), subject, send_content, 3600 * 24 * 31, user.get('username')) else: send_msg(to, subject, send_content, 3600 * 24 * 31, user.get('username')) else: from mailsand import send_email from mailsand import validateEmail to_set = set(to.split(';')) to_list = list() for email in to_set: if validateEmail(email) == 1: to_list.append(email) config_key = '%s:%s' % ('user', 'system') config_info = json.loads(r_session.get(config_key).decode('utf-8')) mail = dict() mail['to'] = ",".join(to_list) mail['subject'] = subject mail['text'] = send_content if not send_email(mail, config_info): session['error_message'] = '发送失败,请检查邮件配置' return redirect(url_for(endpoint='admin_message'))
def send(key=None): session = bottle.request.environ.get('beaker.session') # 不正なアクセスでないかチェック if not key == session.id: return bottle.template('error', error=valid.state('lost_key')) # ユーザ宛に確認用メールを送信 to_addr = '*****@*****.**' # to_addr = '{isc_account}@mail.kyutech.jp'.format(**session) subject = 'Account request validation' for_user = message.write_first(session) msg = message.create_msg(FROM_ADDR, to_addr, subject, for_user) message.send_msg(SMTP_SVR, msg) return bottle.template('send')
def rpc_call(self, destination, action, *args, **kwargs): ''' Sends (using the protocol specified in message.py) a message to the specified destination machine. If the send times out, the other machine is considered as having failed, and the socket to that machine closed. :param destination: MID to which to send the message :param action: action of this message (message type, i.e. GETSTATUS) :param args: arguments to the message :param kwargs: additional (dict-type) arguments to the message :return: decoded response to the message ''' msg = self.create_msg(action, *args, **kwargs) # self.dprint('Action %s sent to %d', action.name, destination) try: sock = None with self.socket_lock: if destination in self.mid_to_sockets: sock = self.mid_to_sockets[destination] if sock: send_msg(sock, msg) if 'expect_response' in kwargs and kwargs['expect_response'] == True: resp = recv_msg(sock) else: return None else: raise RuntimeError() return decode_msg(resp) except socket.timeout: return None except (RuntimeError, socket.error) as e: with self.socket_lock: try: self.mid_to_sockets[destination].shutdown(socket.SHUT_RDWR) self.mid_to_sockets[destination].close() except Exception: pass if destination in self.mid_to_sockets: del self.mid_to_sockets[destination] self.dprint('I think machine %d died' % destination) return None
def admin_message_send(): send_type = request.values.get('type') to = request.values.get('to') subject = request.values.get('subject') summary = request.values.get('summary') content = request.values.get('content') if subject == '': session['error_message'] = '标题为必填。' return redirect(url_for('admin_message')) if to == '': session['error_message'] = '收件方必填。' return redirect(url_for('admin_message')) if summary == '': session['error_message'] = '简介必填' return redirect(url_for('admin_message')) send_content = '{:<30}'.format(summary) + content if send_type=='message': user = session.get('user_info') if to == 'all': for b_username in r_session.smembers('users'): send_msg(b_username.decode('utf-8'), subject, send_content, 3600 * 24 * 31, user.get('username')) else: send_msg(to, subject, send_content, 3600 * 24 * 31,user.get('username')) else: from mailsand import send_email from mailsand import validateEmail to_set=set(to.split(';')) to_list=list() for email in to_set: if validateEmail(email) == 1: to_list.append(email) config_key = '%s:%s' % ('user', 'system') config_info = json.loads(r_session.get(config_key).decode('utf-8')) mail = dict() mail['to'] = ",".join(to_list) mail['subject'] = subject mail['text'] = send_content if not send_email(mail,config_info): session['error_message']='发送失败,请检查邮件配置' return redirect(url_for(endpoint='admin_message'))
def finish(key=None): session = bottle.request.environ.get('beaker.session') # 不正なアクセスでないかチェック if not key == session.id: return bottle.template('error', error=valid.state('lost_key')) # 承認待ちリストに突っ込む database.insert(session) # 運用部宛に申請依頼メールを送信 subject = 'Request for account ({club_account})'.format(**session) for_admin = message.write_second(session) msg = message.create_msg(FROM_ADDR, ADMIN_ADDR, subject, for_admin) message.send_msg(SMTP_SVR, msg) # セッションを削除 session.delete() return bottle.template('finish')
def submit_feedback(): user = session.get('user_info') subject = request.values.get('subject') content = str(request.values.get('content')).replace('\n','<br/>') config_key = '%s:%s' % ('user', 'system') config_info = json.loads(r_session.get(config_key).decode('utf-8')) receiver = config_info.get('feedback_user') if receiver is None: session['error_message']='管理员尚未配置工单处理账户,请敦促管理员~' return redirect(url_for('comments')) session['info_message']=send_msg(receiver,subject,content,3600 * 24 * 31,user.get('username')) return redirect(url_for('comments'))
def create_reminder(data): ''' Thread for setting up a new reminder ''' current_date = datetime.now() trigger_message_sid = data['trigger_message_sid'] trigger_text = data['trigger_text'] user_phone = data['user_phone'] from_ = conf.twilio_num_from_ # Intro msg = '''Hello! Today is going to be a great one :) What's one thing that you have been putting off or want to accomplish?''' send_msg(msg, user_phone, from_) thread_data = { 'trigger_message_sid': trigger_message_sid, 'user_phone': user_phone, 'thread_id': '0', 'position_id': '1', 'thread_data': json.dumps({'trigger_text': trigger_text}) } insert_into_table(thread_data, 'kema_thread')
def submit_feedback(): user = session.get('user_info') subject = request.values.get('subject') content = str(request.values.get('content')).replace('\n', '<br/>') config_key = '%s:%s' % ('user', 'system') config_info = json.loads(r_session.get(config_key).decode('utf-8')) receiver = config_info.get('feedback_user') if receiver is None: session['error_message'] = '管理员尚未配置工单处理账户,请敦促管理员~' return redirect(url_for('comments')) session['info_message'] = send_msg(receiver, subject, content, 3600 * 24 * 31, user.get('username')) return redirect(url_for('comments'))
def delete_reminder(data): ''' Deletes a reminder ''' user_phone = data['user_phone'] trigger_message_sid = data['trigger_message_sid'] from_ = conf.twilio_num_from_ task_list = retrieve_reminders(data) # Store data in thread thread_data = { 'trigger_message_sid': trigger_message_sid, 'user_phone': user_phone, 'thread_id': '2', 'position_id': '1', 'thread_data': json.dumps({'task_list': task_list}) } insert_into_table(thread_data, 'kema_thread') msg = """Respond with the number of the task you would like to remove""" send_msg(msg, user_phone, from_)
def retrieve_reminders(data): ''' Retrieve active tasks ''' trigger_message_sid = data['trigger_message_sid'] trigger_text = data['trigger_text'] user_phone = data['user_phone'] from_ = conf.twilio_num_from_ thread_id = '1' # Extract task data sql = ''' SELECT trigger_message_sid, task, RANK() OVER (PARTITION BY user_phone ORDER BY update_datetime DESC) AS ordering FROM kema_schedule WHERE user_phone = %s AND CURRENT_DATE BETWEEN schedule_start AND schedule_end ORDER BY ordering ASC LIMIT 5; ''' task_list = select_from_table(sql, (user_phone, )) # Send message with task list task_str = '\n '.join([ '{}. {}'.format(task_num, task) for (msg_sid, task, task_num) in task_list ]) msg = """ Here are your active tasks:\n{}\n0. NONE """.format(task_str) send_msg(msg, user_phone, from_) return task_list
def reply(to, title): num = check() if request.method == 'POST': to = request.form['to'] if len(to) != 32: check_ = db.addressdb.find("addresses", "all") for x in check_: for y in x: if y == to: to = x[y] title = request.form['title'] msg = request.form['message'] check_ = message.send_msg(msg, title, to, addr) check_ = """<script>alert("{0}");window.location = '/';</script>""".format(check_) return check_ return render_template("reply.html", title=title, to=to, addr=addr, num=str(len(num)))
def send(): num = check() if request.method == 'POST': to = request.form['to'].replace(" ", '') if "," in to: t = to.split(",") else: t = [] t.append(to) for to in t: if len(to) != 32: check_ = db.addressdb.find("addresses", "all") for x in check_: for y in x: if y == to: to = x[y] title = request.form['title'] msg = request.form['message'] check_ = message.send_msg(msg, title, to, addr) check_ = """<script>alert("{0}");window.location = '/';</script>""".format(check_) return check_ return render_template("send.html", addr=addr, num=str(len(num)))
def broadcast_messages(server): while not message_queue.empty(): username, content = message_queue.get() for s in connected_sockets: if s != server: message.send_msg(s, username, content)
def onUserConnect(client, userBrokerSessionKey, userPbKey, pukey, prkey): brokerFlag = True while brokerFlag: sellerFlag = True ipadd = decryptAESData(client, userBrokerSessionKey) #DH Authentication Successful and Now can transmit messages #Now get Seller Ip address from the user and connect to the Seller print ipadd server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) port = int(ipadd.split(":")[1]) server.connect((ipadd.split(":")[0], port)) server.send("Broker") sellerPbKey = exchangeSellerRSAPbKey(server, pukey) print "Seller Pb Key received" print sellerPbKey if sellerPbKey: #Diffie-Hellman Key Exchange Starts here sendData(getDHkey(prDHkey), server, sellerPbKey) print "Broker - Seller Key Exchange successful" print "DH exchange starts" data = decryptMsg(server.recv(1024), prkey) sellerNounce = getHash(getSessionKey(data, prDHkey)) print "DH Authentication successful" client.send(sellerPbKey) #client.send(sellerPbKey) userSellerPbKey = client.recv(1024) server.send(userSellerPbKey) print userSellerPbKey sellerDhKey = server.recv(2048) client.send(sellerDhKey) userDhkey = client.recv(1024) server.send(userDhkey) while sellerFlag: broucher = recv_msg(server) send_msg(client, broucher) userinp = recv_msg(client) send_msg(server, userinp) price = recv_msg(server) send_msg(client, price) data = decryptAESData(client, userBrokerSessionKey) dbTransact = data.split("~")[0] sign = data.split("~")[1] date = str( datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) if "No Purchase" not in data and verifySign( dbTransact, userPbKey, sign): print "User authenticated Seller" price = dbTransact.split(";")[0] if price: confFile = open("paymentDB/payment.csv", "a") data = str( getHash(pukey) + ";" + dbTransact + ";" + date + ";" + sign + ";" + sellerPbKey) confFile.write(data.replace(";", ",")) confFile.write("\n") confFile.close() sendAESData("Paid " + str(price), server, sellerNounce) img = recv_msg(server) send_msg(client, img) repeatq = recv_msg(server) send_msg(client, repeatq) data = decryptAESData(client, userBrokerSessionKey) sendAESData(data.split(":B")[1], server, sellerNounce) print data.split(":B")[0] if data.split(":B")[0] == "broker": print "Ending connection with seller" sellerFlag = False elif data.split(":B")[0] == "quit": sellerFlag = False brokerFlag = False else: print "Continuing connection with seller" else: print "Purchase Aborted." server.close() client.close() return None
def broadcast(self, msg): for user in self.users: message.send_msg(message.NORMAL, msg + "\n", user.sock)
def send_msg(self, msg): send_msg(msg, self.user_phone, self.from_)
def send_message(self, msg, client_socket): broad_range = [x for x in self.users if x.sock != client_socket] for user in broad_range: message.send_msg(message.NORMAL, msg + "\n", user.sock)
def lambda_inbound_message_handler(event, context): logger = logging.getLogger() logger.setLevel(logging.DEBUG) logger.info(event) # Format data stream to dictionary data = urllib.parse.unquote(event['body']) data = json.loads(data) # data = event['body'] logger.info(data) ###### FOR TESTING ######## # from twilio.rest import Client # from message import send_msg # send_msg('This is a test message', conf.twilio_num_to, conf.twilio_num_from_) ###### FOR TESTING ######## user_phone = data['user_phone'] ### The following commands stop all existing threads ### # Check for STOP request and exit all threads if found if data['trigger_text'].lower() in ('stop', 'exit'): clear_thread_for_user_phone(user_phone) send_msg('Ok, restarting all conversations.', conf.twilio_num_to, conf.twilio_num_from_) return # Trigger thread to delete task if 'delete' in data['trigger_text'].lower( ) or 'delete task' in data['trigger_text'].lower(): delete_reminder(data) return # Go to Menu if 'menu' in data['trigger_text'].lower( ) or 'option' in data['trigger_text'].lower(): retrieve_menu(data) return # Check for CREATE request and exit all threads if found if data['trigger_text'].lower() in ('create', 'new', 'new task', 'create task', 'start new', 'start task'): clear_thread_for_user_phone(user_phone) create_reminder(data) return ### End of commands that stop all existing threads ### # Check for position in previous conversation trigger_message_sid, thread_id, position_id = check_user_thread_position( user_phone, data) if trigger_message_sid: # Reset trigger message SID if continuing a conversation thread data['trigger_message_sid'] = trigger_message_sid # Clear any other threads clear_thread_for_user_phone( user_phone, exclude_trigger_message_sid=trigger_message_sid) # If last conversation not ended print(trigger_message_sid, thread_id, position_id) if thread_id == '1': # Continue thread to send reminder if position_id == '1': # Ask barrier reminder_node_1(data) # Replace with API endpoint eventually elif position_id == '2': # Update barrier for single task reminder_node_2(data) elif position_id == '3': # Check status or ask barrier for multi-task reminder_node_3(data) elif position_id == '4': # Update barrier for multiple task reminder_node_4(data) elif position_id == '5': # End or update schedule for completed tasks reminder_node_5(data) elif position_id == '6': # End or update schedule for completed tasks (multiple) reminder_node_6(data) else: raise ValueError( 'position_id {} does not exist for thread_id {}'.format( position_id, thread_id)) elif thread_id == '0': # Continue thread to create new reminder if position_id == '1': create_node_1(data) # Replace with API endpoint eventually elif position_id == '2': create_node_2(data) elif position_id == '3': create_node_3(data) elif position_id == '4': create_node_4(data) elif position_id == '5': create_node_5(data) else: raise ValueError( 'position_id {} does not exist for thread_id {}'.format( position_id, thread_id)) elif thread_id == '2': # Continue thread to create new reminder if position_id == '1': delete_reminder_node_1( data) # Replace with API endpoint eventually else: raise ValueError( 'position_id {} does not exist for thread_id {}'.format( position_id, thread_id)) # Else start new task else: print('Clearing thread') clear_thread_for_user_phone(user_phone) create_reminder(data)
def process(sock): try: while True: mm = recv_msg(sock) msg = decode_msg(mm) # self.dprint('Received %s', msg['action'].name) if msg['kwargs']['migration_id'] != self.migration_id: self.dprint('Migration id mismatch (%d != %d), ignoring message %s', msg['kwargs']['migration_id'], self.migration_id, msg) continue response = {} if msg['action'] == Action.GETSTATUS: response = self.get_status_handler(msg) elif self.status == IslandStatus.MIGRATION_READY: if msg['action'] == Action.SEND_PREPARE_NACK: response = self.prepare_nack_handler(msg) elif msg['action'] == Action.SEND_ACCEPT_NACK: response = self.accept_nack_handler(msg) elif msg['action'] == Action.SEND_PREPARE: response = self.prepare_handler(msg) elif msg['action'] == Action.SEND_PROMISE: response = self.promise_handler(msg) elif msg['action'] == Action.SEND_ACCEPT: response = self.accept_handler(msg) elif msg['action'] == Action.SEND_ACCEPTED: response = self.accepted_handler(msg) else: self.dprint('Cannot handle message') if self.test_failures: # Force a timeout with probability 1% for testing purposes if random.random() < 0.01: # Oopsies network is slow time.sleep(1.5) if response: send_msg(sock, response) except RuntimeError as e: pass try: sock.shutdown(socket.SHUT_RDWR) sock.close() except Exception: pass