def _find_doc(query, one_time=None, one_time_new=False): utils.rand_sleep() collection = mongo.get_collection('users_key_link') doc = collection.find_one(query) if one_time and doc and doc.get('one_time'): short_id = utils.generate_short_id() collection = mongo.get_collection('users_key_link') if one_time_new: set_doc = { 'short_id': short_id, } else: set_doc = { 'one_time': 'used', } response = collection.update({ '_id': doc['_id'], 'short_id': doc['short_id'], 'one_time': True, }, {'$set': set_doc}) if not response['updatedExisting']: return None if one_time_new: doc['short_id'] = short_id if not doc: time.sleep(settings.app.rate_limit_sleep) return doc
def _find_doc(query, one_time=None, one_time_new=False): utils.rand_sleep() collection = mongo.get_collection("users_key_link") doc = collection.find_one(query) if one_time and doc and doc.get("one_time"): short_id = utils.generate_short_id() collection = mongo.get_collection("users_key_link") if one_time_new: set_doc = {"short_id": short_id} else: set_doc = {"one_time": "used"} response = collection.update( {"_id": doc["_id"], "short_id": doc["short_id"], "one_time": True}, {"$set": set_doc} ) if not response["updatedExisting"]: return None if one_time_new: doc["short_id"] = short_id if not doc: time.sleep(settings.app.rate_limit_sleep) return doc
def create_user_key_link(self, user_id, one_time=False): success = False for _ in xrange(256): key_id = uuid.uuid4().hex short_id = utils.generate_short_id() try: self.key_link_collection.update({ 'org_id': self.id, 'user_id': user_id, }, {'$set': { 'key_id': key_id, 'short_id': short_id, 'one_time': one_time, 'timestamp': utils.now(), }}, upsert=True) except pymongo.errors.DuplicateKeyError: continue success = True break if not success: raise KeyLinkError('Failed to generate random key short id') return { 'id': key_id, 'key_url': '/key/%s.tar' % key_id, 'key_zip_url': '/key/%s.zip' % key_id, 'key_onc_url': '/key_onc/%s.zip' % key_id, 'view_url': '/k/%s' % short_id, 'uri_url': '/ku/%s' % short_id, }