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)
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)
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
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)
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)
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)
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
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)
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
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
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)
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)