Esempio n. 1
0
def stop_dev(request_json, app_slug=None):
    user = db.get_user_from_creds(request_json.get('_clutch_username'),
                                  request_json.get('_clutch_password'))
    if not user:
        return utils.jsonrpc_error(request_json, 10)

    app = db.get_app_from_user_and_slug(user['id'], app_slug)
    if not app:
        return utils.jsonrpc_error({}, 9, {'app_slug': app_slug})

    db.delete_dev_modes_for_user_and_app(user['id'], app['id'])

    return utils.jsonrpc_response(request_json, {
        'development': 'inactive',
    })
Esempio n. 2
0
def stop_dev(request_json, app_slug=None):
    user = db.get_user_from_creds(
        request_json.get('_clutch_username'),
        request_json.get('_clutch_password')
    )
    if not user:
        return utils.jsonrpc_error(request_json, 10)

    app = db.get_app_from_user_and_slug(user['id'], app_slug)
    if not app:
        return utils.jsonrpc_error({}, 9, {'app_slug': app_slug})

    db.delete_dev_modes_for_user_and_app(user['id'], app['id'])

    return utils.jsonrpc_response(request_json, {
        'development': 'inactive',
    })
Esempio n. 3
0
def start_dev(request_json, app_slug=None, url=None, toolbar=None):
    user = db.get_user_from_creds(request_json.get('_clutch_username'),
                                  request_json.get('_clutch_password'))
    if not user:
        return utils.jsonrpc_error(request_json, 10)

    app = db.get_app_from_user_and_slug(user['id'], app_slug)
    if not app:
        return utils.jsonrpc_error({}, 9, {'app_slug': app_slug})

    if toolbar is None:
        toolbar = True

    db.create_or_update_dev_mode(app['id'], user['id'], url, toolbar)

    return utils.jsonrpc_response(request_json, {
        'development': 'active',
    })
Esempio n. 4
0
def start_dev(request_json, app_slug=None, url=None, toolbar=None):
    user = db.get_user_from_creds(
        request_json.get('_clutch_username'),
        request_json.get('_clutch_password')
    )
    if not user:
        return utils.jsonrpc_error(request_json, 10)

    app = db.get_app_from_user_and_slug(user['id'], app_slug)
    if not app:
        return utils.jsonrpc_error({}, 9, {'app_slug': app_slug})

    if toolbar is None:
        toolbar = True

    db.create_or_update_dev_mode(app['id'], user['id'], url, toolbar)

    return utils.jsonrpc_response(request_json, {
        'development': 'active',
    })
Esempio n. 5
0
def authenticate(request_json, username=None, password=None, app_slug=None):
    user = db.get_user_from_creds(username, password)
    user_dct = {
        'user_id': user['id'],
        'username': user['username'],
        'email': user['email'],
    } if user else None

    # Start building up the request
    resp = {'user': user_dct}

    # Validate with an app slug if it's provided
    if app_slug is not None:
        app = db.get_app_from_user_and_slug(user['id'] if user else None,
                                            app_slug)
        if app:
            resp[app_slug] = True
        else:
            resp[app_slug] = False

    return utils.jsonrpc_response(request_json, resp)
Esempio n. 6
0
def authenticate(request_json, username=None, password=None, app_slug=None):
    user = db.get_user_from_creds(username, password)
    user_dct = {
        'user_id': user['id'],
        'username': user['username'],
        'email': user['email'],
    } if user else None

    # Start building up the request
    resp = {'user': user_dct}

    # Validate with an app slug if it's provided
    if app_slug is not None:
        app = db.get_app_from_user_and_slug(
            user['id'] if user else None, app_slug)
        if app:
            resp[app_slug] = True
        else:
            resp[app_slug] = False

    return utils.jsonrpc_response(request_json, resp)
