示例#1
0
def load_workshops():
    def generate_workshop_email_secret():
        return binascii.hexlify(os.urandom(8)).decode('UTF-8')

    def create_workshop(yaml_data):
        new_workshop = {
            'workshopId': yaml_data['workshopId'],
            'emailSecret': generate_workshop_email_secret(),
            'name': yaml_data['name'],
            'mentors': yaml_data['mentors'],
            'users': [],
            'emails': []
        }
        return new_workshop

    yaml_file = open("workshops.yml", encoding="utf-8")
    workshops = yaml.load(yaml_file)['workshops']
    app.logger.info("There are %d workshops" % len(workshops))
    for workshop_data in workshops:
        workshop_in_db = get_db().workshops.find_one({"workshopId": workshop_data['workshopId']})
        if workshop_in_db is not None:
            app.logger.debug("Skipping %s" % workshop_data)
            continue  # skip already inserted
        else:
            workshop_in_db = create_workshop(workshop_data)
            get_db().workshops.insert(workshop_in_db)
            welcome_message = MailMessageCreator.mentor_welcome_email(workshop_in_db['name'],
                                                                      workshop_in_db['emailSecret'])
            for email in workshop_in_db['mentors']:
                welcome_message.send(to=email)
            app.logger.info("Added %s" % workshop_data)
示例#2
0
def load_workshops():
    def generate_workshop_email_secret():
        return binascii.hexlify(os.urandom(8)).decode('UTF-8')

    def create_workshop(yaml_data):
        new_workshop = {
            'workshopId': yaml_data['workshopId'],
            'emailSecret': generate_workshop_email_secret(),
            'name': yaml_data['name'],
            'mentors': yaml_data['mentors'],
            'users': [],
            'emails': []
        }
        return new_workshop

    yaml_file = open("workshops.yml", encoding="utf-8")
    workshops = yaml.load(yaml_file)['workshops']
    app.logger.info("There are %d workshops" % len(workshops))
    for workshop_data in workshops:
        workshop_in_db = get_db().workshops.find_one(
            {"workshopId": workshop_data['workshopId']})
        if workshop_in_db is not None:
            app.logger.debug("Skipping %s" % workshop_data)
            continue  # skip already inserted
        else:
            workshop_in_db = create_workshop(workshop_data)
            get_db().workshops.insert(workshop_in_db)
            welcome_message = MailMessageCreator.mentor_welcome_email(
                workshop_in_db['name'], workshop_in_db['emailSecret'])
            for email in workshop_in_db['mentors']:
                welcome_message.send(to=email)
            app.logger.info("Added %s" % workshop_data)
示例#3
0
def confirm_new_user():
    request_json = request.get_json(force=True, silent=True)
    if not is_valid_confirm_user_request(request_json):
        return error_response(
            "Invalid request. Should contain only 'email' and 'key'."), 400

    user = get_db().users.find_one({"email": request_json['email']})
    if user is None:
        return error_response("User not found"), 404

    was_already_confirmed = user['isConfirmed'] is True

    find_result = get_db().users.update(
        {
            "email": request_json['email'],
            "key": request_json['key']
        }, {"$set": {
            "isConfirmed": True
        }})

    if find_result['n'] > 0:
        if not was_already_confirmed:
            message = MailMessageCreator.user_confirmation(
                user['name'], user['key'], request_json['email'])
            message.send(to=request_json['email'])
        return success_response("User is confirmed now.",
                                name=user['name']), 200
    else:
        mailgunresource.send_deny_confirm_user(request_json)
        return error_response("Invalid key."), 403
示例#4
0
def send_confirmation_emails():
    regex = request.args.get('query')
    count = int(request.args.get('count'))
    query = {"isSecondConfirmationMailSent": {"$ne": True}, "isConfirmedTwice": {"$ne": True}}
    if regex:
        query.update({"email": {"$regex": regex}})
    users = get_db().users.find(query, {"email": 1, "name": 1, "key": 1})
    if count:
        users = users.limit(count)
    users_done = []
    for user in users:
        email = user['email']
        MailMessageCreator.second_confirmation_email(email, user['name'], user['key']).send(to=email)
        get_db().users.update({"email": email}, {"$set": {"isSecondConfirmationMailSent": True}})
        users_done.append(email)
    return success_response("Emails sent!", users=users_done)
示例#5
0
def ensure_email_is_sent_to_user(email_message, user_email, workshop):
    update_result = get_db().users.update(
        {"email": user_email,
         "emails": {"$ne": email_message.email_id}},
        {"$addToSet": {"emails": email_message.email_id}}
    )
    if update_result['n'] == 0:  # no documents updated so user not exists or already seen this mail
        return
    else:
        message_to_send = MailMessageCreator.forward_workshop_message(email_message, workshop)
        message_to_send.send(to=user_email)
