From 8050d31c85f0833a7d1bc55a81ed8891a7dc97e7 Mon Sep 17 00:00:00 2001 From: Delfer Date: Wed, 20 Dec 2017 12:22:29 +0300 Subject: [PATCH 01/10] Updated to Ubuntu 16.04 and Java 8 --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index c647697..bbdc8e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:14.04 +FROM ubuntu:16.04 ENV DEBIAN_FRONTEND noninteractive #prevent apt from installing recommended packages @@ -6,11 +6,11 @@ RUN echo 'APT::Install-Recommends "false";' > /etc/apt/apt.conf.d/docker-no-reco echo 'APT::Install-Suggests "false";' >> /etc/apt/apt.conf.d/docker-no-recommends # Install java and tomcat -RUN apt-get update && apt-get install -y tomcat7 openjdk-7-jdk libyaml-perl libfile-slurp-perl && \ +RUN apt-get update && apt-get install -y tomcat7 openjdk-8-jdk libyaml-perl libfile-slurp-perl && \ rm -rf /var/lib/tomcat7/webapps/* && \ rm -rf /var/lib/apt/lists/* -ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64 +ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 ENV CATALINA_HOME /usr/share/tomcat7 ENV CATALINA_BASE /var/lib/tomcat7 From 054a8b02b713cfde391864f81c1d6ef73a7ad2f4 Mon Sep 17 00:00:00 2001 From: Andrei Avram Date: Sun, 21 Jan 2018 19:22:29 +0200 Subject: [PATCH 02/10] Update volume definition to match config The config of the repository lists /repository, not /var/lib/repository as the root folder --- examples/auth-enabled/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/auth-enabled/docker-compose.yml b/examples/auth-enabled/docker-compose.yml index 3afdcf5..1543bcc 100644 --- a/examples/auth-enabled/docker-compose.yml +++ b/examples/auth-enabled/docker-compose.yml @@ -17,7 +17,7 @@ services: - 5000:5000 volumes: - ./conf/registry:/etc/docker/registry:ro - - ./registry:/var/lib/registry + - ./registry:/registry networks: - registry-net From fab4d709478a8acdb362814b7017bc83a8f41c9f Mon Sep 17 00:00:00 2001 From: Andrei Avram Date: Sun, 21 Jan 2018 19:23:30 +0200 Subject: [PATCH 03/10] Update docker-compose file to match config --- examples/nginx-auth-enabled/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/nginx-auth-enabled/docker-compose.yml b/examples/nginx-auth-enabled/docker-compose.yml index 39942fe..3cc87c8 100644 --- a/examples/nginx-auth-enabled/docker-compose.yml +++ b/examples/nginx-auth-enabled/docker-compose.yml @@ -28,9 +28,9 @@ services: - 127.0.0.1:5000:5000 volumes: - ./conf/registry:/etc/docker/registry:ro - - ./registry:/var/lib/registry + - ./registry:/registry networks: - registry-net networks: - registry-net: \ No newline at end of file + registry-net: From 13869d5363250f3f4e89fbccb92268cb5c6338d5 Mon Sep 17 00:00:00 2001 From: NhungNgo Date: Thu, 30 Jul 2020 17:27:02 +0700 Subject: [PATCH 04/10] restrict user to view all available repos --- .../auth-enabled/conf/registry-web/config.yml | 2 ++ .../conf/registry-web/config.yml | 2 ++ grails-app/conf/config.yml | 2 ++ .../registry/web/RepositoryController.groovy | 35 ++++++++++++++++++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/examples/auth-enabled/conf/registry-web/config.yml b/examples/auth-enabled/conf/registry-web/config.yml index 4970163..0eaf822 100644 --- a/examples/auth-enabled/conf/registry-web/config.yml +++ b/examples/auth-enabled/conf/registry-web/config.yml @@ -2,6 +2,8 @@ registry: url: http://registry:5000/v2 name: localhost:5000 readonly: false + # with this config the user will not see all the available repos in docker-registry-web + show-permitted-repo-only: true auth: enabled: true key: /conf/auth.key diff --git a/examples/nginx-auth-enabled/conf/registry-web/config.yml b/examples/nginx-auth-enabled/conf/registry-web/config.yml index e2b4eef..035ebeb 100644 --- a/examples/nginx-auth-enabled/conf/registry-web/config.yml +++ b/examples/nginx-auth-enabled/conf/registry-web/config.yml @@ -2,6 +2,8 @@ registry: url: http://registry:5000/v2 name: localhost readonly: false + # with this config the user will not see all the available repos in docker-registry-web + show-permitted-repo-only: true auth: enabled: true key: /conf/auth.key diff --git a/grails-app/conf/config.yml b/grails-app/conf/config.yml index 5fdcaa4..768eb66 100644 --- a/grails-app/conf/config.yml +++ b/grails-app/conf/config.yml @@ -4,6 +4,8 @@ registry: # Docker registry url url: 'http://localhost:5001/v2/' name: 'hub.devspire.com.au' + # with this config the user will not see all the available repos in docker-registry-web + show-permitted-repo-only: true auth: enabled: true #issuer: 'xxx' diff --git a/grails-app/controllers/docker/registry/web/RepositoryController.groovy b/grails-app/controllers/docker/registry/web/RepositoryController.groovy index 2e12a38..59d289a 100644 --- a/grails-app/controllers/docker/registry/web/RepositoryController.groovy +++ b/grails-app/controllers/docker/registry/web/RepositoryController.groovy @@ -1,5 +1,8 @@ package docker.registry.web +import docker.registry.AccessControl +import docker.registry.Role +import docker.registry.RoleAccess import groovy.json.JsonSlurper import org.springframework.beans.factory.annotation.Value @@ -11,8 +14,12 @@ class RepositoryController { @Value('${registry.name}') String registryName + @Value('${registry.show-permitted-repo-only:#{false}}') + boolean enableShowPermittedRepoOnly + def restService def authService + def springSecurityService; //{"Type":"registry","Name":"catalog","Action":"*"} def index() { @@ -22,6 +29,8 @@ class RepositoryController { boolean hasNext = false def message def url = "_catalog?n=${recordsPerPage}" + + try { if (params.start) { url += "&last=${params.start}" @@ -37,8 +46,12 @@ class RepositoryController { pagination = hasNext || params.prev != null def repos = restResponse.json.repositories next = repos ? repos.last() : null + def permittedRepos = repos + if (enableShowPermittedRepoOnly == true) { + permittedRepos = filterPermittedRepoOnly(repos) + } - repoCount = repos.collect { name -> + repoCount = permittedRepos.collect { name -> def tagsCount = getTagList(name).size() [name: name, tags: tagsCount] } @@ -49,6 +62,26 @@ class RepositoryController { [repos: repoCount, pagination: pagination, next: next, prev: params.start, hasNext: hasNext, registryName: registryName, message: message] } + private List filterPermittedRepoOnly(repos) { + def currentUser = springSecurityService.currentUser + def roles = currentUser.authorities.collect { role -> + Role.findByAuthority(role.authority) + }.findAll { it } + def acls = roles.collect { role -> + RoleAccess.findAllByRole(role).acl + }.flatten() + repos.findAll { name -> hasPermission(acls, name) } + } + + def hasPermission(acls,name){ + + for (AccessControl element : acls) { + if (GlobMatcher.check(element.name, name)) { + return true; + } + } + return false + } def tags() { String name = params.id.decodeURL() def tags = getTags(name) From 90422bf471ed77b936fbf52e925536590f28859e Mon Sep 17 00:00:00 2001 From: NhungNgo Date: Thu, 30 Jul 2020 17:29:22 +0700 Subject: [PATCH 05/10] handle generating token for geting catalog --- .../services/docker/registry/web/AuthService.groovy | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/grails-app/services/docker/registry/web/AuthService.groovy b/grails-app/services/docker/registry/web/AuthService.groovy index 1fd98b4..5d4c5f7 100644 --- a/grails-app/services/docker/registry/web/AuthService.groovy +++ b/grails-app/services/docker/registry/web/AuthService.groovy @@ -74,6 +74,18 @@ class AuthService { }.actions.flatten().unique() log.info "Granting permissions: $actions" } + //scope: registry:catalog:* + if(aclList && scope && scope.type == 'registry' && scope.name == 'catalog' ){ + actions = aclList.collect { AccessControl acl -> + def scopeActions = scope.actions; + if(scopeActions.size()>0){ + if (GlobMatcher.check(acl.name, scopeActions[0])){ + return scopeActions[0] + }else + return AccessLevel.NONE.actions; + } + }.flatten().unique() + } actions } From 3c945d6fe7e268a94ae8893754a58e2b5eecd9dd Mon Sep 17 00:00:00 2001 From: NhungNgo Date: Thu, 30 Jul 2020 17:36:49 +0700 Subject: [PATCH 06/10] hide Events and Status links for non UI_ADMIN user --- grails-app/views/layouts/main.gsp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/grails-app/views/layouts/main.gsp b/grails-app/views/layouts/main.gsp index a7dccf5..bcdefa6 100644 --- a/grails-app/views/layouts/main.gsp +++ b/grails-app/views/layouts/main.gsp @@ -42,14 +42,15 @@
  • Roles -
  • - +
  • Events
  • Status
  • + +