示例#1
0
    def get(self, filename=None):
        """GET

    Args:
      filename: string like Firefox-1.0.dmg
    """
        auth_return = auth.DoAnyAuth()
        if hasattr(auth_return, 'email'):
            email = auth_return.email()
            if not any((
                    auth.IsAdminUser(email),
                    auth.IsSupportUser(email),
            )):
                raise auth.IsAdminMismatch

        if filename:
            filename = urllib.unquote(filename)
            hash_str = self.request.get('hash')

            if hash_str:
                lock = models.GetLockForPackage(filename)
                try:
                    lock.Acquire(timeout=30, max_acquire_attempts=5)
                except datastore_locks.AcquireLockError:
                    self.response.set_status(httplib.FORBIDDEN)
                    self.response.out.write('Could not lock pkgsinfo')
                    return

            pkginfo = models.PackageInfo.get_by_key_name(filename)
            if pkginfo:
                self.response.headers[
                    'Content-Type'] = 'text/xml; charset=utf-8'
                if hash_str:
                    self.response.headers['X-Pkgsinfo-Hash'] = self._Hash(
                        pkginfo.plist)
                self.response.out.write(pkginfo.plist)
            else:
                if hash_str:
                    lock.Release()
                self.response.set_status(httplib.NOT_FOUND)
                return

            if hash_str:
                lock.Release()
        else:
            query = models.PackageInfo.all()

            filename = self.request.get('filename')
            if filename:
                query.filter('filename', filename)

            install_types = self.request.get_all('install_types')
            for install_type in install_types:
                query.filter('install_types =', install_type)

            catalogs = self.request.get_all('catalogs')
            for catalog in catalogs:
                query.filter('catalogs =', catalog)

            pkgs = []
            for p in query:
                pkg = {}
                for k in p.properties():
                    if k != '_plist':
                        pkg[k] = getattr(p, k)
                pkgs.append(pkg)
            self.response.out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
            self.response.out.write(plist.GetXmlStr(pkgs))
            self.response.headers['Content-Type'] = 'text/xml; charset=utf-8'
示例#2
0
    def get(self, filename=None):
        """GET

    Args:
      filename: string like Firefox-1.0.dmg
    """
        auth_return = auth.DoAnyAuth()
        if hasattr(auth_return, "email"):
            email = auth_return.email()
            if not auth.IsAdminUser(email) and not auth.IsSupportUser(email):
                raise auth.IsAdminMismatch

        if filename:
            filename = urllib.unquote(filename)
            hash_str = self.request.get("hash")

            if hash_str:
                lock = "pkgsinfo_%s" % filename
                if not gae_util.ObtainLock(lock, timeout=5.0):
                    self.response.set_status(403)
                    self.response.out.write("Could not lock pkgsinfo")
                    return

            pkginfo = models.PackageInfo.get_by_key_name(filename)
            if pkginfo:
                self.response.headers["Content-Type"] = "text/xml; charset=utf-8"
                if hash_str:
                    self.response.headers["X-Pkgsinfo-Hash"] = self._Hash(pkginfo.plist)
                self.response.out.write(pkginfo.plist)
            else:
                if hash_str:
                    gae_util.ReleaseLock(lock)
                self.response.set_status(404)
                return

            if hash_str:
                gae_util.ReleaseLock(lock)
        else:
            query = models.PackageInfo.all()

            filename = self.request.get("filename")
            if filename:
                query.filter("filename", filename)

            install_types = self.request.get_all("install_types")
            for install_type in install_types:
                query.filter("install_types =", install_type)

            catalogs = self.request.get_all("catalogs")
            for catalog in catalogs:
                query.filter("catalogs =", catalog)

            pkgs = []
            for p in query:
                pkg = {}
                for k in p.properties():
                    if k != "_plist":
                        pkg[k] = getattr(p, k)
                pkgs.append(pkg)
            self.response.out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
            self.response.out.write(plist.GetXmlStr(pkgs))
            self.response.headers["Content-Type"] = "text/xml; charset=utf-8"
