def _get_release(release): with dbo.begin() as trans: release_row = releases_service.get_release(release, trans) if release_row: return {"data": release_row["blob"], "data_version": release_row["data_versions"]["."]} else: releases = dbo.releases.getReleases(name=release, limit=1, transaction=trans) return releases[0] if releases else None
def get_release_single_locale(release, platform, locale, with_csrf_header=False): with dbo.begin() as trans: release_row = releases_service.get_release(release, trans) if release_row: locale_data = get_by_path(release_row["blob"], ("platforms", platform, "locales", locale)) data_version = get_by_path(release_row["data_versions"], ("platforms", platform, "locales", locale)) else: try: locale_data = dbo.releases.getLocale(release, platform, locale, transaction=trans) except KeyError as e: return problem(404, "Not Found", json.dumps(e.args)) data_version = dbo.releases.getReleases(name=release, transaction=trans)[0]["data_version"] headers = {"X-Data-Version": data_version} if with_csrf_header: headers.update(get_csrf_headers()) return Response(response=json.dumps(locale_data), mimetype="application/json", headers=headers)
def decorated(*args, **kwargs): trans = dbo.begin() # Transactions are automatically rolled back by the context manager if # _post raises an Exception, but we need to make sure they are also # rolled back if the View returns any sort of error. try: ret = request_handler(*args, transaction=trans, **kwargs) if ret.status_code >= 400: trans.rollback() else: trans.commit() return ret except: trans.rollback() raise finally: trans.close()
def release_list(request): kwargs = {} if request.args.get("product"): kwargs["product"] = request.args.get("product") if request.args.get("name_prefix"): kwargs["name_prefix"] = request.args.get("name_prefix") if request.args.get("names_only"): kwargs["nameOnly"] = True with dbo.begin() as trans: ret = dbo.releases.getReleaseInfo(**kwargs, transaction=trans) for r in releases_service.get_releases(trans)["releases"]: if kwargs.get("product") and r["product"] != kwargs["product"]: continue if kwargs.get("name_prefix") and not r["name"].startswith(kwargs["name_prefix"]): continue ret.append(r) return ret
def setup_request(): if request.full_path.startswith("/v2"): from auslib.global_state import dbo request.transaction = dbo.begin() if request.method in ("POST", "PUT", "DELETE"): username = verified_userinfo(request, app.config["AUTH_DOMAIN"], app.config["AUTH_AUDIENCE"])["email"] if not username: log.warning("Login Required") return problem(401, "Unauthenticated", "Login Required") # Machine to machine accounts are identified by uninformative clientIds # In order to keep Balrog permissions more readable, we map them to # more useful usernames, which are stored in the app config. if "@" not in username: username = app.config["M2M_ACCOUNT_MAPPING"].get(username, username) # Even if the user has provided a valid access token, we don't want to assume # that person should be able to access Balrog (in case auth0 is not configured # to be restrictive enough. elif not dbo.isKnownUser(username): log.warning("Authorization Required") return problem(403, "Forbidden", "Authorization Required") request.username = username
def wrapper(*args, **kwargs): with dbo.begin() as transaction: return f(*args, transaction=transaction, **kwargs)
def delete(self, *args, **kwargs): self.log.debug("processing DELETE request to %s" % request.path) with dbo.begin() as trans: return self._delete(*args, transaction=trans, **kwargs)
def put(self, *args, **kwargs): self.log.debug("processing PUT request to %s" % request.path) with dbo.begin() as trans: return self._put(*args, transaction=trans, **kwargs)