정민우

Merge branch 'backend-docker' into 'master'

[New] Dockerfile add, list, delete 추가



See merge request !6
1 let express = require('express') 1 let express = require('express')
2 let cookieParser = require('cookie-parser') 2 let cookieParser = require('cookie-parser')
3 -var cors = require('cors') 3 +let cors = require('cors')
4 -var corsConfig = require('./config/cors') 4 +let corsConfig = require('./config/cors')
5 5
6 const indexRouter = require('./routes/index') 6 const indexRouter = require('./routes/index')
7 const authRouter = require('./routes/authRouter') 7 const authRouter = require('./routes/authRouter')
8 const userRouter = require('./routes/userRouter') 8 const userRouter = require('./routes/userRouter')
9 +const dockerRouter = require('./routes/dockerRouter')
9 10
10 let app = express() 11 let app = express()
11 app.use(cors(corsConfig)) 12 app.use(cors(corsConfig))
...@@ -17,6 +18,7 @@ app.use(cookieParser()) ...@@ -17,6 +18,7 @@ app.use(cookieParser())
17 app.use('/', indexRouter) 18 app.use('/', indexRouter)
18 app.use('/', authRouter) 19 app.use('/', authRouter)
19 app.use('/', userRouter) 20 app.use('/', userRouter)
21 +app.use('/', dockerRouter)
20 22
21 app.use(function(req, res) { 23 app.use(function(req, res) {
22 res.status(400) 24 res.status(400)
......
1 +const { sequelize, Sequelize, User, Dockerfile, Image, Container, Port} = require('../models')
2 +const { sendResponse, sendError } = require('../utils/response')
3 +const { currentUser } = require('../utils/auth')
4 +const { logging } = require('../utils/log')
5 +const { checkRequiredExist, setValues } = require('../utils/validation')
6 +const fs = require('fs')
7 +const randomstring = require("randomstring");
8 +
9 +const Op = Sequelize.Op
10 +
11 +exports.addDockerfile = async (req, res) => {
12 + const id = req.decoded.id
13 + if (!id) {
14 + return sendError(res, 401, 'InvalidToken')
15 + }
16 + const requiredKey = ['content']
17 + const required = checkRequiredExist(req.body, requiredKey)
18 + if (required) {
19 + logging('dockerfile', 'error', { code: 400, message: `missingKey:${required}` }, req)
20 + return sendError(res, 400, `missingKey:${required}`)
21 + }
22 + let dockerfileInfo = {}
23 + dockerfileInfo.userId = id
24 + dockerfileInfo.content = req.body.content
25 + let dockerfileDir = randomstring.generate(16);
26 + fs.mkdirSync('./dockerfiles/'+dockerfileDir)
27 + dockerfileInfo.filepath = './dockerfiles/'+dockerfileDir+'/Dockerfile'
28 + fs.writeFile(dockerfileInfo.filepath, dockerfileInfo.content, function (err) {
29 + if (err) {
30 + logging('dockerfile', 'error', { code: 400, message: `dockerfile write error` }, req)
31 + return sendError(res, 400, `dockerfile write error`)
32 + }
33 + })
34 + let user = await Dockerfile.create(dockerfileInfo)
35 + logging('dockerfile', 'add dockerfile', user, req)
36 + return sendResponse(res, user, 200)
37 +}
38 +
39 +exports.listDockerfile = async (req, res) => {
40 + const id = req.decoded.id
41 + if (!id) {
42 + return sendError(res, 401, 'InvalidToken')
43 + }
44 + try{
45 + let dockerfiles = await Dockerfile.findAndCountAll({
46 + where: {
47 + userId: id
48 + },
49 + order: [
50 + ['createdAt', 'desc']
51 + ]
52 + })
53 +
54 + const result = {
55 + count: dockerfiles.count,
56 + data: dockerfiles.rows
57 + }
58 + return sendResponse(res, result, 200)
59 + } catch(error) {
60 + logging('dockerfile', 'error', { code: 500, message: error.message }, req)
61 + return sendError(res, 500, error.message)
62 + }
63 +}
64 +
65 +exports.removeDockerfile = async (req, res) => {
66 + const requiredKey = ['id']
67 + const required = checkRequiredExist(req.body, requiredKey)
68 + if (required) {
69 + logging('dockerfile', 'error', { code: 400, message: 'missingKey:${required}' }, req)
70 + return sendError(res, 400, `missingKey:${required}`)
71 + }
72 + try {
73 + const user = await currentUser(req.headers.authorization)
74 +
75 + const dockerfileId = req.body.id
76 + let dockerfile = await Dockerfile.findByPk(dockerfileId)
77 + if (!dockerfile) {
78 + logging('dockerfile', 'error', { code: 404, message: 'NoDockerfileFound' }, req)
79 + return sendError(res, 404, 'NoDockerfileFound')
80 + }
81 + if (!user || user.id !== dockerfile.userId) {
82 + logging('dockerfile', 'error', { code: 403, message: 'Unauthoirzed' }, req)
83 + return sendError(res, 403, 'Unauthoirzed')
84 + }
85 +
86 + await Dockerfile.destroy({
87 + where: {
88 + id: dockerfile.id
89 + }
90 + })
91 + logging('dockerfile', 'delete', null, req)
92 + return sendResponse(res, true, 201)
93 + } catch (error) {
94 + logging('dockerfile', 'error', { code: 500, message: error.message }, req)
95 + return sendError(res, 500, error.message)
96 + }
97 +}
98 +exports.listImage = async (req, res) => {
99 +
100 +}
101 +exports.buildImage = async (req, res) => {
102 +
103 +}
104 +exports.removeImage = async (req, res) => {
105 +
106 +}
107 +exports.listContainer = async (req, res) => {
108 +
109 +}
110 +exports.createContainer = async (req, res) => {
111 +
112 +}
113 +exports.startContainer = async (req, res) => {
114 +
115 +}
116 +exports.stopContainer = async (req, res) => {
117 +
118 +}
119 +exports.removeContainer = async (req, res) => {
120 +
121 +}
122 +
123 +//admin
124 +exports.adminListDockerfile = async (req, res) => {
125 + try{
126 + let dockerfiles = await Dockerfile.findAndCountAll({
127 + order: [
128 + ['createdAt', 'desc']
129 + ]
130 + })
131 +
132 + const result = {
133 + count: dockerfiles.count,
134 + data: dockerfiles.rows
135 + }
136 + return sendResponse(res, result, 200)
137 + } catch(error) {
138 + logging('dockerfile', 'error', { code: 500, message: error.message }, req)
139 + return sendError(res, 500, error.message)
140 + }
141 +}
142 +exports.adminDeleteDockerfile = async (req, res) => {
143 +
144 +}
145 +exports.adminListImage = async (req, res) => {
146 +
147 +}
148 +exports.adminDeleteImage = async (req, res) => {
149 +
150 +}
151 +exports.adminListContainer = async (req, res) => {
152 +
153 +}
154 +exports.adminDeleteContainer = async (req, res) => {
155 +
156 +}
1 +FROM ubuntu:20.04
2 +RUN apt-get update -y
3 +RUN apt-get install -y openssh-server vim
4 +# change root password
5 +RUN echo 'root:admin123' | chpasswd
6 +# change ssh configure
7 +RUN echo PermitRootLogin yes >> /etc/ssh/sshd_config && service ssh restart
8 +RUN service ssh restart
9 +CMD tail -f /dev/null
...\ No newline at end of file ...\ No newline at end of file
1 +FROM ubuntu:20.04
2 +RUN apt-get update -y
3 +RUN apt-get install -y openssh-server vim
4 +# change root password
5 +RUN echo 'root:admin123' | chpasswd
6 +# change ssh configure
7 +RUN echo PermitRootLogin yes >> /etc/ssh/sshd_config && service ssh restart
8 +RUN service ssh restart
9 +CMD tail -f /dev/null
...\ No newline at end of file ...\ No newline at end of file
1 +FROM ubuntu:20.04
2 +
3 +RUN apt-get update -y
4 +RUN apt-get install -y openssh-server vim
5 +
6 +# change root password
7 +RUN echo 'root:admin123' | chpasswd
8 +
9 +# change ssh configure
10 +RUN echo PermitRootLogin yes >> /etc/ssh/sshd_config && service ssh restart
11 +RUN service ssh restart
12 +
13 +CMD tail -f /dev/null
...@@ -11,10 +11,13 @@ ...@@ -11,10 +11,13 @@
11 "bcrypt": "^5.0.1", 11 "bcrypt": "^5.0.1",
12 "cookie-parser": "~1.4.4", 12 "cookie-parser": "~1.4.4",
13 "cors": "^2.8.5", 13 "cors": "^2.8.5",
14 + "crypto-random-string": "^4.0.0",
14 "debug": "~2.6.9", 15 "debug": "~2.6.9",
16 + "dockerode": "^3.3.0",
15 "dotenv": "^8.2.0", 17 "dotenv": "^8.2.0",
16 "express": "~4.16.1", 18 "express": "~4.16.1",
17 "mysql2": "^2.1.0", 19 "mysql2": "^2.1.0",
20 + "randomstring": "^1.2.1",
18 "sequelize": "^6.3.5" 21 "sequelize": "^6.3.5"
19 }, 22 },
20 "devDependencies": { 23 "devDependencies": {
...@@ -283,6 +286,22 @@ ...@@ -283,6 +286,22 @@
283 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 286 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
284 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 287 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
285 }, 288 },
289 + "node_modules/array-uniq": {
290 + "version": "1.0.2",
291 + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz",
292 + "integrity": "sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0=",
293 + "engines": {
294 + "node": ">=0.10.0"
295 + }
296 + },
297 + "node_modules/asn1": {
298 + "version": "0.2.4",
299 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
300 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
301 + "dependencies": {
302 + "safer-buffer": "~2.1.0"
303 + }
304 + },
286 "node_modules/astral-regex": { 305 "node_modules/astral-regex": {
287 "version": "1.0.0", 306 "version": "1.0.0",
288 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 307 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
...@@ -297,6 +316,25 @@ ...@@ -297,6 +316,25 @@
297 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 316 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
298 "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 317 "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
299 }, 318 },
319 + "node_modules/base64-js": {
320 + "version": "1.5.1",
321 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
322 + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
323 + "funding": [
324 + {
325 + "type": "github",
326 + "url": "https://github.com/sponsors/feross"
327 + },
328 + {
329 + "type": "patreon",
330 + "url": "https://www.patreon.com/feross"
331 + },
332 + {
333 + "type": "consulting",
334 + "url": "https://feross.org/support"
335 + }
336 + ]
337 + },
300 "node_modules/bcrypt": { 338 "node_modules/bcrypt": {
301 "version": "5.0.1", 339 "version": "5.0.1",
302 "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", 340 "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz",
...@@ -310,6 +348,42 @@ ...@@ -310,6 +348,42 @@
310 "node": ">= 10.0.0" 348 "node": ">= 10.0.0"
311 } 349 }
312 }, 350 },
351 + "node_modules/bcrypt-pbkdf": {
352 + "version": "1.0.2",
353 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
354 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
355 + "dependencies": {
356 + "tweetnacl": "^0.14.3"
357 + }
358 + },
359 + "node_modules/bl": {
360 + "version": "4.1.0",
361 + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
362 + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
363 + "dependencies": {
364 + "buffer": "^5.5.0",
365 + "inherits": "^2.0.4",
366 + "readable-stream": "^3.4.0"
367 + }
368 + },
369 + "node_modules/bl/node_modules/inherits": {
370 + "version": "2.0.4",
371 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
372 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
373 + },
374 + "node_modules/bl/node_modules/readable-stream": {
375 + "version": "3.6.0",
376 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
377 + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
378 + "dependencies": {
379 + "inherits": "^2.0.3",
380 + "string_decoder": "^1.1.1",
381 + "util-deprecate": "^1.0.1"
382 + },
383 + "engines": {
384 + "node": ">= 6"
385 + }
386 + },
313 "node_modules/bluebird": { 387 "node_modules/bluebird": {
314 "version": "3.7.2", 388 "version": "3.7.2",
315 "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 389 "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
...@@ -345,6 +419,29 @@ ...@@ -345,6 +419,29 @@
345 "concat-map": "0.0.1" 419 "concat-map": "0.0.1"
346 } 420 }
347 }, 421 },
422 + "node_modules/buffer": {
423 + "version": "5.7.1",
424 + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
425 + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
426 + "funding": [
427 + {
428 + "type": "github",
429 + "url": "https://github.com/sponsors/feross"
430 + },
431 + {
432 + "type": "patreon",
433 + "url": "https://www.patreon.com/feross"
434 + },
435 + {
436 + "type": "consulting",
437 + "url": "https://feross.org/support"
438 + }
439 + ],
440 + "dependencies": {
441 + "base64-js": "^1.3.1",
442 + "ieee754": "^1.1.13"
443 + }
444 + },
348 "node_modules/buffer-equal-constant-time": { 445 "node_modules/buffer-equal-constant-time": {
349 "version": "1.0.1", 446 "version": "1.0.1",
350 "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 447 "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
...@@ -633,6 +730,31 @@ ...@@ -633,6 +730,31 @@
633 "semver": "bin/semver" 730 "semver": "bin/semver"
634 } 731 }
635 }, 732 },
733 + "node_modules/crypto-random-string": {
734 + "version": "4.0.0",
735 + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
736 + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
737 + "dependencies": {
738 + "type-fest": "^1.0.1"
739 + },
740 + "engines": {
741 + "node": ">=12"
742 + },
743 + "funding": {
744 + "url": "https://github.com/sponsors/sindresorhus"
745 + }
746 + },
747 + "node_modules/crypto-random-string/node_modules/type-fest": {
748 + "version": "1.2.0",
749 + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.2.0.tgz",
750 + "integrity": "sha512-++0N6KyAj0t2webXst0PE0xuXb4Dv3z1Z+4SGzK+j/epeWBZCfkQbkW/ezscZwpinmBQ5wu/l4TqagKSVcAGCA==",
751 + "engines": {
752 + "node": ">=10"
753 + },
754 + "funding": {
755 + "url": "https://github.com/sponsors/sindresorhus"
756 + }
757 + },
636 "node_modules/d": { 758 "node_modules/d": {
637 "version": "1.0.1", 759 "version": "1.0.1",
638 "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 760 "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
...@@ -703,6 +825,66 @@ ...@@ -703,6 +825,66 @@
703 "node": ">=0.10" 825 "node": ">=0.10"
704 } 826 }
705 }, 827 },
828 + "node_modules/docker-modem": {
829 + "version": "3.0.0",
830 + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.0.tgz",
831 + "integrity": "sha512-WwFajJ8I5geZ/dDZ5FDMDA6TBkWa76xWwGIGw8uzUjNUGCN0to83wJ8Oi1AxrJTC0JBn+7fvIxUctnawtlwXeg==",
832 + "dependencies": {
833 + "debug": "^4.1.1",
834 + "readable-stream": "^3.5.0",
835 + "split-ca": "^1.0.1",
836 + "ssh2": "^0.8.7"
837 + },
838 + "engines": {
839 + "node": ">= 8.0"
840 + }
841 + },
842 + "node_modules/docker-modem/node_modules/debug": {
843 + "version": "4.3.1",
844 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
845 + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
846 + "dependencies": {
847 + "ms": "2.1.2"
848 + },
849 + "engines": {
850 + "node": ">=6.0"
851 + },
852 + "peerDependenciesMeta": {
853 + "supports-color": {
854 + "optional": true
855 + }
856 + }
857 + },
858 + "node_modules/docker-modem/node_modules/ms": {
859 + "version": "2.1.2",
860 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
861 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
862 + },
863 + "node_modules/docker-modem/node_modules/readable-stream": {
864 + "version": "3.6.0",
865 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
866 + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
867 + "dependencies": {
868 + "inherits": "^2.0.3",
869 + "string_decoder": "^1.1.1",
870 + "util-deprecate": "^1.0.1"
871 + },
872 + "engines": {
873 + "node": ">= 6"
874 + }
875 + },
876 + "node_modules/dockerode": {
877 + "version": "3.3.0",
878 + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.0.tgz",
879 + "integrity": "sha512-St08lfOjpYCOXEM8XA0VLu3B3hRjtddODphNW5GFoA0AS3JHgoPQKOz0Qmdzg3P+hUPxhb02g1o1Cu1G+U3lRg==",
880 + "dependencies": {
881 + "docker-modem": "^3.0.0",
882 + "tar-fs": "~2.0.1"
883 + },
884 + "engines": {
885 + "node": ">= 8.0"
886 + }
887 + },
706 "node_modules/doctrine": { 888 "node_modules/doctrine": {
707 "version": "3.0.0", 889 "version": "3.0.0",
708 "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 890 "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
...@@ -793,6 +975,14 @@ ...@@ -793,6 +975,14 @@
793 "node": ">= 0.8" 975 "node": ">= 0.8"
794 } 976 }
795 }, 977 },
978 + "node_modules/end-of-stream": {
979 + "version": "1.4.4",
980 + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
981 + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
982 + "dependencies": {
983 + "once": "^1.4.0"
984 + }
985 + },
796 "node_modules/es5-ext": { 986 "node_modules/es5-ext": {
797 "version": "0.10.53", 987 "version": "0.10.53",
798 "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", 988 "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
...@@ -1323,6 +1513,11 @@ ...@@ -1323,6 +1513,11 @@
1323 "node": ">= 0.6" 1513 "node": ">= 0.6"
1324 } 1514 }
1325 }, 1515 },
1516 + "node_modules/fs-constants": {
1517 + "version": "1.0.0",
1518 + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
1519 + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
1520 + },
1326 "node_modules/fs-extra": { 1521 "node_modules/fs-extra": {
1327 "version": "7.0.1", 1522 "version": "7.0.1",
1328 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 1523 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
...@@ -1552,6 +1747,25 @@ ...@@ -1552,6 +1747,25 @@
1552 "node": ">=0.10.0" 1747 "node": ">=0.10.0"
1553 } 1748 }
1554 }, 1749 },
1750 + "node_modules/ieee754": {
1751 + "version": "1.2.1",
1752 + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
1753 + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
1754 + "funding": [
1755 + {
1756 + "type": "github",
1757 + "url": "https://github.com/sponsors/feross"
1758 + },
1759 + {
1760 + "type": "patreon",
1761 + "url": "https://www.patreon.com/feross"
1762 + },
1763 + {
1764 + "type": "consulting",
1765 + "url": "https://feross.org/support"
1766 + }
1767 + ]
1768 + },
1555 "node_modules/ignore": { 1769 "node_modules/ignore": {
1556 "version": "4.0.6", 1770 "version": "4.0.6",
1557 "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1771 "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
...@@ -2144,6 +2358,11 @@ ...@@ -2144,6 +2358,11 @@
2144 "mkdirp": "bin/cmd.js" 2358 "mkdirp": "bin/cmd.js"
2145 } 2359 }
2146 }, 2360 },
2361 + "node_modules/mkdirp-classic": {
2362 + "version": "0.5.3",
2363 + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
2364 + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
2365 + },
2147 "node_modules/moment": { 2366 "node_modules/moment": {
2148 "version": "2.28.0", 2367 "version": "2.28.0",
2149 "resolved": "https://registry.npmjs.org/moment/-/moment-2.28.0.tgz", 2368 "resolved": "https://registry.npmjs.org/moment/-/moment-2.28.0.tgz",
...@@ -2502,6 +2721,15 @@ ...@@ -2502,6 +2721,15 @@
2502 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2721 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
2503 "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 2722 "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
2504 }, 2723 },
2724 + "node_modules/pump": {
2725 + "version": "3.0.0",
2726 + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2727 + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
2728 + "dependencies": {
2729 + "end-of-stream": "^1.1.0",
2730 + "once": "^1.3.1"
2731 + }
2732 + },
2505 "node_modules/punycode": { 2733 "node_modules/punycode": {
2506 "version": "2.1.1", 2734 "version": "2.1.1",
2507 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2735 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
...@@ -2519,6 +2747,26 @@ ...@@ -2519,6 +2747,26 @@
2519 "node": ">=0.6" 2747 "node": ">=0.6"
2520 } 2748 }
2521 }, 2749 },
2750 + "node_modules/randombytes": {
2751 + "version": "2.0.3",
2752 + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz",
2753 + "integrity": "sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew="
2754 + },
2755 + "node_modules/randomstring": {
2756 + "version": "1.2.1",
2757 + "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.2.1.tgz",
2758 + "integrity": "sha512-eMnfell9XuU3jfCx3f4xCaFAt0YMFPZhx9R3PSStmLarDKg5j5vivqKhf/8pvG+VX/YkxsckHK/VPUrKa5V07A==",
2759 + "dependencies": {
2760 + "array-uniq": "1.0.2",
2761 + "randombytes": "2.0.3"
2762 + },
2763 + "bin": {
2764 + "randomstring": "bin/randomstring"
2765 + },
2766 + "engines": {
2767 + "node": "*"
2768 + }
2769 + },
2522 "node_modules/range-parser": { 2770 "node_modules/range-parser": {
2523 "version": "1.2.1", 2771 "version": "1.2.1",
2524 "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2772 "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
...@@ -2861,6 +3109,11 @@ ...@@ -2861,6 +3109,11 @@
2861 "node": ">=4" 3109 "node": ">=4"
2862 } 3110 }
2863 }, 3111 },
3112 + "node_modules/split-ca": {
3113 + "version": "1.0.1",
3114 + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz",
3115 + "integrity": "sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY="
3116 + },
2864 "node_modules/sprintf-js": { 3117 "node_modules/sprintf-js": {
2865 "version": "1.0.3", 3118 "version": "1.0.3",
2866 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 3119 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
...@@ -2875,6 +3128,30 @@ ...@@ -2875,6 +3128,30 @@
2875 "node": ">= 0.6" 3128 "node": ">= 0.6"
2876 } 3129 }
2877 }, 3130 },
3131 + "node_modules/ssh2": {
3132 + "version": "0.8.9",
3133 + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.9.tgz",
3134 + "integrity": "sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==",
3135 + "dependencies": {
3136 + "ssh2-streams": "~0.4.10"
3137 + },
3138 + "engines": {
3139 + "node": ">=5.2.0"
3140 + }
3141 + },
3142 + "node_modules/ssh2-streams": {
3143 + "version": "0.4.10",
3144 + "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz",
3145 + "integrity": "sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==",
3146 + "dependencies": {
3147 + "asn1": "~0.2.0",
3148 + "bcrypt-pbkdf": "^1.0.2",
3149 + "streamsearch": "~0.1.2"
3150 + },
3151 + "engines": {
3152 + "node": ">=5.2.0"
3153 + }
3154 + },
2878 "node_modules/statuses": { 3155 "node_modules/statuses": {
2879 "version": "1.4.0", 3156 "version": "1.4.0",
2880 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 3157 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
...@@ -2883,6 +3160,14 @@ ...@@ -2883,6 +3160,14 @@
2883 "node": ">= 0.6" 3160 "node": ">= 0.6"
2884 } 3161 }
2885 }, 3162 },
3163 + "node_modules/streamsearch": {
3164 + "version": "0.1.2",
3165 + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
3166 + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
3167 + "engines": {
3168 + "node": ">=0.8.0"
3169 + }
3170 + },
2886 "node_modules/string_decoder": { 3171 "node_modules/string_decoder": {
2887 "version": "1.1.1", 3172 "version": "1.1.1",
2888 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 3173 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
...@@ -3019,6 +3304,50 @@ ...@@ -3019,6 +3304,50 @@
3019 "node": ">= 10" 3304 "node": ">= 10"
3020 } 3305 }
3021 }, 3306 },
3307 + "node_modules/tar-fs": {
3308 + "version": "2.0.1",
3309 + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz",
3310 + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==",
3311 + "dependencies": {
3312 + "chownr": "^1.1.1",
3313 + "mkdirp-classic": "^0.5.2",
3314 + "pump": "^3.0.0",
3315 + "tar-stream": "^2.0.0"
3316 + }
3317 + },
3318 + "node_modules/tar-fs/node_modules/chownr": {
3319 + "version": "1.1.4",
3320 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
3321 + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
3322 + },
3323 + "node_modules/tar-stream": {
3324 + "version": "2.2.0",
3325 + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
3326 + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
3327 + "dependencies": {
3328 + "bl": "^4.0.3",
3329 + "end-of-stream": "^1.4.1",
3330 + "fs-constants": "^1.0.0",
3331 + "inherits": "^2.0.3",
3332 + "readable-stream": "^3.1.1"
3333 + },
3334 + "engines": {
3335 + "node": ">=6"
3336 + }
3337 + },
3338 + "node_modules/tar-stream/node_modules/readable-stream": {
3339 + "version": "3.6.0",
3340 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
3341 + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
3342 + "dependencies": {
3343 + "inherits": "^2.0.3",
3344 + "string_decoder": "^1.1.1",
3345 + "util-deprecate": "^1.0.1"
3346 + },
3347 + "engines": {
3348 + "node": ">= 6"
3349 + }
3350 + },
3022 "node_modules/tar/node_modules/mkdirp": { 3351 "node_modules/tar/node_modules/mkdirp": {
3023 "version": "1.0.4", 3352 "version": "1.0.4",
3024 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 3353 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
...@@ -3080,6 +3409,11 @@ ...@@ -3080,6 +3409,11 @@
3080 "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 3409 "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
3081 "dev": true 3410 "dev": true
3082 }, 3411 },
3412 + "node_modules/tweetnacl": {
3413 + "version": "0.14.5",
3414 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
3415 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
3416 + },
3083 "node_modules/type": { 3417 "node_modules/type": {
3084 "version": "1.2.0", 3418 "version": "1.2.0",
3085 "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 3419 "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
...@@ -3627,6 +3961,19 @@ ...@@ -3627,6 +3961,19 @@
3627 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 3961 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
3628 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 3962 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
3629 }, 3963 },
3964 + "array-uniq": {
3965 + "version": "1.0.2",
3966 + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz",
3967 + "integrity": "sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0="
3968 + },
3969 + "asn1": {
3970 + "version": "0.2.4",
3971 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
3972 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
3973 + "requires": {
3974 + "safer-buffer": "~2.1.0"
3975 + }
3976 + },
3630 "astral-regex": { 3977 "astral-regex": {
3631 "version": "1.0.0", 3978 "version": "1.0.0",
3632 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 3979 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
...@@ -3638,6 +3985,11 @@ ...@@ -3638,6 +3985,11 @@
3638 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 3985 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
3639 "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 3986 "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
3640 }, 3987 },
3988 + "base64-js": {
3989 + "version": "1.5.1",
3990 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
3991 + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
3992 + },
3641 "bcrypt": { 3993 "bcrypt": {
3642 "version": "5.0.1", 3994 "version": "5.0.1",
3643 "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", 3995 "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz",
...@@ -3647,6 +3999,41 @@ ...@@ -3647,6 +3999,41 @@
3647 "node-addon-api": "^3.1.0" 3999 "node-addon-api": "^3.1.0"
3648 } 4000 }
3649 }, 4001 },
4002 + "bcrypt-pbkdf": {
4003 + "version": "1.0.2",
4004 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
4005 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
4006 + "requires": {
4007 + "tweetnacl": "^0.14.3"
4008 + }
4009 + },
4010 + "bl": {
4011 + "version": "4.1.0",
4012 + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
4013 + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
4014 + "requires": {
4015 + "buffer": "^5.5.0",
4016 + "inherits": "^2.0.4",
4017 + "readable-stream": "^3.4.0"
4018 + },
4019 + "dependencies": {
4020 + "inherits": {
4021 + "version": "2.0.4",
4022 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
4023 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
4024 + },
4025 + "readable-stream": {
4026 + "version": "3.6.0",
4027 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
4028 + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
4029 + "requires": {
4030 + "inherits": "^2.0.3",
4031 + "string_decoder": "^1.1.1",
4032 + "util-deprecate": "^1.0.1"
4033 + }
4034 + }
4035 + }
4036 + },
3650 "bluebird": { 4037 "bluebird": {
3651 "version": "3.7.2", 4038 "version": "3.7.2",
3652 "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 4039 "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
...@@ -3679,6 +4066,15 @@ ...@@ -3679,6 +4066,15 @@
3679 "concat-map": "0.0.1" 4066 "concat-map": "0.0.1"
3680 } 4067 }
3681 }, 4068 },
4069 + "buffer": {
4070 + "version": "5.7.1",
4071 + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
4072 + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
4073 + "requires": {
4074 + "base64-js": "^1.3.1",
4075 + "ieee754": "^1.1.13"
4076 + }
4077 + },
3682 "buffer-equal-constant-time": { 4078 "buffer-equal-constant-time": {
3683 "version": "1.0.1", 4079 "version": "1.0.1",
3684 "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 4080 "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
...@@ -3916,6 +4312,21 @@ ...@@ -3916,6 +4312,21 @@
3916 } 4312 }
3917 } 4313 }
3918 }, 4314 },
4315 + "crypto-random-string": {
4316 + "version": "4.0.0",
4317 + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
4318 + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
4319 + "requires": {
4320 + "type-fest": "^1.0.1"
4321 + },
4322 + "dependencies": {
4323 + "type-fest": {
4324 + "version": "1.2.0",
4325 + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.2.0.tgz",
4326 + "integrity": "sha512-++0N6KyAj0t2webXst0PE0xuXb4Dv3z1Z+4SGzK+j/epeWBZCfkQbkW/ezscZwpinmBQ5wu/l4TqagKSVcAGCA=="
4327 + }
4328 + }
4329 + },
3919 "d": { 4330 "d": {
3920 "version": "1.0.1", 4331 "version": "1.0.1",
3921 "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 4332 "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
...@@ -3971,6 +4382,51 @@ ...@@ -3971,6 +4382,51 @@
3971 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 4382 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
3972 "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 4383 "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
3973 }, 4384 },
4385 + "docker-modem": {
4386 + "version": "3.0.0",
4387 + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.0.tgz",
4388 + "integrity": "sha512-WwFajJ8I5geZ/dDZ5FDMDA6TBkWa76xWwGIGw8uzUjNUGCN0to83wJ8Oi1AxrJTC0JBn+7fvIxUctnawtlwXeg==",
4389 + "requires": {
4390 + "debug": "^4.1.1",
4391 + "readable-stream": "^3.5.0",
4392 + "split-ca": "^1.0.1",
4393 + "ssh2": "^0.8.7"
4394 + },
4395 + "dependencies": {
4396 + "debug": {
4397 + "version": "4.3.1",
4398 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
4399 + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
4400 + "requires": {
4401 + "ms": "2.1.2"
4402 + }
4403 + },
4404 + "ms": {
4405 + "version": "2.1.2",
4406 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4407 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4408 + },
4409 + "readable-stream": {
4410 + "version": "3.6.0",
4411 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
4412 + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
4413 + "requires": {
4414 + "inherits": "^2.0.3",
4415 + "string_decoder": "^1.1.1",
4416 + "util-deprecate": "^1.0.1"
4417 + }
4418 + }
4419 + }
4420 + },
4421 + "dockerode": {
4422 + "version": "3.3.0",
4423 + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.0.tgz",
4424 + "integrity": "sha512-St08lfOjpYCOXEM8XA0VLu3B3hRjtddODphNW5GFoA0AS3JHgoPQKOz0Qmdzg3P+hUPxhb02g1o1Cu1G+U3lRg==",
4425 + "requires": {
4426 + "docker-modem": "^3.0.0",
4427 + "tar-fs": "~2.0.1"
4428 + }
4429 + },
3974 "doctrine": { 4430 "doctrine": {
3975 "version": "3.0.0", 4431 "version": "3.0.0",
3976 "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 4432 "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
...@@ -4051,6 +4507,14 @@ ...@@ -4051,6 +4507,14 @@
4051 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 4507 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
4052 "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 4508 "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
4053 }, 4509 },
4510 + "end-of-stream": {
4511 + "version": "1.4.4",
4512 + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
4513 + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
4514 + "requires": {
4515 + "once": "^1.4.0"
4516 + }
4517 + },
4054 "es5-ext": { 4518 "es5-ext": {
4055 "version": "0.10.53", 4519 "version": "0.10.53",
4056 "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", 4520 "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
...@@ -4497,6 +4961,11 @@ ...@@ -4497,6 +4961,11 @@
4497 "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 4961 "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
4498 "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 4962 "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
4499 }, 4963 },
4964 + "fs-constants": {
4965 + "version": "1.0.0",
4966 + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
4967 + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
4968 + },
4500 "fs-extra": { 4969 "fs-extra": {
4501 "version": "7.0.1", 4970 "version": "7.0.1",
4502 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 4971 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
...@@ -4680,6 +5149,11 @@ ...@@ -4680,6 +5149,11 @@
4680 "safer-buffer": ">= 2.1.2 < 3" 5149 "safer-buffer": ">= 2.1.2 < 3"
4681 } 5150 }
4682 }, 5151 },
5152 + "ieee754": {
5153 + "version": "1.2.1",
5154 + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
5155 + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
5156 + },
4683 "ignore": { 5157 "ignore": {
4684 "version": "4.0.6", 5158 "version": "4.0.6",
4685 "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 5159 "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
...@@ -5174,6 +5648,11 @@ ...@@ -5174,6 +5648,11 @@
5174 "minimist": "^1.2.5" 5648 "minimist": "^1.2.5"
5175 } 5649 }
5176 }, 5650 },
5651 + "mkdirp-classic": {
5652 + "version": "0.5.3",
5653 + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
5654 + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
5655 + },
5177 "moment": { 5656 "moment": {
5178 "version": "2.28.0", 5657 "version": "2.28.0",
5179 "resolved": "https://registry.npmjs.org/moment/-/moment-2.28.0.tgz", 5658 "resolved": "https://registry.npmjs.org/moment/-/moment-2.28.0.tgz",
...@@ -5458,6 +5937,15 @@ ...@@ -5458,6 +5937,15 @@
5458 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 5937 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
5459 "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 5938 "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
5460 }, 5939 },
5940 + "pump": {
5941 + "version": "3.0.0",
5942 + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
5943 + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
5944 + "requires": {
5945 + "end-of-stream": "^1.1.0",
5946 + "once": "^1.3.1"
5947 + }
5948 + },
5461 "punycode": { 5949 "punycode": {
5462 "version": "2.1.1", 5950 "version": "2.1.1",
5463 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 5951 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
...@@ -5469,6 +5957,20 @@ ...@@ -5469,6 +5957,20 @@
5469 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 5957 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
5470 "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 5958 "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
5471 }, 5959 },
5960 + "randombytes": {
5961 + "version": "2.0.3",
5962 + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz",
5963 + "integrity": "sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew="
5964 + },
5965 + "randomstring": {
5966 + "version": "1.2.1",
5967 + "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.2.1.tgz",
5968 + "integrity": "sha512-eMnfell9XuU3jfCx3f4xCaFAt0YMFPZhx9R3PSStmLarDKg5j5vivqKhf/8pvG+VX/YkxsckHK/VPUrKa5V07A==",
5969 + "requires": {
5970 + "array-uniq": "1.0.2",
5971 + "randombytes": "2.0.3"
5972 + }
5973 + },
5472 "range-parser": { 5974 "range-parser": {
5473 "version": "1.2.1", 5975 "version": "1.2.1",
5474 "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 5976 "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
...@@ -5748,6 +6250,11 @@ ...@@ -5748,6 +6250,11 @@
5748 } 6250 }
5749 } 6251 }
5750 }, 6252 },
6253 + "split-ca": {
6254 + "version": "1.0.1",
6255 + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz",
6256 + "integrity": "sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY="
6257 + },
5751 "sprintf-js": { 6258 "sprintf-js": {
5752 "version": "1.0.3", 6259 "version": "1.0.3",
5753 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 6260 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
...@@ -5759,11 +6266,34 @@ ...@@ -5759,11 +6266,34 @@
5759 "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", 6266 "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz",
5760 "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" 6267 "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg=="
5761 }, 6268 },
6269 + "ssh2": {
6270 + "version": "0.8.9",
6271 + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.9.tgz",
6272 + "integrity": "sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==",
6273 + "requires": {
6274 + "ssh2-streams": "~0.4.10"
6275 + }
6276 + },
6277 + "ssh2-streams": {
6278 + "version": "0.4.10",
6279 + "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz",
6280 + "integrity": "sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==",
6281 + "requires": {
6282 + "asn1": "~0.2.0",
6283 + "bcrypt-pbkdf": "^1.0.2",
6284 + "streamsearch": "~0.1.2"
6285 + }
6286 + },
5762 "statuses": { 6287 "statuses": {
5763 "version": "1.4.0", 6288 "version": "1.4.0",
5764 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 6289 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
5765 "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 6290 "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
5766 }, 6291 },
6292 + "streamsearch": {
6293 + "version": "0.1.2",
6294 + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
6295 + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
6296 + },
5767 "string_decoder": { 6297 "string_decoder": {
5768 "version": "1.1.1", 6298 "version": "1.1.1",
5769 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 6299 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
...@@ -5888,6 +6418,48 @@ ...@@ -5888,6 +6418,48 @@
5888 } 6418 }
5889 } 6419 }
5890 }, 6420 },
6421 + "tar-fs": {
6422 + "version": "2.0.1",
6423 + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz",
6424 + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==",
6425 + "requires": {
6426 + "chownr": "^1.1.1",
6427 + "mkdirp-classic": "^0.5.2",
6428 + "pump": "^3.0.0",
6429 + "tar-stream": "^2.0.0"
6430 + },
6431 + "dependencies": {
6432 + "chownr": {
6433 + "version": "1.1.4",
6434 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
6435 + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
6436 + }
6437 + }
6438 + },
6439 + "tar-stream": {
6440 + "version": "2.2.0",
6441 + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
6442 + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
6443 + "requires": {
6444 + "bl": "^4.0.3",
6445 + "end-of-stream": "^1.4.1",
6446 + "fs-constants": "^1.0.0",
6447 + "inherits": "^2.0.3",
6448 + "readable-stream": "^3.1.1"
6449 + },
6450 + "dependencies": {
6451 + "readable-stream": {
6452 + "version": "3.6.0",
6453 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
6454 + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
6455 + "requires": {
6456 + "inherits": "^2.0.3",
6457 + "string_decoder": "^1.1.1",
6458 + "util-deprecate": "^1.0.1"
6459 + }
6460 + }
6461 + }
6462 + },
5891 "text-table": { 6463 "text-table": {
5892 "version": "0.2.0", 6464 "version": "0.2.0",
5893 "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 6465 "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
...@@ -5930,6 +6502,11 @@ ...@@ -5930,6 +6502,11 @@
5930 "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 6502 "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
5931 "dev": true 6503 "dev": true
5932 }, 6504 },
6505 + "tweetnacl": {
6506 + "version": "0.14.5",
6507 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
6508 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
6509 + },
5933 "type": { 6510 "type": {
5934 "version": "1.2.0", 6511 "version": "1.2.0",
5935 "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 6512 "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
......
...@@ -9,10 +9,13 @@ ...@@ -9,10 +9,13 @@
9 "bcrypt": "^5.0.1", 9 "bcrypt": "^5.0.1",
10 "cookie-parser": "~1.4.4", 10 "cookie-parser": "~1.4.4",
11 "cors": "^2.8.5", 11 "cors": "^2.8.5",
12 + "crypto-random-string": "^4.0.0",
12 "debug": "~2.6.9", 13 "debug": "~2.6.9",
14 + "dockerode": "^3.3.0",
13 "dotenv": "^8.2.0", 15 "dotenv": "^8.2.0",
14 "express": "~4.16.1", 16 "express": "~4.16.1",
15 "mysql2": "^2.1.0", 17 "mysql2": "^2.1.0",
18 + "randomstring": "^1.2.1",
16 "sequelize": "^6.3.5" 19 "sequelize": "^6.3.5"
17 }, 20 },
18 "devDependencies": { 21 "devDependencies": {
......
1 +const express = require ('express');
2 +const router = express.Router();
3 +
4 +const dockerController = require ('../controllers/dockerController')
5 +const { guestOnly, memberOnly, adminOnly } = require ('../middlewares/auth')
6 +
7 +router.post('/dockerfile/add', memberOnly, dockerController.addDockerfile)
8 +router.post('/dockerfile/list', memberOnly, dockerController.listDockerfile)
9 +router.post('/dockerfile/remove', memberOnly, dockerController.removeDockerfile)
10 +router.post('/image/list', memberOnly, dockerController.listImage)
11 +router.post('/image/build', memberOnly, dockerController.buildImage)
12 +router.post('/image/remove', memberOnly, dockerController.removeImage)
13 +router.post('/container/list', memberOnly, dockerController.listContainer)
14 +router.post('/container/create', memberOnly, dockerController.createContainer)
15 +router.post('/container/start', memberOnly, dockerController.startContainer)
16 +router.post('/container/stop', memberOnly, dockerController.stopContainer)
17 +router.post('/container/remove', memberOnly, dockerController.removeContainer)
18 +
19 +router.post('/admin/dockerfile/list', adminOnly, dockerController.adminListDockerfile)
20 +router.post('/admin/dockerfile/remove', adminOnly, dockerController.adminDeleteDockerfile)
21 +router.post('/admin/image/list', adminOnly, dockerController.adminListImage)
22 +router.post('/admin/image/remove', adminOnly, dockerController.adminDeleteImage)
23 +router.post('/admin/container/list', adminOnly, dockerController.adminListContainer)
24 +router.post('/admin/container/remove', adminOnly, dockerController.adminDeleteContainer)
25 +
26 +module.exports = router
1 +var Docker = require('dockerode')
2 +var docker = new Docker({socketPath: '/var/run/docker.sock'})
3 +
4 +docker.buildImage({
5 + context: '../dockerfiles/sk2jsif92jajsdi1',
6 + src: ['Dockerfile']
7 + }, {t: 'testimage1337'}, function (err, response) {
8 + console.log(response)
9 +})
1 +const jwt = require('jsonwebtoken')
2 +const config = require(__dirname + '/../config/config')
3 +
4 +const { User } = require('../models')
5 +
6 +exports.currentUser = async (token) => {
7 + try{
8 + if (!token) {
9 + return false
10 + }
11 + let decoded = jwt.verify(token, config.JWT_KEY)
12 + if (!decoded) {
13 + return false
14 + }
15 + let userId = decoded.id
16 + let user = await User.findByPk(userId)
17 + if (!user) {
18 + return false
19 + }
20 + return user
21 + } catch (error) {
22 + throw error
23 + }
24 +}