This repository has been archived by the owner on Jan 20, 2025. It is now read-only.
forked from brennerm/docker-registry-frontend
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
executable file
·137 lines (99 loc) · 3.46 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import argparse
import asyncio
import ssl
import urllib.parse
import flask
from docker_registry_frontend.config import create_config as create_config
from docker_registry_frontend.storage import DockerRegistryJsonFileStorage
ssl._create_default_https_context = ssl._create_unverified_context
class DockerRegistryWeb:
def __init__(self, storage):
self.__storage = storage
@property
def registries(self):
return self.__storage.get_registries()
def get_registry(self, identifier):
for key, registry in self.registries.items():
print(key, identifier)
if key == identifier:
return registry
raise KeyError
def get_registry_by_name(self, name):
for registry in self.registries.values():
if registry.name == name:
return registry
raise KeyError
asyncio.get_event_loop().run_until_complete(create_config())
app = flask.Flask(__name__)
registry_web_storage = DockerRegistryJsonFileStorage("db.json")
registry_web = DockerRegistryWeb(registry_web_storage)
@app.template_filter("to_mb")
def to_mb_filter_filter(value):
return "%0.2f" % (value / 1024**2)
@app.template_filter("urlencode")
def urlencode_filter(value):
return urllib.parse.quote(value, safe="")
@app.template_filter("urldecode")
def urldecode_filter(value):
return urllib.parse.unquote(value)
@app.route("/")
def registry_overview():
return flask.render_template(
"registry_overview.html", registries=registry_web.registries
)
@app.route("/delete_tag", methods=["POST"])
def delete_tag():
registry = registry_web.get_registry_by_name(
flask.request.args.get("registry_name")
)
repo = flask.request.args.get("repo")
tag = flask.request.args.get("tag")
registry.delete_tag(repo, tag)
return flask.redirect(
flask.url_for("tag_overview", registry_name=registry.name, repo=repo)
)
@app.route("/registry/<registry_name>")
def repo_overview(registry_name):
try:
registry = registry_web.get_registry_by_name(registry_name)
except KeyError:
flask.abort(404)
return flask.render_template("repo_overview.html", registry=registry)
@app.route("/registry/<registry_name>/repo/<repo>")
def tag_overview(registry_name, repo):
try:
registry = registry_web.get_registry_by_name(registry_name)
except KeyError:
flask.abort(404)
return flask.render_template(
"tag_overview.html", registry=registry, repo=urldecode_filter(repo)
)
@app.route("/registry/<registry_name>/repo/<repo>/tag/<tag>")
def tag_detail(registry_name, repo, tag):
try:
registry = registry_web.get_registry_by_name(registry_name)
except KeyError:
flask.abort(404)
return flask.render_template(
"tag_detail.html", registry=registry, repo=urldecode_filter(repo), tag=tag
)
if __name__ == "__main__":
argparser = argparse.ArgumentParser()
argparser.add_argument(
"-d",
"--debug",
help="Run application in debug mode",
action="store_true",
default=False,
)
argparser.add_argument(
"-i",
"--ip-address",
help="IP address to bind application to",
default="0.0.0.0",
)
argparser.add_argument(
"-p", "--port", help="Port to bind application to", default=8080, type=int
)
arguments = argparser.parse_args()
app.run(debug=arguments.debug, host=arguments.ip_address, port=arguments.port)