示例#1
0
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}
示例#2
0
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")
示例#3
0
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)
示例#4
0
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)
示例#5
0
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)
示例#6
0
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
示例#7
0
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
示例#8
0
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)