Skip to content
This repository has been archived by the owner on Jan 17, 2023. It is now read-only.

Commit

Permalink
Merge pull request #136 from atc-/0.98.0
Browse files Browse the repository at this point in the history
0.98.0
  • Loading branch information
Alex Collins committed Mar 25, 2015
2 parents d3a00cf + 3de0daf commit 4f2430e
Show file tree
Hide file tree
Showing 26 changed files with 105 additions and 30 deletions.
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ The application boasts the following features:

* Custom deployment context (e.g. /reg-ui)

* Exposes the webapp's configuration data as a volume for use with data-containers or simple host directory storage
* Read only mode for preventing registry configuration changes once running

* Stateless application

## Demo

Expand Down Expand Up @@ -74,6 +76,11 @@ You can deploy this container in a custom context as such:

will expose the container under `http://localhost/ui`.

## Read Only Mode

Using the container parameter `-e READ_ONLY=true` will enable read only mode, which prevents manipulation of the
registry configurations at runtime.

# License

As of release 0.9.5, this project is licenced under GPL v3.0. See the LICENSE file.
Expand Down
4 changes: 2 additions & 2 deletions application.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#Grails Metadata file
#Wed Jul 09 18:55:10 BST 2014
app.grails.version=2.4.2
app.grails.version=2.4.4
app.name=docker-registry-ui
app.version=0.96.0
app.version=0.98.0
2 changes: 1 addition & 1 deletion build-deploy.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
./grailsw war docker-registry-ui.war && \
scp docker-registry-ui.war $1:$2
docker build .

56 changes: 36 additions & 20 deletions grails-app/conf/BootStrap.groovy
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import docker.registry.web.Registry
import docker.registry.web.Setting
import docker.registry.web.User

class BootStrap {
public class BootStrap {

def init = { servletContext ->
if (!User.findByUsername("admin")) {
Expand All @@ -12,30 +13,45 @@ class BootStrap {
}

log.info("Checking for registries in system env")
System.getenv().each { key, urlStr ->
System.getenv().each { key, val ->
if (key.matches("REG(\\d)")) {
log.info("Found registry $urlStr. Creating...")
def reg = Registry.fromUrl(urlStr)

if (reg) {
if (Registry.findByHostAndApiVersion(reg.host, reg.apiVersion)) {
log.info("Not creating registry ${urlStr} as it already exists")
} else {
log.info("Registry ${reg} doesn't exist; saving")
reg.save()
}

if (!reg.ping()) {
log.warn("Registry '${reg.toUrl()}' ping failed! Check it's up!")
}

} else {
log.error("Couldn't parse valid registry URL from $urlStr")
}
handleRegistry(val)
} else if ("READ_ONLY".equalsIgnoreCase(key)) {
handleReadOnlyMode(val)
}
}
}

def handleReadOnlyMode(String val) {
if (val?.matches("true|false")) {
new Setting(name: "READ_ONLY", value: val.toString()).save()
log.info("Read only mode enabled")
} else {
log.error("Ignoring value ${val} for READ_ONLY mode; it's not valid")
}
}

def handleRegistry(final String val) {
log.info("Found registry $val. Creating...")
def reg = Registry.fromUrl(val)

if (reg) {
if (Registry.findByHostAndApiVersion(reg.host, reg.apiVersion)) {
log.info("Not creating registry ${val} as it already exists")
} else {
log.info("Registry ${reg} doesn't exist; saving")
reg.save()
}

if (!reg.ping()) {
log.warn("Registry '${reg.toUrl()}' ping failed! Check it's up!")
}

} else {
log.error("Couldn't parse valid registry URL from $val")
}
}

def destroy = {
}
}
1 change: 1 addition & 0 deletions grails-app/conf/UrlMappings.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ class UrlMappings {
"/"(view:"/index")
"/about"(view:"/about")
"500"(view:'/error')
"403"(view:'/forbidden')
}
}
20 changes: 20 additions & 0 deletions grails-app/conf/docker/registry/ui/SettingFilters.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package docker.registry.ui
import docker.registry.web.Setting

class SettingFilters {

def filters = {
all(controller: '*', action: 'save|update|delete|edit') {
before = {
def setting = Setting.findByName("READ_ONLY")
if (setting?.value) {
log.info("Read only mode is enabled; rejecting request")
response.status = 403
flash.message = "Read only mode enabled. Save, edit and update actions are prohibited" //FIXME externalise
render(view:'/forbidden')
return false
}
}
}
}
}
1 change: 0 additions & 1 deletion grails-app/domain/docker/registry/web/Setting.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package docker.registry.web
class Setting {

String name
String description
String value

static constraints = {
Expand Down
1 change: 1 addition & 0 deletions grails-app/i18n/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_cs_CZ.properties
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_da.properties
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,5 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?

1 change: 1 addition & 0 deletions grails-app/i18n/messages_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
3 changes: 2 additions & 1 deletion grails-app/i18n/messages_es.properties
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,5 @@ registry.username.label=Username
labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_fr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_it.properties
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_ja.properties
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_nb.properties
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,5 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?

1 change: 1 addition & 0 deletions grails-app/i18n/messages_nl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_pl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
3 changes: 2 additions & 1 deletion grails-app/i18n/messages_pt_BR.properties
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,5 @@ registry.username.label=Username
labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_pt_PT.properties
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_ru.properties
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
3 changes: 2 additions & 1 deletion grails-app/i18n/messages_sv.properties
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,5 @@ registry.username.label=Username
labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_th.properties
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ labels.registry.host=Hostname
labels.registry.port=Port
labels.registry.username=Username
labels.registry.password=Password
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
1 change: 1 addition & 0 deletions grails-app/i18n/messages_zh_CN.properties
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,4 @@ labels.registry.password=\u5BC6\u7801

registry.label=\u4ED3\u5E93
image.label=\u955C\u50CF
image.delete.prohibited=Delete prohibited. Is read only mode enabled?
12 changes: 12 additions & 0 deletions grails-app/views/forbidden.gsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<title><g:if env="development">Forbidden</g:if><g:else>Error</g:else></title>
<meta name="layout" content="main">
<g:if env="development"><asset:stylesheet src="errors.css"/></g:if>
</head>
<body>
<h2>Forbidden</h2>
<h3>${flash.message}</h3>
</body>
</html>
7 changes: 5 additions & 2 deletions grails-app/views/repository/image-prompts.js.gsp
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,11 @@
}).done(function () {
showSuccess('<g:message code="image.delete.success" />');
location.reload(true)
}).fail(function () {
showFail('<g:message code="image.delete.failure" />');
}).fail(function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 403) {
alert('<g:message code="image.delete.prohibited"/>');
}
showFail('<g:message code="image.delete.failure" /> ');
});
}
Expand Down

0 comments on commit 4f2430e

Please sign in to comment.