Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
    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,
        }