def get_messages(partner): # Check for new info check_db() all_messages = get_mail_db(current_user.name, partner) message_js = [] groupnames = names_n_group(current_user.name)[1] members = [] partner_id = "" if partner in groupnames: members = get_members(partner) partner_id = get_id(partner) for mess in all_messages: direction = "sent" if mess.sender == current_user.name else "replies" sender_id = get_id(mess.sender, string=True) message = {"sender": sender_id, "recipient": mess.recipient, "content": mess.content, "time": mess.time.time().strftime("%H:%M:%S"), "direction": direction, "imgURL": url_for('tree_bp.static', filename='/imag/' + mess.sender + '.png')} message_js += [message] return {'messages': message_js, 'members': members, 'id': partner_id}
def sendmessage(): data = request.json # Get the data (sender, recipient, message) check_db() names, groupnames = names_n_group(current_user.name) sender, recipient = data['sender'], secure_filename(data['recipient']) data['destination'] = recipient # We make a copy for ourself new_message = Message(owner=sender, sender=sender, content=data['content'], time=datetime.now(), recipient=recipient) add_db(new_message, 'Message') # Key is different if it's a group message # or 2-party message if recipient in groupnames: key = get_key_aes(sender, recipient) elif recipient in names: key, dico = P2Psecret(sender, recipient, 'sender') data['info_otk'] = repr(dico) else: raise Exception("Problem : the recipient name : {}".format(recipient)) # Ciphertext encrypted_data = encrypt_aes(data['content'], str(key)) data['content'] = repr(encrypted_data) headers = {'x-access-tokens': get_token(current_user.name)} requests.post(server_address + "/mailbox", json=data, headers=headers) return jsonify(answer="Génial")
def new_group(): names, groupnames = names_n_group(current_user.name) names_id = {name: 'user_' + str(get_id(name)) for name in names} return render_template('new_group.html', names=names, groupnames=groupnames, names_id=names_id)
def new_conversation(): check_db() lastmails = get_last_messages(current_user.name) partners = list(lastmails.keys()) names, groupnames = names_n_group(current_user.name) names.remove(current_user.name) print('names = ', names) other_partners = [name for name in names if name not in partners] partners_id = [Party.query.filter_by(target=partner) .first().user_id for partner in other_partners] others = dict(zip(partners_id, other_partners)) return render_template('new_conversation.html', others=others, partners_id=partners_id)
def settings(partner): members_id, not_members_id = {}, {} names, groupnames = names_n_group(current_user.name) check_db() if partner in groupnames: members = get_members(partner) not_members = [name for name in names if name not in members] for not_member in not_members: not_members_id[not_member] = get_id(not_member, string=True) for member in members: members_id[member] = get_id(member, string=True) return render_template('settings.html', partner=partner, notmembersid=not_members_id, members=members, notmembers=not_members, membersid=members_id)
def get_key_aes(sender, recipient, info_otk=None): names, groupnames = names_n_group(sender) if recipient in names: keyy = P2Psecret(sender, recipient, "receiver", info_otk) elif recipient in groupnames: print("Arbre de ", current_user.name, ": " + 'Tree_' + recipient + "_" + current_user.name) with open('Tree_' + recipient + "_" + current_user.name + '.pkl', 'rb') as input_tree: tree = pickle.load(input_tree) keyy = tree.private_key print('keyy = ', keyy) stage_key = get_stagekey(recipient) print('stage_key = ', stage_key) keyy = kdfAES(keyy, Complex(stage_key), p) else: raise Exception("Problème avec {} : ni parmi {}, \ ni parmi {}".format(recipient, names, groupnames)) return keyy
def update_key(): data = request.json print('data = ', data) groupname = data["groupname"] if groupname not in names_n_group(current_user.name)[1]: return "Rien à faire ici", 200 # Updating of the tree tree = read_tree(groupname) update_stage_key(tree, data['groupname']) usernode = get_node(tree, data['user']) usernode.update_secret_key(data['secretK']) path = usernode.path fill_nodes(tree, path) write_tree(groupname, tree) members = get_members(groupname) # We don't send to the member who modified, since # they already did it the modifications for themself members.remove(current_user.name) dico = get_pk_path(tree, usernode) headers = {'x-access-tokens': get_token(current_user.name)} for member in members: intel = { 'sender': current_user.name, 'content': repr(dico), 'recipient': member, 'type': 'update_key', 'groupname': groupname } requests.post(server_address + "/intels/" + member, json=intel, headers=headers) print('\nSuccess : key updated') return "Tout de bon", 200
def messenger(): check_db() groupnames = names_n_group(current_user.name)[1] lastmails = get_last_messages(current_user.name) print('lastmails = ', lastmails) my_id = 'user_' + str(get_id(current_user.name)) message_js = [] for partner in lastmails: mail = lastmails[partner] partner_id = get_id(partner, string=True) try: if mail.sender == current_user.name: direction = "sent" else: direction = "received" message = {"sender": mail.sender, "recipient": mail.recipient, "content": mail.content, "time": mail.time.time().strftime("%H:%M:%S"), "direction": direction, "imgURL": url_for('tree_bp.static', filename='imag/' + partner_id + '.png'), "partner": partner} partner_id = get_id(partner, string=True) message_js += [message] except Exception: raise ValueError("Error") return render_template('messenger.html', lastmails=message_js, current=my_id, groupnames=groupnames)