def test_add_contact_success(flask_client): login(flask_client) alias = Alias.first() assert Contact.count() == 0 # <<< Create a new contact >>> flask_client.post( url_for("dashboard.alias_contact_manager", alias_id=alias.id), data={ "form-name": "create", "email": "*****@*****.**", }, follow_redirects=True, ) # a new contact is added assert Contact.count() == 1 contact = Contact.first() assert contact.website_email == "*****@*****.**" # <<< Create a new contact using a full email format >>> flask_client.post( url_for("dashboard.alias_contact_manager", alias_id=alias.id), data={ "form-name": "create", "email": "First Last <*****@*****.**>", }, follow_redirects=True, ) # a new contact is added assert Contact.count() == 2 contact = Contact.filter(Contact.id != contact.id).first() assert contact.website_email == "*****@*****.**" assert contact.name == "First Last" # <<< Create a new contact with invalid email address >>> r = flask_client.post( url_for("dashboard.alias_contact_manager", alias_id=alias.id), data={ "form-name": "create", "email": "with [email protected]", }, follow_redirects=True, ) # no new contact is added assert Contact.count() == 2 assert "Invalid email format. Email must be either [email protected]" in str( r.data)
def load_pgp_public_keys(): """Load PGP public key to keyring""" for mailbox in Mailbox.filter(Mailbox.pgp_public_key.isnot(None)).all(): LOG.d("Load PGP key for mailbox %s", mailbox) fingerprint = load_public_key(mailbox.pgp_public_key) # sanity check if fingerprint != mailbox.pgp_finger_print: LOG.e("fingerprint %s different for mailbox %s", fingerprint, mailbox) mailbox.pgp_finger_print = fingerprint Session.commit() for contact in Contact.filter(Contact.pgp_public_key.isnot(None)).all(): LOG.d("Load PGP key for %s", contact) fingerprint = load_public_key(contact.pgp_public_key) # sanity check if fingerprint != contact.pgp_finger_print: LOG.e("fingerprint %s different for contact %s", fingerprint, contact) contact.pgp_finger_print = fingerprint Session.commit() LOG.d("Finish load_pgp_public_keys")
def alias_contact_manager(alias_id): highlight_contact_id = None if request.args.get("highlight_contact_id"): highlight_contact_id = int(request.args.get("highlight_contact_id")) alias = Alias.get(alias_id) page = 0 if request.args.get("page"): page = int(request.args.get("page")) query = request.args.get("query") or "" # sanity check if not alias: flash("You do not have access to this page", "warning") return redirect(url_for("dashboard.index")) if alias.user_id != current_user.id: flash("You do not have access to this page", "warning") return redirect(url_for("dashboard.index")) new_contact_form = NewContactForm() if request.method == "POST": if request.form.get("form-name") == "create": if new_contact_form.validate(): contact_addr = new_contact_form.email.data.strip() try: contact_name, contact_email = parse_full_address(contact_addr) except Exception: flash(f"{contact_addr} is invalid", "error") return redirect(request.url) if not is_valid_email(contact_email): flash(f"{contact_email} is invalid", "error") return redirect(request.url) contact = Contact.get_by(alias_id=alias.id, website_email=contact_email) # already been added if contact: flash(f"{contact_email} is already added", "error") return redirect(request.url) try: contact = Contact.create( user_id=alias.user_id, alias_id=alias.id, website_email=contact_email, name=contact_name, reply_email=generate_reply_email(contact_email, current_user), ) except CannotCreateContactForReverseAlias: flash("You can't create contact for a reverse alias", "error") return redirect(request.url) LOG.d( "create reverse-alias for %s %s, reverse alias:%s", contact_addr, alias, contact.reply_email, ) Session.commit() flash(f"Reverse alias for {contact_addr} is created", "success") return redirect( url_for( "dashboard.alias_contact_manager", alias_id=alias_id, highlight_contact_id=contact.id, ) ) elif request.form.get("form-name") == "delete": contact_id = request.form.get("contact-id") contact = Contact.get(contact_id) if not contact: flash("Unknown error. Refresh the page", "warning") return redirect( url_for("dashboard.alias_contact_manager", alias_id=alias_id) ) elif contact.alias_id != alias.id: flash("You cannot delete reverse-alias", "warning") return redirect( url_for("dashboard.alias_contact_manager", alias_id=alias_id) ) delete_contact_email = contact.website_email Contact.delete(contact_id) Session.commit() flash( f"Reverse-alias for {delete_contact_email} has been deleted", "success" ) return redirect( url_for("dashboard.alias_contact_manager", alias_id=alias_id) ) elif request.form.get("form-name") == "search": query = request.form.get("query") return redirect( url_for( "dashboard.alias_contact_manager", alias_id=alias_id, query=query, highlight_contact_id=highlight_contact_id, ) ) contact_infos = get_contact_infos(alias, page, query=query) last_page = len(contact_infos) < PAGE_LIMIT nb_contact = Contact.filter(Contact.alias_id == alias.id).count() # if highlighted contact isn't included, fetch it # make sure highlighted contact is at array start contact_ids = [contact_info.contact.id for contact_info in contact_infos] if highlight_contact_id and highlight_contact_id not in contact_ids: contact_infos = ( get_contact_infos(alias, contact_id=highlight_contact_id, query=query) + contact_infos ) return render_template( "dashboard/alias_contact_manager.html", contact_infos=contact_infos, alias=alias, new_contact_form=new_contact_form, highlight_contact_id=highlight_contact_id, page=page, last_page=last_page, query=query, nb_contact=nb_contact, )