示例#6
0
def send_confirmation_emails():
    regex = request.args.get('query')
    count = int(request.args.get('count'))
    query = {"isSecondConfirmationMailSent": {"$ne": True}}
    if regex:
        query.update({"email": {"$regex": regex}})
    users = get_db().users.find(query, {"email": 1, "name": 1, "key": 1})
    if count:
        users = users.limit(count)
    users_done = []
    for user in users:
        email = user['email']
        MailMessageCreator.second_confirmation_email(
            email, user['name'], user['key']).send(to=email)
        get_db().users.update({"email": email},
                              {"$set": {
                                  "isSecondConfirmationMailSent": True
                              }})
        users_done.append(email)
    return success_response("Emails sent!", users=users_done)
示例#7
0
def add_new_user():
    request_json = request.get_json(force=True, silent=True)
    if not is_valid_new_user_request(request_json):
        return error_response("Invalid request. Should contain only 'email' and 'name'."), 400
    request_json['key'] = binascii.hexlify(os.urandom(128)).decode('UTF-8')
    request_json['isConfirmed'] = False
    request_json['emails'] = []

    find_result = get_db().users.find_one({"email": request_json['email']})
    if find_result is None or find_result['isConfirmed'] is False:
        get_db().users.update({"email": request_json['email']}, {"$set": request_json}, upsert=True)
        message = MailMessageCreator.user_registration(request_json['name'], request_json['key'], request_json['email'])
        message.send(to=request_json['email'])
        return success_response("Registration email sent."), 201
    else:
        mailgunresource.send_deny_new_user(request_json)
        return error_response("User already registered."), 304
示例#8
0
def ensure_email_is_sent_to_user(email_message, user_email, workshop):
    update_result = get_db().users.update(
        {
            "email": user_email,
            "emails": {
                "$ne": email_message.email_id
            }
        }, {"$addToSet": {
            "emails": email_message.email_id
        }})
    if update_result[
            'n'] == 0:  # no documents updated so user not exists or already seen this mail
        return
    else:
        message_to_send = MailMessageCreator.forward_workshop_message(
            email_message, workshop)
        message_to_send.send(to=user_email)
示例#9
0
def add_new_user():
    request_json = request.get_json(force=True, silent=True)
    if not is_valid_new_user_request(request_json):
        return error_response(
            "Invalid request. Should contain only 'email' and 'name'."), 400
    request_json['key'] = binascii.hexlify(os.urandom(128)).decode('UTF-8')
    request_json['isConfirmed'] = False
    request_json['emails'] = []

    find_result = get_db().users.find_one({"email": request_json['email']})
    if find_result is None or find_result['isConfirmed'] is False:
        get_db().users.update({"email": request_json['email']},
                              {"$set": request_json},
                              upsert=True)
        message = MailMessageCreator.user_registration(request_json['name'],
                                                       request_json['key'],
                                                       request_json['email'])
        message.send(to=request_json['email'])
        return success_response("Registration email sent."), 201
    else:
        mailgunresource.send_deny_new_user(request_json)
        return error_response("User already registered."), 304
示例#10
0
def confirm_new_user():
    request_json = request.get_json(force=True, silent=True)
    if not is_valid_confirm_user_request(request_json):
        return error_response("Invalid request. Should contain only 'email' and 'key'."), 400

    user = get_db().users.find_one({"email": request_json['email']})
    if user is None:
        return error_response("User not found"), 404

    was_already_confirmed = user['isConfirmed'] is True

    find_result = get_db().users.update(
        {"email": request_json['email'], "key": request_json['key']},
        {"$set": {"isConfirmed": True}})

    if find_result['n'] > 0:
        if not was_already_confirmed:
            message = MailMessageCreator.user_confirmation(user['name'], user['key'], request_json['email'])
            message.send(to=request_json['email'])
        return success_response("User is confirmed now.", name=user['name']), 200
    else:
        mailgunresource.send_deny_confirm_user(request_json)
        return error_response("Invalid key."), 403
示例#11
0
def ensure_mail_were_sent_to_mentors(email_message, mentor_emails, workshop):
    for mentor_email in mentor_emails:
        message_to_send = MailMessageCreator.forward_workshop_message(email_message, workshop)
        message_to_send.send(to=mentor_email)
示例#12
0
def ensure_mail_were_sent_to_mentors(email_message, mentor_emails, workshop):
    for mentor_email in mentor_emails:
        message_to_send = MailMessageCreator.forward_workshop_message(
            email_message, workshop)
        message_to_send.send(to=mentor_email)