class WebappDriver(object): """ Registrar driver for webapp """ def __init__(self): self.users = webapp_db.user self.registrations = webapp_db.user_registration self.updates = webapp_db.profile_update self.exports = webapp_db.name_export self.registrar_server = RegistrarServer() self.email_list = [] def populate_email_list(self): """ Initialize the email list, saving unique emails for pending registrations """ counter = 0 for new_user in self.registrations.find(no_cursor_timeout=True): counter += 1 print counter #continue user = get_db_user_from_id(new_user, self.users) cleaned_email = cleanup_email(user['email']) self.email_list.append(cleaned_email) def process_new_users(self, nameop=None, spam_protection=False, live_delete=False): """ Process new registrations coming in on the webapp """ counter = 0 self.registrar_server.reset_flag() self.populate_email_list() for new_user in self.registrations.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if not self.validUser(user, new_user): live_delete = False if live_delete: log.debug("Removing %s" % user['username']) self.registrations.remove({"user_id": new_user['user_id']}) continue if whiteListedUser(user['email'], user['profile']): log.debug("White-listed: %s" % user['email']) else: log.debug("Not registering: %s" % user['email']) #continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) data_value = convert_profile_format(user) log.debug("Processing: %s" % fqu) if registrationComplete(fqu, data_value, transfer_address): log.debug("Registration complete %s. Removing." % fqu) self.registrations.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: try: self.registrar_server.process_nameop(fqu, data_value, transfer_address, nameop=nameop) except: log.debug(traceback.print_exc()) def validUser(self, user, new_user): """ Check if the given @user should be processed or ignored Returns True or False """ if user is None: log.debug("No such user, need to remove: %s" % new_user) #self.registrations.remove({'_id': new_user['_id']}) return False # for spam protection if check_banned_email(user['email']): log.debug("SPAM: Need to delete %s, %s" % (user['email'], user['username'])) #self.remove_registration_entry(user['username']) return False # test for minimum name length if len(user['username']) < MINIMUM_LENGTH_NAME: log.debug("Expensive name %s. Skipping." % user['username']) return False # test for ignoring names starting with certain patterns if ignoreRegistration(user['username'], IGNORE_NAMES_STARTING_WITH): log.debug("Ignoring: %s" % user['username']) return False if not validRegistrationEmail(user['email'], self.email_list): log.debug("Email rejected by filter: %s" % user['email']) #self.remove_registration_entry(user['username']) return True return True def update_users(self, spam_protection=False, reprocess_username=None): """ Process new profile updates from the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.updates.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: continue # for spam protection if check_banned_email(user['email']): if spam_protection: log.debug("Deleting spam: %s, %s" % (user['email'], user['username'])) self.updates.remove({"user_id": new_user['user_id']}) else: log.debug("Need to delete %s, %s" % (user['email'], user['username'])) continue # mode for reprocessing a single user, ignore others if reprocess_username is not None: if user['username'] != reprocess_username: #log.debug("Ignoring: %s" % user['username']) continue fqu = user['username'] + "." + DEFAULT_NAMESPACE btc_address = nmc_to_btc_address(user['namecoin_address']) data_value = convert_profile_format(user) encrypted_privkey = new_user['encrypted_private_key'] hex_privkey = bip38_decrypt(str(encrypted_privkey), WALLET_SECRET) if nameRegistered(fqu): if profilePublished(fqu, data_value): log.debug("Profile match, removing: %s" % fqu) self.updates.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: log.debug("Processing: %s, %s" % (fqu, user['email'])) try: self.registrar_server.process_subsidized_nameop( fqu, owner_privkey=hex_privkey, profile=data_value, nameop='update') except Exception as e: log.debug(e) else: log.debug("Not registered: %s" % fqu) def transfer_users(self, spam_protection=False, reprocess_username=None): """ Process new transfer from the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.exports.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: continue # add spam protection here # mode for reprocessing a single user, ignore others if reprocess_username is not None: if user['username'] != reprocess_username: continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = new_user['recipient_address'] try: encrypted_privkey = new_user['encrypted_private_key'] hex_privkey = bip38_decrypt(str(encrypted_privkey), WALLET_SECRET) except: log.debug("no private key") #self.exports.remove({"user_id": new_user['user_id']}) else: log.debug("To export: %s to %s" % (fqu, transfer_address)) if nameRegistered(fqu): if ownerName(fqu, transfer_address): log.debug("Name transferred, removing: %s" % fqu) self.exports.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: log.debug("Processing: %s, %s" % (fqu, user['email'])) #try: self.registrar_server.process_subsidized_nameop( fqu, owner_privkey=hex_privkey, transfer_address=transfer_address, nameop='transfer', profile="") #except Exception as e: # log.debug(e) else: log.debug("Not registered: %s" % fqu) def remove_registration_entry(self, username): check_user = self.users.find_one({"username": username}) user_id = check_user['_id'] check_register = self.registrations.find_one({"user_id": user_id}) if check_register is None or check_user is None: log.debug("No such user") else: log.debug("Removing: %s" % username) self.registrations.remove({"user_id": user_id}) def remove_user(self, username): check_user = self.users.find_one({"username": username}) if check_user is None or '_id' not in check_user: log.debug("No such user") else: log.debug("Removing: %s" % username) #self.users.remove({"user_id": check_user['_id']}) def reprocess_user(self, username, nameop=None): user = self.users.find_one({"username": username}) if not self.validUser(user, None): log.debug("Need to remove: %s" % username) return if whiteListedUser(user['email'], user['profile']): log.debug("White-listed: %s" % user['email']) else: log.debug("Not registering: %s" % user['email']) #return fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) data_value = convert_profile_format(user) log.debug("Reprocessing user: %s" % fqu) self.registrar_server.process_nameop(fqu, data_value, transfer_address, nameop=nameop) def release_username(self, username, new_owner): user = self.users.find_one({"username": new_owner}) fqu = username + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] self.registrar_server.release_username(fqu, profile, transfer_address) def change_username(self, username, new_username): user = self.users.find_one({"username": username}) user['username'] = new_username self.users.save(user) def change_email(self, current_email, new_email): user = self.users.find_one({"email": current_email}) user['email'] = new_email self.users.save(user) def display_stats(self): log.debug("Pending registrations: %s" % self.registrations.find().count()) log.debug("Pending updates: %s" % self.updates.find().count()) def display_userinfo(self, username=None, email=None): if username is None and email is None: log.debug("Provide username or email") return elif username is not None: user = self.users.find_one({"username": username}) pprint(user) elif email is not None: user = self.users.find_one({"email": email}) pprint(user) return user['profile'], user['ecdsa_public_key'] def display_current_states(self): """ Display current states of all pending registrations """ counter_register = 0 counter_update = 0 counter_dht = 0 counter_transfer = 0 for new_user in self.registrations.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if not self.validUser(user, new_user): continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] if not nameRegistered(fqu): counter_register += 1 elif not profileonBlockchain(fqu, profile): counter_update += 1 elif not profileonDHT(fqu, profile): counter_dht += 1 elif not ownerName(fqu, transfer_address): counter_transfer += 1 log.debug("Pending registrations: %s" % counter_register) log.debug("Pending updates: %s" % counter_update) log.debug("Pending DHT writes: %s" % counter_dht) log.debug("Pending transfers: %s" % counter_transfer)
class WebappDriver(object): """ Registrar driver for webapp """ def __init__(self): self.users = webapp_db.user self.registrations = webapp_db.user_registration self.updates = webapp_db.profile_update self.registrar_server = RegistrarServer() def process_new_users(self, nameop=None, spam_protection=False): """ Process new registrations coming in on the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.registrations.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if not self.validUser(user, new_user): continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] log.debug("Processing: %s" % fqu) if registrationComplete(fqu, profile, transfer_address): log.debug("Registration complete %s. Removing." % fqu) self.registrations.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: try: self.registrar_server.process_nameop(fqu, profile, transfer_address, nameop=nameop) except Exception as e: log.debug(e) def validUser(self, user, new_user): """ Check if the given @user should be processed or ignored Returns True or False """ if user is None: log.debug("No such user, need to remove: %s" % new_user['_id']) #self.registrations.remove({'_id': user['_id']}) return False # for spam protection if check_banned_email(user['email']): log.debug("SPAM: Need to delete %s, %s" % (user['email'], user['username'])) return False # test for minimum name length if len(user['username']) < MINIMUM_LENGTH_NAME: log.debug("Expensive name %s. Skipping." % user['username']) return False # test for ignoring names starting with certain patterns if ignoreRegistration(user['username'], IGNORE_NAMES_STARTING_WITH): log.debug("Ignoring: %s" % user['username']) return False return True def update_users(self, spam_protection=False, reprocess_username=None): """ Process new profile updates from the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.updates.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: continue # for spam protection if check_banned_email(user['email']): if spam_protection: log.debug("Deleting spam: %s, %s" % (user['email'], user['username'])) self.updates.remove({"user_id": new_user['user_id']}) else: log.debug("Need to delete %s, %s" % (user['email'], user['username'])) continue # mode for reprocessing a single user, ignore others if reprocess_username is not None: if user['username'] != reprocess_username: continue fqu = user['username'] + "." + DEFAULT_NAMESPACE btc_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] encrypted_privkey = new_user['encrypted_private_key'] hex_privkey = bip38_decrypt(str(encrypted_privkey), WALLET_SECRET) if nameRegistered(fqu): if profilePublished(fqu, profile): log.debug("Profile match, removing: %s" % fqu) self.updates.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: log.debug("Processing: %s, %s" % (fqu, user['email'])) try: self.registrar_server.subsidized_nameop(fqu, profile, hex_privkey=hex_privkey, nameop='update') except Exception as e: log.debug(e) else: log.debug("Not registered: %s" % fqu) def remove_entry(self, username): check_user = self.users.find_one({"username": username}) user_id = check_user['_id'] check_register = self.registrations.find_one({"user_id": user_id}) if check_register is None or check_user is None: log.debug("No such user") else: log.debug("Removing: %s" % username) self.registrations.remove({"user_id": user_id}) def reprocess_user(self, username, nameop=None): user = self.users.find_one({"username": username}) fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] log.debug("Reprocessing user: %s" % fqu) self.registrar_server.process_nameop(fqu, profile, transfer_address, nameop=nameop) def rename_user(self, username, new_username): user = self.users.find_one({"username": username}) user['username'] = new_username self.users.save(user) def release_username(self, username, new_owner): user = self.users.find_one({"username": new_owner}) fqu = username + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] self.registrar_server.release_username(fqu, profile, transfer_address) def change_email(self, current_email, new_email): user = self.users.find_one({"email": current_email}) user['email'] = new_email self.users.save(user) def display_stats(self): log.debug("Pending registrations: %s" % self.registrations.find().count()) log.debug("Pending updates: %s" % self.updates.find().count()) def display_userinfo(self, username): user = self.users.find_one({"username": username}) pprint(user) def display_current_states(self): """ Display current states of all pending registrations """ counter_register = 0 counter_update = 0 counter_dht = 0 counter_transfer = 0 for new_user in self.registrations.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if not self.validUser(user, new_user): continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] if not nameRegistered(fqu): counter_register += 1 elif not profileonBlockchain(fqu, profile): counter_update += 1 elif not profileonDHT(fqu, profile): counter_dht += 1 elif not ownerName(fqu, transfer_address): counter_transfer += 1 log.debug("Pending registrations: %s" % counter_register) log.debug("Pending updates: %s" % counter_update) log.debug("Pending DHT writes: %s" % counter_dht) log.debug("Pending transfers: %s" % counter_transfer)
class WebappDriver(object): """ Registrar driver for webapp """ def __init__(self): self.users = webapp_db.user self.registrations = webapp_db.user_registration self.updates = webapp_db.profile_update self.exports = webapp_db.name_export self.registrar_server = RegistrarServer() self.email_list = [] def populate_email_list(self): """ Initialize the email list, saving unique emails for pending registrations """ counter = 0 for new_user in self.registrations.find(no_cursor_timeout=True): counter += 1 print counter #continue user = get_db_user_from_id(new_user, self.users) cleaned_email = cleanup_email(user['email']) self.email_list.append(cleaned_email) def process_new_users(self, nameop=None, spam_protection=False, live_delete=False): """ Process new registrations coming in on the webapp """ counter = 0 self.registrar_server.reset_flag() self.populate_email_list() for new_user in self.registrations.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if not self.validUser(user, new_user): live_delete = False if live_delete: log.debug("Removing %s" % user['username']) self.registrations.remove({"user_id": new_user['user_id']}) continue if whiteListedUser(user['email'], user['profile']): log.debug("White-listed: %s" % user['email']) else: log.debug("Not registering: %s" % user['email']) #continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) data_value = convert_profile_format(user) log.debug("Processing: %s" % fqu) if registrationComplete(fqu, data_value, transfer_address): log.debug("Registration complete %s. Removing." % fqu) self.registrations.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: try: self.registrar_server.process_nameop(fqu, data_value, transfer_address, nameop=nameop) except: log.debug(traceback.print_exc()) def validUser(self, user, new_user): """ Check if the given @user should be processed or ignored Returns True or False """ if user is None: log.debug("No such user, need to remove: %s" % new_user) #self.registrations.remove({'_id': new_user['_id']}) return False # for spam protection if check_banned_email(user['email']): log.debug("SPAM: Need to delete %s, %s" % (user['email'], user['username'])) #self.remove_registration_entry(user['username']) return False # test for minimum name length if len(user['username']) < MINIMUM_LENGTH_NAME: log.debug("Expensive name %s. Skipping." % user['username']) return False # test for ignoring names starting with certain patterns if ignoreRegistration(user['username'], IGNORE_NAMES_STARTING_WITH): log.debug("Ignoring: %s" % user['username']) return False if not validRegistrationEmail(user['email'], self.email_list): log.debug("Email rejected by filter: %s" % user['email']) #self.remove_registration_entry(user['username']) return True return True def update_users(self, spam_protection=False, reprocess_username=None): """ Process new profile updates from the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.updates.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: continue # for spam protection if check_banned_email(user['email']): if spam_protection: log.debug("Deleting spam: %s, %s" % (user['email'], user['username'])) self.updates.remove({"user_id": new_user['user_id']}) else: log.debug("Need to delete %s, %s" % (user['email'], user['username'])) continue # mode for reprocessing a single user, ignore others if reprocess_username is not None: if user['username'] != reprocess_username: #log.debug("Ignoring: %s" % user['username']) continue fqu = user['username'] + "." + DEFAULT_NAMESPACE btc_address = nmc_to_btc_address(user['namecoin_address']) data_value = convert_profile_format(user) encrypted_privkey = new_user['encrypted_private_key'] hex_privkey = bip38_decrypt(str(encrypted_privkey), WALLET_SECRET) if nameRegistered(fqu): if profilePublished(fqu, data_value): log.debug("Profile match, removing: %s" % fqu) self.updates.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: log.debug("Processing: %s, %s" % (fqu, user['email'])) try: self.registrar_server.process_subsidized_nameop(fqu, owner_privkey=hex_privkey, profile=data_value, nameop='update') except Exception as e: log.debug(e) else: log.debug("Not registered: %s" % fqu) def transfer_users(self, spam_protection=False, reprocess_username=None): """ Process new transfer from the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.exports.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: continue # add spam protection here # mode for reprocessing a single user, ignore others if reprocess_username is not None: if user['username'] != reprocess_username: continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = new_user['recipient_address'] try: encrypted_privkey = new_user['encrypted_private_key'] hex_privkey = bip38_decrypt(str(encrypted_privkey), WALLET_SECRET) except: log.debug("no private key") #self.exports.remove({"user_id": new_user['user_id']}) else: log.debug("To export: %s to %s" % (fqu, transfer_address)) if nameRegistered(fqu): if ownerName(fqu, transfer_address): log.debug("Name transferred, removing: %s" % fqu) self.exports.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: log.debug("Processing: %s, %s" % (fqu, user['email'])) #try: self.registrar_server.process_subsidized_nameop(fqu, owner_privkey=hex_privkey, transfer_address=transfer_address, nameop='transfer', profile="") #except Exception as e: # log.debug(e) else: log.debug("Not registered: %s" % fqu) def remove_registration_entry(self, username): check_user = self.users.find_one({"username": username}) user_id = check_user['_id'] check_register = self.registrations.find_one({"user_id": user_id}) if check_register is None or check_user is None: log.debug("No such user") else: log.debug("Removing: %s" % username) self.registrations.remove({"user_id": user_id}) def remove_user(self, username): check_user = self.users.find_one({"username": username}) if check_user is None or '_id' not in check_user: log.debug("No such user") else: log.debug("Removing: %s" % username) #self.users.remove({"user_id": check_user['_id']}) def reprocess_user(self, username, nameop=None): user = self.users.find_one({"username": username}) if not self.validUser(user, None): log.debug("Need to remove: %s" % username) return if whiteListedUser(user['email'], user['profile']): log.debug("White-listed: %s" % user['email']) else: log.debug("Not registering: %s" % user['email']) #return fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) data_value = convert_profile_format(user) log.debug("Reprocessing user: %s" % fqu) self.registrar_server.process_nameop(fqu, data_value, transfer_address, nameop=nameop) def release_username(self, username, new_owner): user = self.users.find_one({"username": new_owner}) fqu = username + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] self.registrar_server.release_username(fqu, profile, transfer_address) def change_username(self, username, new_username): user = self.users.find_one({"username": username}) user['username'] = new_username self.users.save(user) def change_email(self, current_email, new_email): user = self.users.find_one({"email": current_email}) user['email'] = new_email self.users.save(user) def display_stats(self): log.debug("Pending registrations: %s" % self.registrations.find().count()) log.debug("Pending updates: %s" % self.updates.find().count()) def display_userinfo(self, username=None, email=None): if username is None and email is None: log.debug("Provide username or email") return elif username is not None: user = self.users.find_one({"username": username}) pprint(user) elif email is not None: user = self.users.find_one({"email": email}) pprint(user) return user['profile'], user['ecdsa_public_key'] def display_current_states(self): """ Display current states of all pending registrations """ counter_register = 0 counter_update = 0 counter_dht = 0 counter_transfer = 0 for new_user in self.registrations.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if not self.validUser(user, new_user): continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] if not nameRegistered(fqu): counter_register += 1 elif not profileonBlockchain(fqu, profile): counter_update += 1 elif not profileonDHT(fqu, profile): counter_dht += 1 elif not ownerName(fqu, transfer_address): counter_transfer += 1 log.debug("Pending registrations: %s" % counter_register) log.debug("Pending updates: %s" % counter_update) log.debug("Pending DHT writes: %s" % counter_dht) log.debug("Pending transfers: %s" % counter_transfer)
class WebappDriver(object): """ Registrar driver for webapp """ def __init__(self): self.users = webapp_db.user self.registrations = webapp_db.user_registration self.updates = webapp_db.profile_update self.registrar_server = RegistrarServer() def process_new_users(self, nameop=None, spam_protection=False): """ Process new registrations coming in on the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.registrations.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: log.debug("No such user, need to remove: %s" % new_user['_id']) self.registrations.remove({'_id': new_user['_id']}) continue # for spam protection if check_banned_email(user['email']): if spam_protection: log.debug("Deleting spam %s, %s" % (user['email'], user['username'])) self.users.remove({"email": user['email']}) else: log.debug("Need to delete %s, %s" % (user['email'], user['username'])) continue # test for minimum name length if len(user['username']) < MINIMUM_LENGTH_NAME: log.debug("Expensive name %s. Skipping." % user['username']) continue # test for ignoring names starting with certain patterns if ignoreRegistration(user['username'], IGNORE_NAMES_STARTING_WITH): log.debug("Ignoring: %s" % user['username']) continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] log.debug("Processing: %s" % fqu) if registrationComplete(fqu, profile, transfer_address): log.debug("Registration complete %s. Removing." % fqu) self.registrations.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: try: self.registrar_server.process_nameop(fqu, profile, transfer_address, nameop=nameop) except Exception as e: log.debug(e) def update_users(self, spam_protection=False): """ Process new profile updates from the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.updates.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: continue # for spam protection if check_banned_email(user['email']): if spam_protection: log.debug("Deleting spam: %s, %s" % (user['email'], user['username'])) self.updates.remove({"user_id": new_user['user_id']}) else: log.debug("Need to delete %s, %s" % (user['email'], user['username'])) continue fqu = user['username'] + "." + DEFAULT_NAMESPACE btc_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] encrypted_privkey = new_user['encrypted_private_key'] hex_privkey = bip38_decrypt(str(encrypted_privkey), WALLET_SECRET) if nameRegistered(fqu): if profilePublished(fqu, profile): log.debug("Profile match, removing: %s" % fqu) self.updates.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: log.debug("Processing: %s, %s" % (fqu, user['email'])) try: self.registrar_server.subsidized_nameop( fqu, profile, hex_privkey=hex_privkey, nameop='update') except Exception as e: log.debug(e) else: log.debug("Not registered: %s" % fqu) def remove_entry(self, username): check_user = self.users.find_one({"username": username}) user_id = check_user['_id'] check_register = self.registrations.find_one({"user_id": user_id}) if check_register is None or check_user is None: log.debug("No such user") else: log.debug("Removing: %s" % username) self.registrations.remove({"user_id": user_id}) def reprocess_user(self, username, nameop): user = self.users.find_one({"username": username}) fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] log.debug("Reprocessing user: %s" % fqu) self.registrar_server.process_nameop(fqu, profile, transfer_address, nameop=nameop) def rename_user(self, username, new_username): user = self.users.find_one({"username": username}) user['username'] = new_username self.users.save(user) def display_stats(self): log.debug("Pending registrations: %s" % self.registrations.find().count()) log.debug("Pending updates: %s" % self.updates.find().count())
class WebappDriver(object): """ Registrar driver for webapp """ def __init__(self): self.users = webapp_db.user self.registrations = webapp_db.user_registration self.updates = webapp_db.profile_update self.registrar_server = RegistrarServer() def process_new_users(self, nameop=None, spam_protection=False): """ Process new registrations coming in on the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.registrations.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: log.debug("No such user, need to remove: %s" % new_user['_id']) self.registrations.remove({'_id': new_user['_id']}) continue # for spam protection if check_banned_email(user['email']): if spam_protection: log.debug("Deleting spam %s, %s" % (user['email'], user['username'])) self.users.remove({"email": user['email']}) else: log.debug("Need to delete %s, %s" % (user['email'], user['username'])) continue # test for minimum name length if len(user['username']) < MINIMUM_LENGTH_NAME: log.debug("Expensive name %s. Skipping." % user['username']) continue # test for ignoring names starting with certain patterns if ignoreRegistration(user['username'], IGNORE_NAMES_STARTING_WITH): log.debug("Ignoring: %s" % user['username']) continue fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] log.debug("Processing: %s" % fqu) if registrationComplete(fqu, profile, transfer_address): log.debug("Registration complete %s. Removing." % fqu) self.registrations.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: try: self.registrar_server.process_nameop(fqu, profile, transfer_address, nameop=nameop) except Exception as e: log.debug(e) def update_users(self, spam_protection=False): """ Process new profile updates from the webapp """ counter = 0 self.registrar_server.reset_flag() for new_user in self.updates.find(no_cursor_timeout=True): user = get_db_user_from_id(new_user, self.users) if user is None: continue # for spam protection if check_banned_email(user['email']): if spam_protection: log.debug("Deleting spam: %s, %s" % (user['email'], user['username'])) self.updates.remove({"user_id": new_user['user_id']}) else: log.debug("Need to delete %s, %s" % (user['email'], user['username'])) continue fqu = user['username'] + "." + DEFAULT_NAMESPACE btc_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] encrypted_privkey = new_user['encrypted_private_key'] hex_privkey = bip38_decrypt(str(encrypted_privkey), WALLET_SECRET) if nameRegistered(fqu): if profilePublished(fqu, profile): log.debug("Profile match, removing: %s" % fqu) self.updates.remove({"user_id": new_user['user_id']}) refresh_resolver(user['username']) else: log.debug("Processing: %s, %s" % (fqu, user['email'])) try: self.registrar_server.subsidized_nameop(fqu, profile, hex_privkey=hex_privkey, nameop='update') except Exception as e: log.debug(e) else: log.debug("Not registered: %s" % fqu) def remove_entry(self, username): check_user = self.users.find_one({"username": username}) user_id = check_user['_id'] check_register = self.registrations.find_one({"user_id": user_id}) if check_register is None or check_user is None: log.debug("No such user") else: log.debug("Removing: %s" % username) self.registrations.remove({"user_id": user_id}) def reprocess_user(self, username, nameop): user = self.users.find_one({"username": username}) fqu = user['username'] + "." + DEFAULT_NAMESPACE transfer_address = nmc_to_btc_address(user['namecoin_address']) profile = user['profile'] log.debug("Reprocessing user: %s" % fqu) self.registrar_server.process_nameop(fqu, profile, transfer_address, nameop=nameop) def rename_user(self, username, new_username): user = self.users.find_one({"username": username}) user['username'] = new_username self.users.save(user) def display_stats(self): log.debug("Pending registrations: %s" % self.registrations.find().count()) log.debug("Pending updates: %s" % self.updates.find().count())