CultriX commited on
Commit
91f3d8e
1 Parent(s): ba7a7aa

Added Application Files

Browse files
Files changed (4) hide show
  1. Dockerfile +23 -0
  2. package.json +16 -0
  3. server.js +55 -0
  4. slim.report.json +519 -0
Dockerfile ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use an official Node runtime as a parent image
2
+ FROM node:14
3
+
4
+ # Set the working directory in the container
5
+ WORKDIR /usr/src/app
6
+
7
+ # Copy package.json and package-lock.json
8
+ COPY package*.json /usr/src/app/
9
+ COPY server.js /usr/src/app/
10
+ # Install any needed packages
11
+ RUN npm install && npm audit fix
12
+ # Bundle app source inside the Docker image
13
+ COPY . .
14
+
15
+ # Make port available to the world outside this container
16
+ EXPOSE 8080
17
+
18
+ # Define environment variable
19
+ ENV NAME World
20
+
21
+ # Run app when the container launches
22
+ CMD ["node", "server.js"]
23
+
package.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "password-check-api",
3
+ "version": "1.0.0",
4
+ "description": "API to check if a password has been breached",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "start": "node index.js",
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "author": "Your Name",
11
+ "license": "ISC",
12
+ "dependencies": {
13
+ "axios": "^0.21.1",
14
+ "express": "^4.17.1"
15
+ }
16
+ }
server.js ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const express = require('express');
2
+ const axios = require('axios');
3
+ const crypto = require('crypto');
4
+
5
+ const app = express();
6
+ app.use(express.json());
7
+
8
+ const PORT = process.env.PORT || 8080;
9
+
10
+ // Endpoint to check if a password is breached
11
+ app.post('/checkPassword', async (req, res) => {
12
+ try {
13
+ const password = req.body.password;
14
+ if (!password) {
15
+ return res.status(400).send('Password is required');
16
+ }
17
+
18
+ // Hash the password using SHA-1
19
+ const sha1Hash = crypto.createHash('sha1').update(password).digest('hex').toUpperCase();
20
+
21
+ // Get the first 5 characters (prefix) of the hash
22
+ const prefix = sha1Hash.substring(0, 5);
23
+
24
+ // Query the Pwned Passwords API
25
+ const response = await axios.get(`https://api.pwnedpasswords.com/range/${prefix}`);
26
+
27
+ // Check if the password hash is in the response
28
+ const suffixes = response.data.split('\r\n');
29
+ let breached = false;
30
+ let breachCount = 0;
31
+
32
+ suffixes.forEach(suffix => {
33
+ const [hashSuffix, count] = suffix.split(':');
34
+ if (prefix + hashSuffix === sha1Hash) {
35
+ breached = true;
36
+ breachCount = parseInt(count);
37
+ }
38
+ });
39
+
40
+ // Return the result
41
+ if (breached) {
42
+ res.json({ breached: true, breachCount });
43
+ } else {
44
+ res.json({ breached: false });
45
+ }
46
+ } catch (error) {
47
+ console.error('Error:', error);
48
+ res.status(500).send('Internal Server Error');
49
+ }
50
+ });
51
+
52
+ app.listen(PORT, () => {
53
+ console.log(`Server is running on port ${PORT}`);
54
+ });
55
+
slim.report.json ADDED
@@ -0,0 +1,519 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": "1.1",
3
+ "engine": "linux/amd64|Transformer|1.40.7|fc2a26643f26cde441afb267b5a0a17bddc9a897|2023-12-10_07:50:14AM",
4
+ "containerized": false,
5
+ "host_distro": {
6
+ "name": "Ubuntu",
7
+ "version": "22.04",
8
+ "display_name": "Ubuntu 22.04.3 LTS"
9
+ },
10
+ "type": "build",
11
+ "state": "done",
12
+ "target_reference": "registry.j78.org/checkpassword-api:latest",
13
+ "system": {
14
+ "type": "",
15
+ "release": "",
16
+ "distro": {
17
+ "name": "",
18
+ "version": "",
19
+ "display_name": ""
20
+ }
21
+ },
22
+ "source_image": {
23
+ "identity": {
24
+ "id": "sha256:08412fb4f84382641b7113ec419a18a23e3b0e19d8e4d3c59637aec339435a38",
25
+ "tags": [
26
+ "latest",
27
+ "latest",
28
+ "latest"
29
+ ],
30
+ "names": [
31
+ "checkpassword-api-backend:latest",
32
+ "my-api-image:latest",
33
+ "registry.j78.org/checkpassword-api:latest"
34
+ ],
35
+ "digests": [
36
+ "sha256:35c1d9ea2631a377f77aa406927a4f4bf22b53f0471e6239bafb747720c52273"
37
+ ],
38
+ "full_digests": [
39
+ "registry.j78.org/checkpassword-api@sha256:35c1d9ea2631a377f77aa406927a4f4bf22b53f0471e6239bafb747720c52273"
40
+ ]
41
+ },
42
+ "size": 917021490,
43
+ "size_human": "917 MB",
44
+ "create_time": "2023-12-30T14:04:32Z",
45
+ "docker_version": "24.0.5",
46
+ "architecture": "amd64",
47
+ "exposed_ports": [
48
+ "8080/tcp"
49
+ ],
50
+ "os": "linux",
51
+ "env_vars": [
52
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
53
+ "NODE_VERSION=14.21.3",
54
+ "YARN_VERSION=1.22.19",
55
+ "NAME=World"
56
+ ],
57
+ "container_entry": {
58
+ "exe_path": ""
59
+ }
60
+ },
61
+ "minified_image_size": 82481954,
62
+ "minified_image_size_human": "82 MB",
63
+ "minified_image": "registry.j78.org/checkpassword-api:slim",
64
+ "minified_image_has_data": true,
65
+ "minified_by": 11.117843910438882,
66
+ "artifact_location": "/home/cultrix/API/dist_linux/.slim-state/images/08412fb4f84382641b7113ec419a18a23e3b0e19d8e4d3c59637aec339435a38/artifacts",
67
+ "container_report_name": "creport.json",
68
+ "seccomp_profile_name": "registry.j78.org-checkpassword-api-seccomp.json",
69
+ "apparmor_profile_name": "registry.j78.org-checkpassword-api-apparmor-profile",
70
+ "image_stack": [
71
+ {
72
+ "is_top_image": false,
73
+ "id": "sha256:1d12470fa662a2a5cb50378dcdc8ea228c1735747db410bbefb8e2d9144b5452",
74
+ "full_name": "node:14",
75
+ "repo_name": "node",
76
+ "version_tag": "14",
77
+ "raw_tags": [
78
+ "node:14"
79
+ ],
80
+ "create_time": "2023-04-12T09:12:12Z",
81
+ "new_size": 911750439,
82
+ "new_size_human": "912 MB",
83
+ "instructions": [
84
+ {
85
+ "type": "ADD",
86
+ "time": "2023-04-12T00:20:15Z",
87
+ "is_nop": true,
88
+ "local_image_exists": false,
89
+ "layer_index": 0,
90
+ "size": 114108637,
91
+ "size_human": "114 MB",
92
+ "params": "file:40953ed6e6f96703b2e0c13288437c2aaf8b3df33dbc423686290cbe0e595a5e in /",
93
+ "command_snippet": "ADD file:40953ed6e6f96703b2e0c13288437c2aaf8...",
94
+ "command_all": "ADD file:40953ed6e6f96703b2e0c13288437c2aaf8b3df33dbc423686290cbe0e595a5e /",
95
+ "target": "/",
96
+ "source_type": "file",
97
+ "inst_set_time_bucket": "2023-04-12T02:15:00+02:00",
98
+ "inst_set_time_index": 0,
99
+ "inst_set_time_reverse_index": 3
100
+ },
101
+ {
102
+ "type": "CMD",
103
+ "time": "2023-04-12T00:20:15Z",
104
+ "is_nop": true,
105
+ "is_exec_form": true,
106
+ "local_image_exists": false,
107
+ "layer_index": 0,
108
+ "size": 0,
109
+ "params": "[\"bash\"]\n",
110
+ "command_snippet": "CMD [\"bash\"]\n",
111
+ "command_all": "CMD [\"bash\"]\n",
112
+ "inst_set_time_bucket": "2023-04-12T02:15:00+02:00",
113
+ "inst_set_time_index": 0,
114
+ "inst_set_time_reverse_index": 3
115
+ },
116
+ {
117
+ "type": "RUN",
118
+ "time": "2023-04-12T07:52:41Z",
119
+ "is_nop": false,
120
+ "local_image_exists": false,
121
+ "layer_index": 0,
122
+ "size": 16563434,
123
+ "size_human": "17 MB",
124
+ "command_snippet": "RUN set -eux; \tapt-get update; \tapt-get inst...",
125
+ "command_all": "RUN set -eux; \tapt-get update; \tapt-get install -y --no-install-recommends \t\tca-certificates \t\tcurl \t\tnetbase \t\twget \t; \trm -rf /var/lib/apt/lists/*",
126
+ "system_commands": [
127
+ "set -eux",
128
+ "apt-get update",
129
+ "apt-get install -y --no-install-recommends ca-certificates curl netbase wget",
130
+ "rm -rf /var/lib/apt/lists/*"
131
+ ],
132
+ "inst_set_time_bucket": "2023-04-12T09:45:00+02:00",
133
+ "inst_set_time_index": 1,
134
+ "inst_set_time_reverse_index": 2
135
+ },
136
+ {
137
+ "type": "RUN",
138
+ "time": "2023-04-12T07:52:47Z",
139
+ "is_nop": false,
140
+ "local_image_exists": false,
141
+ "layer_index": 0,
142
+ "size": 17545663,
143
+ "size_human": "18 MB",
144
+ "command_snippet": "RUN set -ex; \tif ! command -v gpg > /dev/nul...",
145
+ "command_all": "RUN set -ex; \tif ! command -v gpg > /dev/null; then \t\tapt-get update; \t\tapt-get install -y --no-install-recommends \t\t\tgnupg \t\t\tdirmngr \t\t; \t\trm -rf /var/lib/apt/lists/*; \tfi",
146
+ "system_commands": [
147
+ "set -ex",
148
+ "if ! command -v gpg > /dev/null",
149
+ "then apt-get update",
150
+ "apt-get install -y --no-install-recommends gnupg dirmngr",
151
+ "rm -rf /var/lib/apt/lists/*",
152
+ "fi"
153
+ ],
154
+ "inst_set_time_bucket": "2023-04-12T09:45:00+02:00",
155
+ "inst_set_time_index": 1,
156
+ "inst_set_time_reverse_index": 2
157
+ },
158
+ {
159
+ "type": "RUN",
160
+ "time": "2023-04-12T07:53:05Z",
161
+ "is_nop": false,
162
+ "local_image_exists": false,
163
+ "layer_index": 0,
164
+ "size": 145611179,
165
+ "size_human": "146 MB",
166
+ "command_snippet": "RUN apt-get update && \\\n\tapt-get install -y ...",
167
+ "command_all": "RUN apt-get update && \\\n\tapt-get install -y --no-install-recommends \t\tgit \t\tmercurial \t\topenssh-client \t\tsubversion \t\t\t\tprocps && \\\n\trm -rf /var/lib/apt/lists/*",
168
+ "system_commands": [
169
+ "apt-get update",
170
+ "apt-get install -y --no-install-recommends git mercurial openssh-client subversion procps",
171
+ "rm -rf /var/lib/apt/lists/*"
172
+ ],
173
+ "inst_set_time_bucket": "2023-04-12T09:45:00+02:00",
174
+ "inst_set_time_index": 1,
175
+ "inst_set_time_reverse_index": 2
176
+ },
177
+ {
178
+ "type": "RUN",
179
+ "time": "2023-04-12T07:54:04Z",
180
+ "is_nop": false,
181
+ "local_image_exists": false,
182
+ "layer_index": 0,
183
+ "size": 509529301,
184
+ "size_human": "510 MB",
185
+ "command_snippet": "RUN set -ex; \tapt-get update; \tapt-get insta...",
186
+ "command_all": "RUN set -ex; \tapt-get update; \tapt-get install -y --no-install-recommends \t\tautoconf \t\tautomake \t\tbzip2 \t\tdpkg-dev \t\tfile \t\tg++ \t\tgcc \t\timagemagick \t\tlibbz2-dev \t\tlibc6-dev \t\tlibcurl4-openssl-dev \t\tlibdb-dev \t\tlibevent-dev \t\tlibffi-dev \t\tlibgdbm-dev \t\tlibglib2.0-dev \t\tlibgmp-dev \t\tlibjpeg-dev \t\tlibkrb5-dev \t\tliblzma-dev \t\tlibmagickcore-dev \t\tlibmagickwand-dev \t\tlibmaxminddb-dev \t\tlibncurses5-dev \t\tlibncursesw5-dev \t\tlibpng-dev \t\tlibpq-dev \t\tlibreadline-dev \t\tlibsqlite3-dev \t\tlibssl-dev \t\tlibtool \t\tlibwebp-dev \t\tlibxml2-dev \t\tlibxslt-dev \t\tlibyaml-dev \t\tmake \t\tpatch \t\tunzip \t\txz-utils \t\tzlib1g-dev \t\t\t\t$( \t\t\tif apt-cache show 'default-libmysqlclient-dev' 2>/dev/null | grep -q '^Version:'; then \t\t\t\techo 'default-libmysqlclient-dev'; \t\t\telse \t\t\t\techo 'libmysqlclient-dev'; \t\t\tfi \t\t) \t; \trm -rf /var/lib/apt/lists/*",
187
+ "system_commands": [
188
+ "set -ex",
189
+ "apt-get update",
190
+ "apt-get install -y --no-install-recommends autoconf automake bzip2 dpkg-dev file g++ gcc imagemagick libbz2-dev libc6-dev libcurl4-openssl-dev libdb-dev libevent-dev libffi-dev libgdbm-dev libglib2.0-dev libgmp-dev libjpeg-dev libkrb5-dev liblzma-dev libmagickcore-dev libmagickwand-dev libmaxminddb-dev libncurses5-dev libncursesw5-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libtool libwebp-dev libxml2-dev libxslt-dev libyaml-dev make patch unzip xz-utils zlib1g-dev $( if apt-cache show 'default-libmysqlclient-dev' 2>/dev/null | grep -q '^Version:'",
191
+ "then echo 'default-libmysqlclient-dev'",
192
+ "else echo 'libmysqlclient-dev'",
193
+ "fi )",
194
+ "rm -rf /var/lib/apt/lists/*"
195
+ ],
196
+ "inst_set_time_bucket": "2023-04-12T09:45:00+02:00",
197
+ "inst_set_time_index": 1,
198
+ "inst_set_time_reverse_index": 2
199
+ },
200
+ {
201
+ "type": "RUN",
202
+ "time": "2023-04-12T09:05:40Z",
203
+ "is_nop": false,
204
+ "local_image_exists": false,
205
+ "layer_index": 0,
206
+ "size": 333532,
207
+ "size_human": "334 kB",
208
+ "command_snippet": "RUN groupadd --gid 1000 node && \\\n\tuseradd -...",
209
+ "command_all": "RUN groupadd --gid 1000 node && \\\n\tuseradd --uid 1000 --gid node --shell /bin/bash --create-home node",
210
+ "system_commands": [
211
+ "groupadd --gid 1000 node",
212
+ "useradd --uid 1000 --gid node --shell /bin/bash --create-home node"
213
+ ],
214
+ "inst_set_time_bucket": "2023-04-12T11:00:00+02:00",
215
+ "inst_set_time_index": 2,
216
+ "inst_set_time_reverse_index": 1
217
+ },
218
+ {
219
+ "type": "ENV",
220
+ "time": "2023-04-12T09:11:56Z",
221
+ "is_nop": true,
222
+ "local_image_exists": false,
223
+ "layer_index": 0,
224
+ "size": 0,
225
+ "params": "NODE_VERSION=14.21.3",
226
+ "command_snippet": "ENV NODE_VERSION=14.21.3",
227
+ "command_all": "ENV NODE_VERSION=14.21.3",
228
+ "inst_set_time_bucket": "2023-04-12T11:00:00+02:00",
229
+ "inst_set_time_index": 2,
230
+ "inst_set_time_reverse_index": 1
231
+ },
232
+ {
233
+ "type": "RUN",
234
+ "time": "2023-04-12T09:12:09Z",
235
+ "is_nop": false,
236
+ "local_image_exists": false,
237
+ "layer_index": 0,
238
+ "size": 100388126,
239
+ "size_human": "100 MB",
240
+ "command_snippet": "RUN ARCH= && \\\n\tdpkgArch=\"$(dpkg --print-arc...",
241
+ "command_all": "RUN ARCH= && \\\n\tdpkgArch=\"$(dpkg --print-architecture)\" && \\\n\tcase \"${dpkgArch##*-}\" in amd64) ARCH='x64';; ppc64el) ARCH='ppc64le';; s390x) ARCH='s390x';; arm64) ARCH='arm64';; armhf) ARCH='armv7l';; i386) ARCH='x86';; *) echo \"unsupported architecture\"; exit 1 ;; esac && \\\n\tset -ex && \\\n\tfor key in 4ED778F539E3634C779C87C6D7062848A1AB005C 141F07595B7B3FFE74309A937405533BE57C7D57 74F12602B6F1C4E913FAA37AD3A89613643B6201 61FC681DFB92A079F1685E77973F295594EC4689 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C 108F52B48DB57BB0CC439B2997B01419BD92F80A ; do gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$key\" || gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \"$key\" ; done && \\\n\tcurl -fsSLO --compressed \"https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz\" && \\\n\tcurl -fsSLO --compressed \"https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc\" && \\\n\tgpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc && \\\n\tgrep \" node-v$NODE_VERSION-linux-$ARCH.tar.xz\\$\" SHASUMS256.txt | sha256sum -c - && \\\n\ttar -xJf \"node-v$NODE_VERSION-linux-$ARCH.tar.xz\" -C /usr/local --strip-components=1 --no-same-owner && \\\n\trm \"node-v$NODE_VERSION-linux-$ARCH.tar.xz\" SHASUMS256.txt.asc SHASUMS256.txt && \\\n\tln -s /usr/local/bin/node /usr/local/bin/nodejs && \\\n\tnode --version && \\\n\tnpm --version",
242
+ "system_commands": [
243
+ "ARCH=",
244
+ "dpkgArch=\"$(dpkg --print-architecture)\"",
245
+ "case \"${dpkgArch##*-}\" in amd64) ARCH='x64';; ppc64el) ARCH='ppc64le';; s390x) ARCH='s390x';; arm64) ARCH='arm64';; armhf) ARCH='armv7l';; i386) ARCH='x86';; *) echo \"unsupported architecture\"; exit 1 ;; esac",
246
+ "set -ex",
247
+ "for key in 4ED778F539E3634C779C87C6D7062848A1AB005C 141F07595B7B3FFE74309A937405533BE57C7D57 74F12602B6F1C4E913FAA37AD3A89613643B6201 61FC681DFB92A079F1685E77973F295594EC4689 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C 108F52B48DB57BB0CC439B2997B01419BD92F80A ; do gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$key\" || gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \"$key\" ; done",
248
+ "curl -fsSLO --compressed \"https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz\"",
249
+ "curl -fsSLO --compressed \"https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc\"",
250
+ "gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc",
251
+ "grep \" node-v$NODE_VERSION-linux-$ARCH.tar.xz$\" SHASUMS256.txt | sha256sum -c -",
252
+ "tar -xJf \"node-v$NODE_VERSION-linux-$ARCH.tar.xz\" -C /usr/local --strip-components=1 --no-same-owner",
253
+ "rm \"node-v$NODE_VERSION-linux-$ARCH.tar.xz\" SHASUMS256.txt.asc SHASUMS256.txt",
254
+ "ln -s /usr/local/bin/node /usr/local/bin/nodejs",
255
+ "node --version",
256
+ "npm --version"
257
+ ],
258
+ "inst_set_time_bucket": "2023-04-12T11:00:00+02:00",
259
+ "inst_set_time_index": 2,
260
+ "inst_set_time_reverse_index": 1
261
+ },
262
+ {
263
+ "type": "ENV",
264
+ "time": "2023-04-12T09:12:09Z",
265
+ "is_nop": true,
266
+ "local_image_exists": false,
267
+ "layer_index": 0,
268
+ "size": 0,
269
+ "params": "YARN_VERSION=1.22.19",
270
+ "command_snippet": "ENV YARN_VERSION=1.22.19",
271
+ "command_all": "ENV YARN_VERSION=1.22.19",
272
+ "inst_set_time_bucket": "2023-04-12T11:00:00+02:00",
273
+ "inst_set_time_index": 2,
274
+ "inst_set_time_reverse_index": 1
275
+ },
276
+ {
277
+ "type": "RUN",
278
+ "time": "2023-04-12T09:12:12Z",
279
+ "is_nop": false,
280
+ "local_image_exists": false,
281
+ "layer_index": 0,
282
+ "size": 7670179,
283
+ "size_human": "7.7 MB",
284
+ "command_snippet": "RUN set -ex && \\\n\tfor key in 6A010C51660...",
285
+ "command_all": "RUN set -ex && \\\n\tfor key in 6A010C5166006599AA17F08146C2130DFD2497F5 ; do gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$key\" || gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \"$key\" ; done && \\\n\tcurl -fsSLO --compressed \"https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz\" && \\\n\tcurl -fsSLO --compressed \"https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc\" && \\\n\tgpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz && \\\n\tmkdir -p /opt && \\\n\ttar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ && \\\n\tln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn && \\\n\tln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg && \\\n\trm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz && \\\n\tyarn --version",
286
+ "system_commands": [
287
+ "set -ex",
288
+ "for key in 6A010C5166006599AA17F08146C2130DFD2497F5 ; do gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$key\" || gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \"$key\" ; done",
289
+ "curl -fsSLO --compressed \"https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz\"",
290
+ "curl -fsSLO --compressed \"https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc\"",
291
+ "gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz",
292
+ "mkdir -p /opt",
293
+ "tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/",
294
+ "ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn",
295
+ "ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg",
296
+ "rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz",
297
+ "yarn --version"
298
+ ],
299
+ "inst_set_time_bucket": "2023-04-12T11:00:00+02:00",
300
+ "inst_set_time_index": 2,
301
+ "inst_set_time_reverse_index": 1
302
+ },
303
+ {
304
+ "type": "COPY",
305
+ "time": "2023-04-12T09:12:12Z",
306
+ "is_nop": true,
307
+ "local_image_exists": false,
308
+ "layer_index": 0,
309
+ "size": 388,
310
+ "size_human": "388 B",
311
+ "params": "file:4d192565a7220e135cab6c77fbc1c73211b69f3d9fb37e62857b2c6eb9363d51 in /usr/local/bin/",
312
+ "command_snippet": "COPY file:4d192565a7220e135cab6c77fbc1c73211...",
313
+ "command_all": "COPY file:4d192565a7220e135cab6c77fbc1c73211b69f3d9fb37e62857b2c6eb9363d51 /usr/local/bin/",
314
+ "target": "/usr/local/bin/",
315
+ "source_type": "file",
316
+ "inst_set_time_bucket": "2023-04-12T11:00:00+02:00",
317
+ "inst_set_time_index": 2,
318
+ "inst_set_time_reverse_index": 1
319
+ },
320
+ {
321
+ "type": "ENTRYPOINT",
322
+ "time": "2023-04-12T09:12:12Z",
323
+ "is_nop": true,
324
+ "is_exec_form": true,
325
+ "local_image_exists": false,
326
+ "layer_index": 0,
327
+ "size": 0,
328
+ "params": "[\"docker-entrypoint.sh\"]\n",
329
+ "command_snippet": "ENTRYPOINT [\"docker-entrypoint.sh\"]\n",
330
+ "command_all": "ENTRYPOINT [\"docker-entrypoint.sh\"]\n",
331
+ "inst_set_time_bucket": "2023-04-12T11:00:00+02:00",
332
+ "inst_set_time_index": 2,
333
+ "inst_set_time_reverse_index": 1
334
+ },
335
+ {
336
+ "type": "CMD",
337
+ "time": "2023-04-12T09:12:12Z",
338
+ "is_last_instruction": true,
339
+ "is_nop": true,
340
+ "is_exec_form": true,
341
+ "local_image_exists": true,
342
+ "layer_index": 0,
343
+ "size": 0,
344
+ "params": "[\"node\"]\n",
345
+ "command_snippet": "CMD [\"node\"]\n",
346
+ "command_all": "CMD [\"node\"]\n",
347
+ "raw_tags": [
348
+ "node:14"
349
+ ],
350
+ "inst_set_time_bucket": "2023-04-12T11:00:00+02:00",
351
+ "inst_set_time_index": 2,
352
+ "inst_set_time_reverse_index": 1
353
+ }
354
+ ]
355
+ },
356
+ {
357
+ "is_top_image": true,
358
+ "id": "sha256:08412fb4f84382641b7113ec419a18a23e3b0e19d8e4d3c59637aec339435a38",
359
+ "full_name": "checkpassword-api-backend:latest",
360
+ "repo_name": "checkpassword-api-backend",
361
+ "version_tag": "latest",
362
+ "raw_tags": [
363
+ "checkpassword-api-backend:latest",
364
+ "my-api-image:latest",
365
+ "registry.j78.org/checkpassword-api:latest"
366
+ ],
367
+ "create_time": "2023-12-30T14:04:32Z",
368
+ "new_size": 5271051,
369
+ "new_size_human": "5.3 MB",
370
+ "base_image_id": "sha256:1d12470fa662a2a5cb50378dcdc8ea228c1735747db410bbefb8e2d9144b5452",
371
+ "instructions": [
372
+ {
373
+ "type": "WORKDIR",
374
+ "time": "2023-12-30T14:00:45Z",
375
+ "is_nop": true,
376
+ "local_image_exists": true,
377
+ "intermediate_image_id": "sha256:74cbeed9bdc13c2237453b4e2d1cabcd3c385406d96098cb4d260daae75ec576",
378
+ "layer_index": 0,
379
+ "size": 0,
380
+ "params": "/usr/src/app",
381
+ "command_snippet": "WORKDIR /usr/src/app",
382
+ "command_all": "WORKDIR /usr/src/app",
383
+ "system_commands": [
384
+ "mkdir -p /usr/src/app"
385
+ ],
386
+ "inst_set_time_bucket": "2023-12-30T15:00:00+01:00",
387
+ "inst_set_time_index": 3,
388
+ "inst_set_time_reverse_index": 0
389
+ },
390
+ {
391
+ "type": "COPY",
392
+ "time": "2023-12-30T14:02:54Z",
393
+ "is_nop": true,
394
+ "local_image_exists": true,
395
+ "intermediate_image_id": "sha256:defb1f38be5ce2953fba7215b82482f019576502081a7bdd0ecfa0ed58891492",
396
+ "layer_index": 0,
397
+ "size": 371,
398
+ "size_human": "371 B",
399
+ "params": "file:e15467e7e83b95b528adf82d41f9f8337cdcd863a7a98b38f04ae5c0567a89c9 in /usr/src/app/",
400
+ "command_snippet": "COPY file:e15467e7e83b95b528adf82d41f9f8337c...",
401
+ "command_all": "COPY file:e15467e7e83b95b528adf82d41f9f8337cdcd863a7a98b38f04ae5c0567a89c9 /usr/src/app/",
402
+ "target": "/usr/src/app/",
403
+ "source_type": "file",
404
+ "inst_set_time_bucket": "2023-12-30T15:00:00+01:00",
405
+ "inst_set_time_index": 3,
406
+ "inst_set_time_reverse_index": 0
407
+ },
408
+ {
409
+ "type": "COPY",
410
+ "time": "2023-12-30T14:04:27Z",
411
+ "is_nop": true,
412
+ "local_image_exists": true,
413
+ "intermediate_image_id": "sha256:4bcba1cfba614d8df2a89fcf948967512c34875a72e575d83c644850e60b2872",
414
+ "layer_index": 0,
415
+ "size": 1641,
416
+ "size_human": "1.6 kB",
417
+ "params": "file:16f46612d894027fed078023cbb2975f6f86724de1ea7334e0ccdb758037d850 in /usr/src/app/",
418
+ "command_snippet": "COPY file:16f46612d894027fed078023cbb2975f6f...",
419
+ "command_all": "COPY file:16f46612d894027fed078023cbb2975f6f86724de1ea7334e0ccdb758037d850 /usr/src/app/",
420
+ "target": "/usr/src/app/",
421
+ "source_type": "file",
422
+ "inst_set_time_bucket": "2023-12-30T15:00:00+01:00",
423
+ "inst_set_time_index": 3,
424
+ "inst_set_time_reverse_index": 0
425
+ },
426
+ {
427
+ "type": "RUN",
428
+ "time": "2023-12-30T14:04:31Z",
429
+ "is_nop": false,
430
+ "local_image_exists": true,
431
+ "intermediate_image_id": "sha256:0709474f350fc586250029b201b02d8b6bccca1fe06c62e4cd34c0f3d5ff05da",
432
+ "layer_index": 0,
433
+ "size": 5266494,
434
+ "size_human": "5.3 MB",
435
+ "command_snippet": "RUN npm install && \\\n\tnpm audit fix",
436
+ "command_all": "RUN npm install && \\\n\tnpm audit fix",
437
+ "system_commands": [
438
+ "npm install",
439
+ "npm audit fix"
440
+ ],
441
+ "inst_set_time_bucket": "2023-12-30T15:00:00+01:00",
442
+ "inst_set_time_index": 3,
443
+ "inst_set_time_reverse_index": 0
444
+ },
445
+ {
446
+ "type": "COPY",
447
+ "time": "2023-12-30T14:04:31Z",
448
+ "is_nop": true,
449
+ "local_image_exists": true,
450
+ "intermediate_image_id": "sha256:2403f8709b493fae7239c248e6393dc4b59de53945d624211b930f8dc9c802fa",
451
+ "layer_index": 0,
452
+ "size": 2545,
453
+ "size_human": "2.5 kB",
454
+ "params": "dir:6c1f62097e433085854022871988109a927459e2043f326563b27d3d63ae76fd in .",
455
+ "command_snippet": "COPY dir:6c1f62097e433085854022871988109a927...",
456
+ "command_all": "COPY dir:6c1f62097e433085854022871988109a927459e2043f326563b27d3d63ae76fd .",
457
+ "target": ".",
458
+ "source_type": "dir",
459
+ "inst_set_time_bucket": "2023-12-30T15:00:00+01:00",
460
+ "inst_set_time_index": 3,
461
+ "inst_set_time_reverse_index": 0
462
+ },
463
+ {
464
+ "type": "EXPOSE",
465
+ "time": "2023-12-30T14:04:32Z",
466
+ "is_nop": true,
467
+ "local_image_exists": true,
468
+ "intermediate_image_id": "sha256:6454d02e2810c195efe38e3b9064d2f1d6234b3ef15ae78957920a805ba836e4",
469
+ "layer_index": 0,
470
+ "size": 0,
471
+ "params": "8080",
472
+ "command_snippet": "EXPOSE 8080",
473
+ "command_all": "EXPOSE 8080",
474
+ "inst_set_time_bucket": "2023-12-30T15:00:00+01:00",
475
+ "inst_set_time_index": 3,
476
+ "inst_set_time_reverse_index": 0
477
+ },
478
+ {
479
+ "type": "ENV",
480
+ "time": "2023-12-30T14:04:32Z",
481
+ "is_nop": true,
482
+ "local_image_exists": true,
483
+ "intermediate_image_id": "sha256:9deecef7f0db2d6b6c81675d08e243a3182f2f699f2c886cd505bc94b2028e8f",
484
+ "layer_index": 0,
485
+ "size": 0,
486
+ "params": "NAME=World",
487
+ "command_snippet": "ENV NAME=World",
488
+ "command_all": "ENV NAME=World",
489
+ "inst_set_time_bucket": "2023-12-30T15:00:00+01:00",
490
+ "inst_set_time_index": 3,
491
+ "inst_set_time_reverse_index": 0
492
+ },
493
+ {
494
+ "type": "CMD",
495
+ "time": "2023-12-30T14:04:32Z",
496
+ "is_last_instruction": true,
497
+ "is_nop": true,
498
+ "is_exec_form": true,
499
+ "local_image_exists": true,
500
+ "layer_index": 0,
501
+ "size": 0,
502
+ "params": "[\"node\",\"server.js\"]\n",
503
+ "command_snippet": "CMD [\"node\",\"server.js\"]\n",
504
+ "command_all": "CMD [\"node\",\"server.js\"]\n",
505
+ "raw_tags": [
506
+ "checkpassword-api-backend:latest",
507
+ "my-api-image:latest",
508
+ "registry.j78.org/checkpassword-api:latest"
509
+ ],
510
+ "inst_set_time_bucket": "2023-12-30T15:00:00+01:00",
511
+ "inst_set_time_index": 3,
512
+ "inst_set_time_reverse_index": 0
513
+ }
514
+ ]
515
+ }
516
+ ],
517
+ "image_created": true,
518
+ "image_build_engine": "internal"
519
+ }