예제 #1
0
    def post(self):
        """
        Create a new repository.
        """
        owner = get_authenticated_user()
        req = request.get_json()

        if owner is None and "namespace" not in "req":
            raise InvalidRequest(
                "Must provide a namespace or must be logged in.")

        namespace_name = req[
            "namespace"] if "namespace" in req else owner.username

        permission = CreateRepositoryPermission(namespace_name)
        if permission.can():
            repository_name = req["repository"]
            visibility = req["visibility"]

            if model.repo_exists(namespace_name, repository_name):
                raise request_error(message="Repository already exists")

            visibility = req["visibility"]
            if visibility == "private":
                check_allowed_private_repos(namespace_name)

            # Verify that the repository name is valid.
            if not REPOSITORY_NAME_REGEX.match(repository_name):
                raise InvalidRequest("Invalid repository name")

            kind = req.get("repo_kind", "image") or "image"
            model.create_repo(
                namespace_name,
                repository_name,
                owner,
                req["description"],
                visibility=visibility,
                repo_kind=kind,
            )

            log_action(
                "create_repo",
                namespace_name,
                {
                    "repo": repository_name,
                    "namespace": namespace_name
                },
                repo_name=repository_name,
            )
            return {
                "namespace": namespace_name,
                "name": repository_name,
                "kind": kind,
            }, 201

        raise Unauthorized()
예제 #2
0
파일: repository.py 프로젝트: xzwupeng/quay
    def post(self):
        """Create a new repository."""
        owner = get_authenticated_user()
        req = request.get_json()

        if owner is None and 'namespace' not in 'req':
            raise InvalidRequest(
                'Must provide a namespace or must be logged in.')

        namespace_name = req[
            'namespace'] if 'namespace' in req else owner.username

        permission = CreateRepositoryPermission(namespace_name)
        if permission.can():
            repository_name = req['repository']
            visibility = req['visibility']

            if model.repo_exists(namespace_name, repository_name):
                raise request_error(message='Repository already exists')

            visibility = req['visibility']
            if visibility == 'private':
                check_allowed_private_repos(namespace_name)

            # Verify that the repository name is valid.
            if not REPOSITORY_NAME_REGEX.match(repository_name):
                raise InvalidRequest('Invalid repository name')

            kind = req.get('repo_kind', 'image') or 'image'
            model.create_repo(namespace_name,
                              repository_name,
                              owner,
                              req['description'],
                              visibility=visibility,
                              repo_kind=kind)

            log_action('create_repo',
                       namespace_name, {
                           'repo': repository_name,
                           'namespace': namespace_name
                       },
                       repo_name=repository_name)
            return {
                'namespace': namespace_name,
                'name': repository_name,
                'kind': kind,
            }, 201

        raise Unauthorized()