def has_user_email(self, email): #TODO: implement a email table, if needed? all_users = RedisTable(self.redis, 'h:users') for n, userdata in all_users.items(): if userdata['email_addr'] == email: return True return False
def delete_invite(self, email): table = RedisTable(self.redis, 'h:invites') try: archive_invites = RedisTable(self.redis, 'h:arc_invites') archive_invites[email] = table[email] except: pass del table[email]
def list_not_invited(m, invite=False): invites = RedisTable(m.redis, 'h:invites') for email, v in iteritems(invites): if 'sent' not in v: if invite: do_invite(m, email) print((email + ': ' + v.get('name', '') + ' -- ' + v.get('desc', '')))
def __init__(self, redis, cork, config): self.redis = redis self.cork = cork self.config = config self.default_coll = config['default_coll'] self.temp_prefix = config['temp_prefix'] mailing_list = os.environ.get('MAILING_LIST', '').lower() self.mailing_list = mailing_list in ('true', '1', 'yes') self.default_list_endpoint = os.environ.get('MAILING_LIST_ENDPOINT', '') self.list_key = os.environ.get('MAILING_LIST_KEY', '') self.list_removal_endpoint = os.path.expandvars( os.environ.get('MAILING_LIST_REMOVAL', '')) self.payload = os.environ.get('MAILING_LIST_PAYLOAD', '') self.remove_on_delete = (os.environ.get('REMOVE_ON_DELETE', '') in ('true', '1', 'yes')) self.announce_list = os.environ.get('ANNOUNCE_MAILING_LIST_ENDPOINT', False) invites = expandvars(config.get('invites_enabled', 'true')).lower() self.invites_enabled = invites in ('true', '1', 'yes') try: self.redis.hsetnx('h:defaults', 'max_size', int(config['default_max_size'])) self.redis.hsetnx('h:defaults', 'max_anon_size', int(config['default_max_anon_size'])) except Exception as e: print('WARNING: Unable to init defaults: ' + str(e)) self.all_users = UserTable(self.redis, self._get_access) self.invites = RedisTable(self.redis, 'h:invites')
def save_invite(self, email, name, desc=''): if not email or not name: return False table = RedisTable(self.redis, 'h:invites') table[email] = {'name': name, 'email': email, 'desc': desc} return True
def is_valid_invite(self, invitekey): try: if not invitekey: return False key = base64.b64decode(invitekey.encode('utf-8')).decode('utf-8') key.split(':', 1) email, hash_ = key.split(':', 1) table = RedisTable(self.redis, 'h:invites') entry = table[email] if entry and entry.get('hash_') == hash_: return email except Exception as e: print(e) pass msg = 'Sorry, that is not a valid invite code. Please try again or request another invite' raise ValidationException(msg)
def send_invite(self, email, email_template, host): table = RedisTable(self.redis, 'h:invites') entry = table[email] if not entry: print('No Such Email In Invite List') return False hash_ = base64.b64encode(os.urandom(21)).decode('utf-8') entry['hash_'] = hash_ full_hash = email + ':' + hash_ invitekey = base64.b64encode(full_hash.encode('utf-8')).decode('utf-8') email_text = template( email_template, host=host, email_addr=email, name=entry.get('name', email), invite=invitekey, ) self.cork.mailer.send_email(email, 'You are invited to join webrecorder.io beta!', email_text) entry['sent'] = str(datetime.utcnow()) return True
def get_users(self): return RedisTable(self.redis, 'h:users')
def __init__(self, redis): self.redis = redis self.access = BaseAccess() self.users = UserTable(self.redis, self.get_access) self.roles = RedisTable(self.redis, 'h:roles') self.pending_registrations = RedisTable(self.redis, 'h:register')
def __init__(self, redis): self.redis = redis self.users = RedisTable(self.redis, 'h:users') self.roles = RedisTable(self.redis, 'h:roles') self.pending_registrations = RedisTable(self.redis, 'h:register')