Esempio n. 7
0
def handle_upload(env, start_response):
    form = cgi.FieldStorage(fp=env['wsgi.input'], environ=env)

    if 'archive' not in form:
        return utils.jsonrpc_error({}, 4)

    app_slug = env.get('HTTP_X_APP_SLUG')
    if not app_slug:
        return utils.jsonrpc_error({}, 7)

    user = db.get_user_from_creds(
        env.get('HTTP_X_CLUTCH_USERNAME'),
        env.get('HTTP_X_CLUTCH_PASSWORD'),
    )
    if not user:
        return utils.jsonrpc_error({}, 10)

    app = db.get_app_from_user_and_slug(user['id'], app_slug)
    if not app:
        return utils.jsonrpc_error({}, 9, {'app_slug': app_slug})

    app_version = db.get_latest_app_version(app['id'])
    if app_version is None:
        app_version = 1
    else:
        app_version += 1

    tmp = StringIO(form['archive'].file.read())
    extracted = tempfile.mkdtemp()
    zip_context = contextlib.closing(
        zipfile.ZipFile(tmp, 'r', zipfile.ZIP_DEFLATED))
    with zip_context as z:
        namelist = z.namelist()
        for name in namelist:
            if name.startswith('..'):
                return utils.jsonrpc_error({}, 6, {'name': name})
            if name.startswith('/'):
                return utils.jsonrpc_error({}, 6, {'name': name})
        z.extractall(extracted)

    # Get rid of the StringIO for memory savings
    del tmp

    # Now we upload that to S3
    conn = S3Connection(settings.AWS_ACCESS_KEY, settings.AWS_ACCESS_SECRET)
    bucket = conn.get_bucket(settings.AWS_BUCKET_NAME)
    for name in namelist:
        upload_fn = '%s/%s/files/%s' % (app_slug, app_version, name)
        key = bucket.new_key(upload_fn)
        key.set_contents_from_filename(os.path.join(extracted, name))

    # Generate an md5 hash of each file in the upload
    hashes = {}
    for name in namelist:
        with open(os.path.join(extracted, name), 'r') as f:
            hashes[name] = hashlib.md5(f.read()).hexdigest()

    # JSON-encode the md5 hashes and upload them to s3
    manifest = simplejson.dumps(hashes)
    manifest_key = '%s/%s/meta/manifest.json' % (app_slug, app_version)
    key = bucket.new_key(manifest_key)
    key.set_contents_from_string(manifest)

    # Delete the temporary directory
    shutil.rmtree(extracted)

    db.create_app_version(app['id'], app_version)

    return utils.jsonrpc_response({}, {'version': app_version})
Esempio n. 8
0
def handle_upload(env, start_response):
    form = cgi.FieldStorage(fp=env['wsgi.input'], environ=env)

    if 'archive' not in form:
        return utils.jsonrpc_error({}, 4)

    app_slug = env.get('HTTP_X_APP_SLUG')
    if not app_slug:
        return utils.jsonrpc_error({}, 7)

    user = db.get_user_from_creds(
        env.get('HTTP_X_CLUTCH_USERNAME'),
        env.get('HTTP_X_CLUTCH_PASSWORD'),
    )
    if not user:
        return utils.jsonrpc_error({}, 10)

    app = db.get_app_from_user_and_slug(user['id'], app_slug)
    if not app:
        return utils.jsonrpc_error({}, 9, {'app_slug': app_slug})

    app_version = db.get_latest_app_version(app['id'])
    if app_version is None:
        app_version = 1
    else:
        app_version += 1

    tmp = StringIO(form['archive'].file.read())
    extracted = tempfile.mkdtemp()
    zip_context = contextlib.closing(
        zipfile.ZipFile(tmp, 'r', zipfile.ZIP_DEFLATED))
    with zip_context as z:
        namelist = z.namelist()
        for name in namelist:
            if name.startswith('..'):
                return utils.jsonrpc_error({}, 6, {'name': name})
            if name.startswith('/'):
                return utils.jsonrpc_error({}, 6, {'name': name})
        z.extractall(extracted)

    # Get rid of the StringIO for memory savings
    del tmp

    # Now we upload that to S3
    conn = S3Connection(settings.AWS_ACCESS_KEY, settings.AWS_ACCESS_SECRET)
    bucket = conn.get_bucket(settings.AWS_BUCKET_NAME)
    for name in namelist:
        upload_fn = '%s/%s/files/%s' % (app_slug, app_version, name)
        key = bucket.new_key(upload_fn)
        key.set_contents_from_filename(os.path.join(extracted, name))

    # Generate an md5 hash of each file in the upload
    hashes = {}
    for name in namelist:
        with open(os.path.join(extracted, name), 'r') as f:
            hashes[name] = hashlib.md5(f.read()).hexdigest()

    # JSON-encode the md5 hashes and upload them to s3
    manifest = simplejson.dumps(hashes)
    manifest_key = '%s/%s/meta/manifest.json' % (app_slug, app_version)
    key = bucket.new_key(manifest_key)
    key.set_contents_from_string(manifest)

    # Delete the temporary directory
    shutil.rmtree(extracted)

    db.create_app_version(app['id'], app_version)

    return utils.jsonrpc_response({}, {'version': app_version})