def generate_secret_key(self): secret_key = CustomAppSettings.get_new_secret_key() # Insert the key into the db db = self.get_user_profiles_db() res = db.users.update(spec={'_id':ObjectId(self.get_user_id())}, document={'$set':{'secret_key': secret_key}}, upsert=True) return secret_key, res
def create_user(alias='', plan_name='basic', email='', facebook_user={}, *args, **kwargs): db = User({}).get_user_profiles_db() u = None fb_id = '' # If Facebook user is supplied, use it as the highest priority if facebook_user: # Create a brand new user alias = facebook_user.get('name', '').strip() email = facebook_user.get('email', '').strip() fb_id = facebook_user.get('id', '').strip() elif email: email = email.strip() if User({})._validate_email(email): # Make sure email does not exist u = db.users.find_one({'contacts.email': email.lower(), 'role': 'user'}) if u: return {'error': 'Email already occupied'} else: return {'error': 'Invalid email'} # ---- Green light for creating new user #get plan plan = db.plans.find_one({'name': plan_name}) # Get db index db_ind = db.counters.find_and_modify( query={'_id': 'dbindex'}, update={'$inc': {'seq': 1}}, upsert=True, new=True )['seq'] db_ind = int(db_ind) # Get new secret key secret_key = CustomAppSettings.get_new_secret_key() # Get time d = datetime.datetime.utcnow() # Create doc doc = { 'alias': alias.strip(), 'secret_key': secret_key.lower(), 'db_ind': db_ind, 'role': 'user', 'is_active': 0, 'created': d, 'actdeact': d, 'last_access': None, 'plan': {'id': plan['_id'], 'date': d}, 'plans_history': [], 'contacts': {'email': email.lower(), 'cell': ''}, 'points': 100, 'facebook_id': fb_id } # # Add additional fields # for k, v in kwargs.iteritems(): # if not k in doc: # doc[k] = v # Try to write userid = db.users.insert(doc) # Create indexes on user db cl = User({}).get_mongo() db = cl['webscr_' + str(db_ind)] db.urls.ensure_index('date_scraped', 1) db.task_meta.ensure_index('date_done', 1) return {'profile_id': userid}