示例#3
0
  def get(self, filename=None):
    """GET

    Args:
      filename: string like Firefox-1.0.dmg
    """
    auth_return = auth.DoAnyAuth()
    if hasattr(auth_return, 'email'):
      email = auth_return.email()
      if not any((auth.IsAdminUser(email),
                  auth.IsSupportUser(email),
                 )):
        raise auth.IsAdminMismatch

    if filename:
      filename = urllib.unquote(filename)
      hash_str = self.request.get('hash')

      if hash_str:
        lock = 'pkgsinfo_%s' % filename
        if not gae_util.ObtainLock(lock, timeout=5.0):
          self.response.set_status(httplib.FORBIDDEN)
          self.response.out.write('Could not lock pkgsinfo')
          return

      pkginfo = models.PackageInfo.get_by_key_name(filename)
      if pkginfo:
        self.response.headers['Content-Type'] = 'text/xml; charset=utf-8'
        if hash_str:
          self.response.headers['X-Pkgsinfo-Hash'] = self._Hash(pkginfo.plist)
        self.response.out.write(pkginfo.plist)
      else:
        if hash_str:
          gae_util.ReleaseLock(lock)
        self.response.set_status(httplib.NOT_FOUND)
        return

      if hash_str:
        gae_util.ReleaseLock(lock)
    else:
      query = models.PackageInfo.all()

      filename = self.request.get('filename')
      if filename:
        query.filter('filename', filename)

      install_types = self.request.get_all('install_types')
      for install_type in install_types:
        query.filter('install_types =', install_type)

      catalogs = self.request.get_all('catalogs')
      for catalog in catalogs:
        query.filter('catalogs =', catalog)

      pkgs = []
      for p in query:
        pkg = {}
        for k in p.properties():
          if k != '_plist':
            pkg[k] = getattr(p, k)
        pkgs.append(pkg)
      self.response.out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
      self.response.out.write(plist.GetXmlStr(pkgs))
      self.response.headers['Content-Type'] = 'text/xml; charset=utf-8'
示例#4
0
    def get(self, filename=None):
        """GET

    Args:
      filename: string like Firefox-1.0.dmg
    """
        auth_return = auth.DoAnyAuth()
        if hasattr(auth_return, 'email'):
            email = auth_return.email()
            if not any((
                    auth.IsAdminUser(email),
                    auth.IsSupportUser(email),
            )):
                raise auth.IsAdminMismatch

        if filename:
            filename = urllib.unquote(filename)
            hash_str = self.request.get('hash')

            if hash_str:
                lock = 'pkgsinfo_%s' % filename
                if not gae_util.ObtainLock(lock, timeout=5.0):
                    self.response.set_status(403)
                    self.response.out.write('Could not lock pkgsinfo')
                    return

            pkginfo = models.PackageInfo.get_by_key_name(filename)
            if pkginfo:
                self.response.headers[
                    'Content-Type'] = 'text/xml; charset=utf-8'
                if hash_str:
                    self.response.headers['X-Pkgsinfo-Hash'] = self._Hash(
                        pkginfo.plist)
                self.response.out.write(pkginfo.plist)
            else:
                if hash_str:
                    gae_util.ReleaseLock(lock)
                self.response.set_status(404)
                return

            if hash_str:
                gae_util.ReleaseLock(lock)
        else:
            query = models.PackageInfo.all()

            filename = self.request.get('filename')
            if filename:
                query.filter('filename', filename)

            install_types = self.request.get_all('install_types')
            for install_type in install_types:
                query.filter('install_types =', install_type)

            catalogs = self.request.get_all('catalogs')
            for catalog in catalogs:
                query.filter('catalogs =', catalog)

            pkgs = []
            for p in query:
                pkg = {}
                for k in p.properties():
                    if k != '_plist':
                        pkg[k] = getattr(p, k)
                pkgs.append(pkg)
            self.response.out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
            self.response.out.write(plist.GetXmlStr(pkgs))
            self.response.headers['Content-Type'] = 'text/xml; charset=utf-8'