Showing
11 changed files
with
1143 additions
and
289 deletions
... | @@ -17,6 +17,10 @@ var router = express.Router(); | ... | @@ -17,6 +17,10 @@ var router = express.Router(); |
17 | var cookieParser = require('cookie-parser') | 17 | var cookieParser = require('cookie-parser') |
18 | var ExpressSession = require('express-session') | 18 | var ExpressSession = require('express-session') |
19 | 19 | ||
20 | +var database = require('./database/database'); | ||
21 | +var config = require('./config'); | ||
22 | + | ||
23 | + | ||
20 | // get port | 24 | // get port |
21 | var port = process.env.PORT || 3000; | 25 | var port = process.env.PORT || 3000; |
22 | app.set('port',port); | 26 | app.set('port',port); |
... | @@ -64,9 +68,25 @@ app.use(expressErrorHandler.httpError(404)); | ... | @@ -64,9 +68,25 @@ app.use(expressErrorHandler.httpError(404)); |
64 | app.use(errorHandler); | 68 | app.use(errorHandler); |
65 | 69 | ||
66 | 70 | ||
71 | +// 프로세스 종료 시에 데이터베이스 연결 해제 | ||
72 | +process.on('SIGTERM', function () { | ||
73 | + console.log("프로세스가 종료됩니다."); | ||
74 | + app.close(); | ||
75 | +}); | ||
76 | + | ||
77 | +app.on('close', function () { | ||
78 | + console.log("Express 서버 객체가 종료됩니다."); | ||
79 | + if (database.db) { | ||
80 | + database.db.close(); | ||
81 | + } | ||
82 | +}); | ||
83 | + | ||
67 | 84 | ||
68 | // for server listening | 85 | // for server listening |
69 | var server = http.createServer(app) | 86 | var server = http.createServer(app) |
70 | server.listen(port,function(){ | 87 | server.listen(port,function(){ |
71 | console.log('익스프레스 서버를 시작했습니다.'); | 88 | console.log('익스프레스 서버를 시작했습니다.'); |
89 | + | ||
90 | + database.init(app, config); | ||
72 | }) | 91 | }) |
92 | + | ... | ... |
app/config.js
0 → 100644
1 | +module.exports = { | ||
2 | + server_port: 3000, | ||
3 | + db_url: 'mongodb://oss:12341234@cluster0.us5lm.mongodb.net/?retryWrites=true&w=majority', | ||
4 | + db_schemas: [ | ||
5 | + {file:'./user_schema', collection:'users3', schemaName:'UserSchema', modelName:'UserModel'} | ||
6 | + ] | ||
7 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
app/database/Connection.js
deleted
100644 → 0
1 | -const mysql = require('mysql') | ||
2 | - | ||
3 | -var pool = mysql.createPool({ | ||
4 | - host: "localhost", | ||
5 | - user: "root", | ||
6 | - password: "1234", | ||
7 | - port: 3306, | ||
8 | - database: "rest_stop" | ||
9 | -}) | ||
10 | - | ||
11 | -var adduser = function(name, id, password, callback) { | ||
12 | - console.log('addUser'); | ||
13 | - | ||
14 | - pool.getConnection(function(err, conn) { | ||
15 | - if(err){ | ||
16 | - if(conn){ | ||
17 | - conn.release(); | ||
18 | - } | ||
19 | - | ||
20 | - callback(err, null); | ||
21 | - return; | ||
22 | - } | ||
23 | - | ||
24 | - var data = {name:name, id:id, password:password}; | ||
25 | - | ||
26 | - var exec = conn.query('insert into users set ?', data, function(err, result) { | ||
27 | - conn.release(); | ||
28 | - | ||
29 | - if(err){ | ||
30 | - console.log('SQL 실행 시 오류 발생'); | ||
31 | - console.dir(err); | ||
32 | - | ||
33 | - callback(err,null); | ||
34 | - | ||
35 | - return; | ||
36 | - } | ||
37 | - | ||
38 | - callback(null, result); | ||
39 | - }) | ||
40 | - }) | ||
41 | -} | ||
42 | - | ||
43 | -var authUser = function(id, password, callback) { | ||
44 | - console.log('authUser 호출'); | ||
45 | - | ||
46 | - pool.getConnection(function(err, conn) { | ||
47 | - if(err){ | ||
48 | - if(conn){ | ||
49 | - conn.release(); | ||
50 | - } | ||
51 | - | ||
52 | - callback(err, null); | ||
53 | - return; | ||
54 | - } | ||
55 | - | ||
56 | - var colums = ['name', 'id']; | ||
57 | - var tablename = 'users'; | ||
58 | - | ||
59 | - var exec = conn.query("select ?? from ?? where id = ? and password = ?", | ||
60 | - [colums, tablename, id, password], function(err, rows) { | ||
61 | - conn.release(); | ||
62 | - | ||
63 | - if(rows.length >0){ | ||
64 | - console.log('Id [%s], password [$s] 일치하는 사용자 찾음', id, password); | ||
65 | - callback(null, rows); | ||
66 | - } else { | ||
67 | - console.log('일치하는 사용자 없음'); | ||
68 | - callback(null, null); | ||
69 | - } | ||
70 | - } | ||
71 | - ); | ||
72 | - }) | ||
73 | -} | ||
74 | - | ||
75 | -module.exports.pool = pool; | ||
76 | -module.exports.authUser = authUser; | ||
77 | -module.exports.adduser = adduser; | ||
78 | -//module.exports.listuser = listuser; |
app/database/User.js
deleted
100644 → 0
1 | -const Connection = require('./Connection') | ||
2 | - | ||
3 | -var adduser = async (username,userId,userPassword) => { | ||
4 | - try { | ||
5 | - const query = `INSERT INTO ` + | ||
6 | - `accounts ` + | ||
7 | - `VALUES ` + | ||
8 | - `(null, '$(username)', '$(userId)', '$(userPassword)')` | ||
9 | - | ||
10 | - await Connection(query) | ||
11 | - | ||
12 | - return true; | ||
13 | - } catch (error) { | ||
14 | - return false; | ||
15 | - } | ||
16 | -}; | ||
17 | - | ||
18 | -var login; | ||
19 | - | ||
20 | -var listuser = function(req, res) { | ||
21 | - console.log('user(user2.js) 모듈 안에 있는 listuser 호출됨.'); | ||
22 | - | ||
23 | - // 데이터베이스 객체 참조 | ||
24 | - var database = req.app.get('database'); | ||
25 | - | ||
26 | - // 데이터베이스 객체가 초기화된 경우, 모델 객체의 findAll 메소드 호출 | ||
27 | - if (database.db) { | ||
28 | - // 1. 모든 사용자 검색 | ||
29 | - database.UserModel.findAll(function(err, results) { | ||
30 | - // 에러 발생 시, 클라이언트로 에러 전송 | ||
31 | - if (err) { | ||
32 | - console.error('사용자 리스트 조회 중 에러 발생 : ' + err.stack); | ||
33 | - | ||
34 | - res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); | ||
35 | - res.write('<h2>사용자 리스트 조회 중 에러 발생</h2>'); | ||
36 | - res.write('<p>' + err.stack + '</p>'); | ||
37 | - res.end(); | ||
38 | - | ||
39 | - return; | ||
40 | - } | ||
41 | - | ||
42 | - if (results) { | ||
43 | - console.dir(results); | ||
44 | - | ||
45 | - res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); | ||
46 | - res.write('<h2>사용자 리스트</h2>'); | ||
47 | - res.write('<div><ul>'); | ||
48 | - | ||
49 | - for (var i = 0; i < results.length; i++) { | ||
50 | - var curId = results[i]._doc.id; | ||
51 | - var curName = results[i]._doc.name; | ||
52 | - res.write(' <li>#' + i + ' : ' + curId + ', ' + curName + '</li>'); | ||
53 | - } | ||
54 | - | ||
55 | - res.write('</ul></div>'); | ||
56 | - res.end(); | ||
57 | - } else { | ||
58 | - res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); | ||
59 | - res.write('<h2>사용자 리스트 조회 실패</h2>'); | ||
60 | - res.end(); | ||
61 | - } | ||
62 | - }); | ||
63 | - } else { | ||
64 | - res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); | ||
65 | - res.write('<h2>데이터베이스 연결 실패</h2>'); | ||
66 | - res.end(); | ||
67 | - } | ||
68 | - | ||
69 | -}; | ||
70 | - | ||
71 | - | ||
72 | -//사용자를 인증하는 함수 : 아이디로 먼저 찾고 비밀번호를 그 다음에 비교하도록 함 | ||
73 | -var authUser = function(database, id, password, callback) { | ||
74 | - console.log('authUser 호출됨.'); | ||
75 | - | ||
76 | - // 1. 아이디를 이용해 검색 | ||
77 | - database.UserModel.findById(id, function(err, results) { | ||
78 | - if (err) { | ||
79 | - callback(err, null); | ||
80 | - return; | ||
81 | - } | ||
82 | - | ||
83 | - console.log('아이디 [%s]로 사용자 검색결과', id); | ||
84 | - console.dir(results); | ||
85 | - | ||
86 | - if (results.length > 0) { | ||
87 | - console.log('아이디와 일치하는 사용자 찾음.'); | ||
88 | - | ||
89 | - // 2. 패스워드 확인 : 모델 인스턴스를 객체를 만들고 authenticate() 메소드 호출 | ||
90 | - var user = new database.UserModel({id:id}); | ||
91 | - var authenticated = user.authenticate(password, results[0]._doc.salt, results[0]._doc.hashed_password); | ||
92 | - if (authenticated) { | ||
93 | - console.log('비밀번호 일치함'); | ||
94 | - callback(null, results); | ||
95 | - } else { | ||
96 | - console.log('비밀번호 일치하지 않음'); | ||
97 | - callback(null, null); | ||
98 | - } | ||
99 | - | ||
100 | - } else { | ||
101 | - console.log("아이디와 일치하는 사용자를 찾지 못함."); | ||
102 | - callback(null, null); | ||
103 | - } | ||
104 | - | ||
105 | - }); | ||
106 | - | ||
107 | -} | ||
108 | - | ||
109 | - | ||
110 | -//사용자를 등록하는 함수 | ||
111 | -var addUser = function(database, id, password, name, callback) { | ||
112 | - console.log('addUser 호출됨.'); | ||
113 | - | ||
114 | - // UserModel 인스턴스 생성 | ||
115 | - var user = new database.UserModel({"id":id, "password":password, "name":name}); | ||
116 | - | ||
117 | - // save()로 저장 | ||
118 | - user.save(function(err) { | ||
119 | - if (err) { | ||
120 | - callback(err, null); | ||
121 | - return; | ||
122 | - } | ||
123 | - | ||
124 | - console.log("사용자 데이터 추가함."); | ||
125 | - callback(null, user); | ||
126 | - | ||
127 | - }); | ||
128 | -} | ||
129 | - | ||
130 | - | ||
131 | -module.exports.login = login; | ||
132 | -module.exports.adduser = adduser; | ||
133 | -module.exports.listuser = listuser; | ||
134 | - |
app/database/database.js
0 → 100644
1 | +var mongoose = require('mongoose'); | ||
2 | +var db_url = 'mongodb+srv://oss:12341234@cluster0.us5lm.mongodb.net/?retryWrites=true&w=majority'; | ||
3 | +// database 객체에 db, schema, model 모두 추가 | ||
4 | +var database = {}; | ||
5 | + | ||
6 | +// 초기화를 위해 호출하는 함수 | ||
7 | +database.init = function(app, config) { | ||
8 | + console.log('init() 호출됨.'); | ||
9 | + | ||
10 | + connect(app, config); | ||
11 | +} | ||
12 | + | ||
13 | +//데이터베이스에 연결하고 응답 객체의 속성으로 db 객체 추가 | ||
14 | +function connect(app, config) { | ||
15 | + console.log('connect() 호출됨.'); | ||
16 | + | ||
17 | + // 데이터베이스 연결 : config의 설정 사용 | ||
18 | + mongoose.Promise = global.Promise; // mongoose의 Promise 객체는 global의 Promise 객체 사용하도록 함 | ||
19 | + mongoose.connect(db_url); | ||
20 | + | ||
21 | + database.db = mongoose.connection; | ||
22 | + | ||
23 | + database.db.on('error', console.error.bind(console, 'mongoose connection error.')); | ||
24 | + database.db.on('open', function () { | ||
25 | + console.log('데이터베이스에 연결되었습니다. : ' + db_url); | ||
26 | + | ||
27 | + // config에 등록된 스키마 및 모델 객체 생성 | ||
28 | + createSchema(app, config); | ||
29 | + | ||
30 | + }); | ||
31 | + database.db.on('disconnected', connect); | ||
32 | + | ||
33 | +} | ||
34 | + | ||
35 | +// config에 정의된 스키마 및 모델 객체 생성 | ||
36 | +function createSchema(app, config) { | ||
37 | + var schemaLen = config.db_schemas.length; | ||
38 | + console.log('설정에 정의된 스키마의 수 : %d', schemaLen); | ||
39 | + | ||
40 | + for (var i = 0; i < schemaLen; i++) { | ||
41 | + var curItem = config.db_schemas[i]; | ||
42 | + | ||
43 | + // 모듈 파일에서 모듈 불러온 후 createSchema() 함수 호출하기 | ||
44 | + var curSchema = require(curItem.file).createSchema(mongoose); | ||
45 | + console.log('%s 모듈을 불러들인 후 스키마 정의함.', curItem.file); | ||
46 | + | ||
47 | + // User 모델 정의 | ||
48 | + var curModel = mongoose.model(curItem.collection, curSchema); | ||
49 | + console.log('%s 컬렉션을 위해 모델 정의함.', curItem.collection); | ||
50 | + | ||
51 | + // database 객체에 속성으로 추가 | ||
52 | + database[curItem.schemaName] = curSchema; | ||
53 | + database[curItem.modelName] = curModel; | ||
54 | + console.log('스키마 이름 [%s], 모델 이름 [%s] 이 database 객체의 속성으로 추가됨.', curItem.schemaName, curItem.modelName); | ||
55 | + } | ||
56 | + | ||
57 | + app.set('database', database); | ||
58 | + console.log('database 객체가 app 객체의 속성으로 추가됨.'); | ||
59 | +} | ||
60 | + | ||
61 | + | ||
62 | +// database 객체를 module.exports에 할당 | ||
63 | +module.exports = database; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
app/database/user_schema.js
0 → 100644
1 | +var crypto = require('crypto'); | ||
2 | + | ||
3 | +var Schema = {}; | ||
4 | + | ||
5 | +Schema.createSchema = function(mongoose) { | ||
6 | + | ||
7 | + // 스키마 정의 | ||
8 | + var UserSchema = mongoose.Schema({ | ||
9 | + id: {type: String, required: true, unique: true, 'default':''}, | ||
10 | + hashed_password: {type: String, required: true, 'default':''}, | ||
11 | + salt: {type:String, required:true}, | ||
12 | + name: {type: String, index: 'hashed', 'default':''}, | ||
13 | + age: {type: Number, 'default': -1}, | ||
14 | + created_at: {type: Date, index: {unique: false}, 'default': Date.now}, | ||
15 | + updated_at: {type: Date, index: {unique: false}, 'default': Date.now} | ||
16 | + }); | ||
17 | + | ||
18 | + // password를 virtual 메소드로 정의 : MongoDB에 저장되지 않는 편리한 속성임. 특정 속성을 지정하고 set, get 메소드를 정의함 | ||
19 | + UserSchema | ||
20 | + .virtual('password') | ||
21 | + .set(function(password) { | ||
22 | + this._password = password; | ||
23 | + this.salt = this.makeSalt(); | ||
24 | + this.hashed_password = this.encryptPassword(password); | ||
25 | + console.log('virtual password 호출됨 : ' + this.hashed_password); | ||
26 | + }) | ||
27 | + .get(function() { return this._password }); | ||
28 | + | ||
29 | + // 스키마에 모델 인스턴스에서 사용할 수 있는 메소드 추가 | ||
30 | + // 비밀번호 암호화 메소드 | ||
31 | + UserSchema.method('encryptPassword', function(plainText, inSalt) { | ||
32 | + if (inSalt) { | ||
33 | + return crypto.createHmac('sha1', inSalt).update(plainText).digest('hex'); | ||
34 | + } else { | ||
35 | + return crypto.createHmac('sha1', this.salt).update(plainText).digest('hex'); | ||
36 | + } | ||
37 | + }); | ||
38 | + | ||
39 | + // salt 값 만들기 메소드 | ||
40 | + UserSchema.method('makeSalt', function() { | ||
41 | + return Math.round((new Date().valueOf() * Math.random())) + ''; | ||
42 | + }); | ||
43 | + | ||
44 | + // 인증 메소드 - 입력된 비밀번호와 비교 (true/false 리턴) | ||
45 | + UserSchema.method('authenticate', function(plainText, inSalt, hashed_password) { | ||
46 | + if (inSalt) { | ||
47 | + console.log('authenticate 호출됨 : %s -> %s : %s', plainText, this.encryptPassword(plainText, inSalt), hashed_password); | ||
48 | + return this.encryptPassword(plainText, inSalt) === hashed_password; | ||
49 | + } else { | ||
50 | + console.log('authenticate 호출됨 : %s -> %s : %s', plainText, this.encryptPassword(plainText), this.hashed_password); | ||
51 | + return this.encryptPassword(plainText) === this.hashed_password; | ||
52 | + } | ||
53 | + }); | ||
54 | + | ||
55 | + // 값이 유효한지 확인하는 함수 정의 | ||
56 | + var validatePresenceOf = function(value) { | ||
57 | + return value && value.length; | ||
58 | + }; | ||
59 | + | ||
60 | + // 저장 시의 트리거 함수 정의 (password 필드가 유효하지 않으면 에러 발생) | ||
61 | + UserSchema.pre('save', function(next) { | ||
62 | + if (!this.isNew) return next(); | ||
63 | + | ||
64 | + if (!validatePresenceOf(this.password)) { | ||
65 | + next(new Error('유효하지 않은 password 필드입니다.')); | ||
66 | + } else { | ||
67 | + next(); | ||
68 | + } | ||
69 | + }) | ||
70 | + | ||
71 | + // 필수 속성에 대한 유효성 확인 (길이값 체크) | ||
72 | + UserSchema.path('id').validate(function (id) { | ||
73 | + return id.length; | ||
74 | + }, 'id 칼럼의 값이 없습니다.'); | ||
75 | + | ||
76 | + UserSchema.path('name').validate(function (name) { | ||
77 | + return name.length; | ||
78 | + }, 'name 칼럼의 값이 없습니다.'); | ||
79 | + | ||
80 | + UserSchema.path('hashed_password').validate(function (hashed_password) { | ||
81 | + return hashed_password.length; | ||
82 | + }, 'hashed_password 칼럼의 값이 없습니다.'); | ||
83 | + | ||
84 | + | ||
85 | + // 스키마에 static 메소드 추가 | ||
86 | + UserSchema.static('findById', function(id, callback) { | ||
87 | + return this.find({id:id}, callback); | ||
88 | + }); | ||
89 | + | ||
90 | + UserSchema.static('findAll', function(callback) { | ||
91 | + return this.find({}, callback); | ||
92 | + }); | ||
93 | + | ||
94 | + console.log('UserSchema 정의함.'); | ||
95 | + | ||
96 | + return UserSchema; | ||
97 | +}; | ||
98 | + | ||
99 | +// module.exports에 UserSchema 객체 직접 할당 | ||
100 | +module.exports = Schema; | ||
101 | + |
1 | +var Conn = require('../database/database') | ||
1 | var express = require('express') | 2 | var express = require('express') |
2 | -var Conn = require('../database/Connection') | 3 | +var router = express.Router(); |
3 | -var router = express.Router() | ||
4 | 4 | ||
5 | //라우팅 함수 등록 | 5 | //라우팅 함수 등록 |
6 | 6 | ||
7 | router.get('/',function(req,res){ | 7 | router.get('/',function(req,res){ |
8 | + | ||
8 | res.render('login.html') | 9 | res.render('login.html') |
9 | }); | 10 | }); |
10 | 11 | ||
... | @@ -15,45 +16,90 @@ router.post('/process', function(req, res) { | ... | @@ -15,45 +16,90 @@ router.post('/process', function(req, res) { |
15 | var paramPassword = req.body.password || req.query.password; | 16 | var paramPassword = req.body.password || req.query.password; |
16 | //GET, POST 모두 고려해서 둘 다 검사 | 17 | //GET, POST 모두 고려해서 둘 다 검사 |
17 | 18 | ||
18 | - if(Conn.pool){ | 19 | + // 데이터베이스 객체 참조 |
19 | - Conn.authUser(paramId, paramPassword, function(err, rows) { | 20 | + var database = req.app.get('database'); |
20 | - if(err){ | 21 | + |
21 | - console.error(err.stack); | 22 | + // 데이터베이스 객체가 초기화된 경우, authUser 함수 호출하여 사용자 인증 |
22 | - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); | 23 | + if (database.db) { |
23 | - res.write('<h1>로그인 중 오류</h1>'); | 24 | + authUser(database, paramId, paramPassword, function(err, docs) { |
24 | - res.write('<div><p>Param id : ' + paramId + '</p></div>'); | 25 | + // 에러 발생 시, 클라이언트로 에러 전송 |
25 | - res.write('<div><p>Param password : ' + paramPassword + '</p></div>'); | 26 | + if (err) { |
26 | - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); | 27 | + console.error('사용자 로그인 중 에러 발생 : ' + err.stack); |
27 | - res.end(); | 28 | + |
28 | - | 29 | + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); |
29 | - return; | 30 | + res.write('<h2>사용자 로그인 중 에러 발생</h2>'); |
31 | + res.write('<p>' + err.stack + '</p>'); | ||
32 | + res.end(); | ||
33 | + | ||
34 | + return; | ||
30 | } | 35 | } |
31 | - if (rows){ | 36 | + |
32 | - console.dir(rows); | 37 | + // 조회된 레코드가 있으면 성공 응답 전송 |
33 | - | 38 | + if (docs) { |
34 | - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); | 39 | + console.dir(docs); |
35 | - res.write('<h1>로그인 성공</h1>'); | ||
36 | - res.write('<div><p>Param name : ' + rows[0].name + '</p></div>'); | ||
37 | - res.write('<div><p>Param id : ' + paramId + '</p></div>'); | ||
38 | - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); | ||
39 | - res.end(); | ||
40 | - } else { | ||
41 | - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); | ||
42 | - res.write('<h1>로그인 실패.</h1>'); | ||
43 | - res.write('<div><p>Param id : ' + paramId + '</p></div>'); | ||
44 | - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); | ||
45 | - res.end(); | ||
46 | - } | ||
47 | - | ||
48 | - }) | ||
49 | - }else{ | ||
50 | - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); | ||
51 | - res.write('<h1>데이터베이스 연결 실패</h1>'); | ||
52 | - res.end(); | ||
53 | - } | ||
54 | 40 | ||
41 | + // 조회 결과에서 사용자 이름 확인 | ||
42 | + var username = docs[0].name; | ||
43 | + | ||
44 | + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); | ||
45 | + res.write('<h1>로그인 성공</h1>'); | ||
46 | + res.write('<div><p>사용자 아이디 : ' + paramId + '</p></div>'); | ||
47 | + res.write('<div><p>사용자 이름 : ' + username + '</p></div>'); | ||
48 | + res.write("<br><br><a href='/login'>다시 로그인하기</a>"); | ||
49 | + res.end(); | ||
50 | + | ||
51 | + } else { // 조회된 레코드가 없는 경우 실패 응답 전송 | ||
52 | + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); | ||
53 | + res.write('<h1>로그인 실패</h1>'); | ||
54 | + res.write('<div><p>아이디와 패스워드를 다시 확인하십시오.</p></div>'); | ||
55 | + res.write("<br><br><a href='/login'>다시 로그인하기</a>"); | ||
56 | + res.end(); | ||
57 | + } | ||
58 | + }); | ||
59 | + } else { // 데이터베이스 객체가 초기화되지 않은 경우 실패 응답 전송 | ||
60 | + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); | ||
61 | + res.write('<h2>데이터베이스 연결 실패</h2>'); | ||
62 | + res.write('<div><p>데이터베이스에 연결하지 못했습니다.</p></div>'); | ||
63 | + res.end(); | ||
64 | + } | ||
55 | 65 | ||
56 | }); | 66 | }); |
57 | 67 | ||
68 | +//사용자를 인증하는 함수 : 아이디로 먼저 찾고 비밀번호를 그 다음에 비교하도록 함 | ||
69 | +var authUser = function(database, id, password, callback) { | ||
70 | + console.log('authUser 호출됨.'); | ||
71 | + | ||
72 | + // 1. 아이디를 이용해 검색 | ||
73 | + database.UserModel.findById(id, function(err, results) { | ||
74 | + if (err) { | ||
75 | + callback(err, null); | ||
76 | + return; | ||
77 | + } | ||
78 | + | ||
79 | + console.log('아이디 [%s]로 사용자 검색결과', id); | ||
80 | + console.dir(results); | ||
81 | + | ||
82 | + if (results.length > 0) { | ||
83 | + console.log('아이디와 일치하는 사용자 찾음.'); | ||
84 | + | ||
85 | + // 2. 패스워드 확인 : 모델 인스턴스를 객체를 만들고 authenticate() 메소드 호출 | ||
86 | + var user = new database.UserModel({id:id}); | ||
87 | + var authenticated = user.authenticate(password, results[0]._doc.salt, results[0]._doc.hashed_password); | ||
88 | + if (authenticated) { | ||
89 | + console.log('비밀번호 일치함'); | ||
90 | + callback(null, results); | ||
91 | + } else { | ||
92 | + console.log('비밀번호 일치하지 않음'); | ||
93 | + callback(null, null); | ||
94 | + } | ||
95 | + | ||
96 | + } else { | ||
97 | + console.log("아이디와 일치하는 사용자를 찾지 못함."); | ||
98 | + callback(null, null); | ||
99 | + } | ||
100 | + | ||
101 | + }); | ||
102 | + | ||
103 | +} | ||
58 | 104 | ||
59 | module.exports = router | 105 | module.exports = router |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | var express = require('express') | 1 | var express = require('express') |
2 | -var Conn = require('../database/Connection') | 2 | +var Conn = require('../database/database') |
3 | var router = express.Router() | 3 | var router = express.Router() |
4 | 4 | ||
5 | router.get('/',function(req,res){ | 5 | router.get('/',function(req,res){ |
... | @@ -15,47 +15,66 @@ router.post('/process', function(req, res) { | ... | @@ -15,47 +15,66 @@ router.post('/process', function(req, res) { |
15 | var paramPassword = req.body.password || req.query.password; | 15 | var paramPassword = req.body.password || req.query.password; |
16 | //GET, POST 모두 고려해서 둘 다 검사 | 16 | //GET, POST 모두 고려해서 둘 다 검사 |
17 | 17 | ||
18 | - if(Conn.pool){ | 18 | + // 데이터베이스 객체 참조 |
19 | - Conn.adduser(paramName, paramId, paramPassword, function(err, addedUser) { | 19 | + var database = req.app.get('database'); |
20 | - if(err){ | 20 | + |
21 | - console.error(err.stack); | 21 | + // 데이터베이스 객체가 초기화된 경우, addUser 함수 호출하여 사용자 추가 |
22 | - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); | 22 | + if (database.db) { |
23 | - res.write('<h1>ID가 중복되었습니다. 다른 ID를 사용해주세요.</h1>'); | 23 | + addUser(database, paramId, paramPassword, paramName, function(err, addedUser) { |
24 | - res.write('<div><p>Param name : ' + paramName + '</p></div>'); | 24 | + // 동일한 id로 추가하려는 경우 에러 발생 - 클라이언트로 에러 전송 |
25 | - res.write('<div><p>Param id : ' + paramId + '</p></div>'); | 25 | + if (err) { |
26 | - res.write('<div><p>Param password : ' + paramPassword + '</p></div>'); | 26 | + console.error('사용자 추가 중 에러 발생 : ' + err.stack); |
27 | - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); | 27 | + |
28 | - res.end(); | 28 | + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); |
29 | - | 29 | + res.write('<h2>사용자 추가 중 에러 발생</h2>'); |
30 | - return; | 30 | + res.write('<p>' + err.stack + '</p>'); |
31 | + res.end(); | ||
32 | + | ||
33 | + return; | ||
31 | } | 34 | } |
32 | - if (addedUser){ | 35 | + |
33 | - console.dir(addedUser); | 36 | + // 결과 객체 있으면 성공 응답 전송 |
34 | - | 37 | + if (addedUser) { |
35 | - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); | 38 | + console.dir(addedUser); |
36 | - res.write('<h1>회원가입 성공</h1>'); | 39 | + |
37 | - res.write('<div><p>Param name : ' + paramName + '</p></div>'); | 40 | + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); |
38 | - res.write('<div><p>Param id : ' + paramId + '</p></div>'); | 41 | + res.write('<h2>사용자 추가 성공</h2>'); |
39 | - res.write('<div><p>Param password : ' + paramPassword + '</p></div>'); | 42 | + res.write("<br><br><a href='/login'>다시 로그인하기</a>"); |
40 | - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); | 43 | + res.end(); |
41 | - res.end(); | 44 | + } else { // 결과 객체가 없으면 실패 응답 전송 |
42 | - } else { | 45 | + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); |
43 | - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); | 46 | + res.write('<h2>사용자 추가 실패</h2>'); |
44 | - res.write('<h1>회원가입 실패.</h1>'); | 47 | + res.write("<br><br><a href='/signup'>다시 가입하기</a>"); |
45 | - res.write('<div><p>Param id : ' + paramId + '</p></div>'); | 48 | + res.end(); |
46 | - res.write('<div><p>Param password : ' + paramPassword + '</p></div>'); | 49 | + } |
47 | - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); | 50 | + }); |
48 | - res.end(); | 51 | + } else { // 데이터베이스 객체가 초기화되지 않은 경우 실패 응답 전송 |
49 | - } | 52 | + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); |
50 | - | 53 | + res.write('<h2>데이터베이스 연결 실패</h2>'); |
51 | - }) | 54 | + res.end(); |
52 | - }else{ | 55 | + } |
53 | - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); | 56 | + |
54 | - res.write('<h1>데이터베이스 연결 실패</h1>'); | 57 | +}); |
55 | - res.end(); | ||
56 | - } | ||
57 | 58 | ||
58 | 59 | ||
59 | -}); | 60 | +//사용자를 등록하는 함수 |
61 | +var addUser = function(database, id, password, name, callback) { | ||
62 | + console.log('addUser 호출됨.'); | ||
63 | + | ||
64 | + // UserModel 인스턴스 생성 | ||
65 | + var user = new database.UserModel({"id":id, "password":password, "name":name}); | ||
66 | + | ||
67 | + // save()로 저장 | ||
68 | + user.save(function(err) { | ||
69 | + if (err) { | ||
70 | + callback(err, null); | ||
71 | + return; | ||
72 | + } | ||
73 | + | ||
74 | + console.log("사용자 데이터 추가함."); | ||
75 | + callback(null, user); | ||
76 | + | ||
77 | + }); | ||
78 | +} | ||
60 | 79 | ||
61 | module.exports = router | 80 | module.exports = router |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -14,6 +14,25 @@ | ... | @@ -14,6 +14,25 @@ |
14 | "url": "https://opencollective.com/popperjs" | 14 | "url": "https://opencollective.com/popperjs" |
15 | } | 15 | } |
16 | }, | 16 | }, |
17 | + "node_modules/@types/node": { | ||
18 | + "version": "17.0.35", | ||
19 | + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", | ||
20 | + "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" | ||
21 | + }, | ||
22 | + "node_modules/@types/webidl-conversions": { | ||
23 | + "version": "6.1.1", | ||
24 | + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", | ||
25 | + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" | ||
26 | + }, | ||
27 | + "node_modules/@types/whatwg-url": { | ||
28 | + "version": "8.2.1", | ||
29 | + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", | ||
30 | + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", | ||
31 | + "dependencies": { | ||
32 | + "@types/node": "*", | ||
33 | + "@types/webidl-conversions": "*" | ||
34 | + } | ||
35 | + }, | ||
17 | "node_modules/accepts": { | 36 | "node_modules/accepts": { |
18 | "version": "1.3.8", | 37 | "version": "1.3.8", |
19 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", | 38 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", |
... | @@ -55,6 +74,25 @@ | ... | @@ -55,6 +74,25 @@ |
55 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", | 74 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", |
56 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" | 75 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" |
57 | }, | 76 | }, |
77 | + "node_modules/base64-js": { | ||
78 | + "version": "1.5.1", | ||
79 | + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||
80 | + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", | ||
81 | + "funding": [ | ||
82 | + { | ||
83 | + "type": "github", | ||
84 | + "url": "https://github.com/sponsors/feross" | ||
85 | + }, | ||
86 | + { | ||
87 | + "type": "patreon", | ||
88 | + "url": "https://www.patreon.com/feross" | ||
89 | + }, | ||
90 | + { | ||
91 | + "type": "consulting", | ||
92 | + "url": "https://feross.org/support" | ||
93 | + } | ||
94 | + ] | ||
95 | + }, | ||
58 | "node_modules/bignumber.js": { | 96 | "node_modules/bignumber.js": { |
59 | "version": "9.0.0", | 97 | "version": "9.0.0", |
60 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", | 98 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", |
... | @@ -107,6 +145,40 @@ | ... | @@ -107,6 +145,40 @@ |
107 | "concat-map": "0.0.1" | 145 | "concat-map": "0.0.1" |
108 | } | 146 | } |
109 | }, | 147 | }, |
148 | + "node_modules/bson": { | ||
149 | + "version": "4.6.4", | ||
150 | + "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.4.tgz", | ||
151 | + "integrity": "sha512-TdQ3FzguAu5HKPPlr0kYQCyrYUYh8tFM+CMTpxjNzVzxeiJY00Rtuj3LXLHSgiGvmaWlZ8PE+4KyM2thqE38pQ==", | ||
152 | + "dependencies": { | ||
153 | + "buffer": "^5.6.0" | ||
154 | + }, | ||
155 | + "engines": { | ||
156 | + "node": ">=6.9.0" | ||
157 | + } | ||
158 | + }, | ||
159 | + "node_modules/buffer": { | ||
160 | + "version": "5.7.1", | ||
161 | + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", | ||
162 | + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", | ||
163 | + "funding": [ | ||
164 | + { | ||
165 | + "type": "github", | ||
166 | + "url": "https://github.com/sponsors/feross" | ||
167 | + }, | ||
168 | + { | ||
169 | + "type": "patreon", | ||
170 | + "url": "https://www.patreon.com/feross" | ||
171 | + }, | ||
172 | + { | ||
173 | + "type": "consulting", | ||
174 | + "url": "https://feross.org/support" | ||
175 | + } | ||
176 | + ], | ||
177 | + "dependencies": { | ||
178 | + "base64-js": "^1.3.1", | ||
179 | + "ieee754": "^1.1.13" | ||
180 | + } | ||
181 | + }, | ||
110 | "node_modules/bytes": { | 182 | "node_modules/bytes": { |
111 | "version": "3.1.2", | 183 | "version": "3.1.2", |
112 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", | 184 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", |
... | @@ -220,6 +292,12 @@ | ... | @@ -220,6 +292,12 @@ |
220 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", | 292 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", |
221 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" | 293 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" |
222 | }, | 294 | }, |
295 | + "node_modules/crypto": { | ||
296 | + "version": "1.0.1", | ||
297 | + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", | ||
298 | + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", | ||
299 | + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." | ||
300 | + }, | ||
223 | "node_modules/debug": { | 301 | "node_modules/debug": { |
224 | "version": "2.6.9", | 302 | "version": "2.6.9", |
225 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | 303 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |
... | @@ -228,6 +306,14 @@ | ... | @@ -228,6 +306,14 @@ |
228 | "ms": "2.0.0" | 306 | "ms": "2.0.0" |
229 | } | 307 | } |
230 | }, | 308 | }, |
309 | + "node_modules/denque": { | ||
310 | + "version": "2.0.1", | ||
311 | + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", | ||
312 | + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", | ||
313 | + "engines": { | ||
314 | + "node": ">=0.10" | ||
315 | + } | ||
316 | + }, | ||
231 | "node_modules/depd": { | 317 | "node_modules/depd": { |
232 | "version": "2.0.0", | 318 | "version": "2.0.0", |
233 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", | 319 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", |
... | @@ -499,11 +585,35 @@ | ... | @@ -499,11 +585,35 @@ |
499 | "node": ">=0.10.0" | 585 | "node": ">=0.10.0" |
500 | } | 586 | } |
501 | }, | 587 | }, |
588 | + "node_modules/ieee754": { | ||
589 | + "version": "1.2.1", | ||
590 | + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", | ||
591 | + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", | ||
592 | + "funding": [ | ||
593 | + { | ||
594 | + "type": "github", | ||
595 | + "url": "https://github.com/sponsors/feross" | ||
596 | + }, | ||
597 | + { | ||
598 | + "type": "patreon", | ||
599 | + "url": "https://www.patreon.com/feross" | ||
600 | + }, | ||
601 | + { | ||
602 | + "type": "consulting", | ||
603 | + "url": "https://feross.org/support" | ||
604 | + } | ||
605 | + ] | ||
606 | + }, | ||
502 | "node_modules/inherits": { | 607 | "node_modules/inherits": { |
503 | "version": "2.0.4", | 608 | "version": "2.0.4", |
504 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | 609 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", |
505 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | 610 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" |
506 | }, | 611 | }, |
612 | + "node_modules/ip": { | ||
613 | + "version": "1.1.8", | ||
614 | + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", | ||
615 | + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" | ||
616 | + }, | ||
507 | "node_modules/ipaddr.js": { | 617 | "node_modules/ipaddr.js": { |
508 | "version": "1.9.1", | 618 | "version": "1.9.1", |
509 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", | 619 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", |
... | @@ -534,6 +644,11 @@ | ... | @@ -534,6 +644,11 @@ |
534 | "node": ">=10" | 644 | "node": ">=10" |
535 | } | 645 | } |
536 | }, | 646 | }, |
647 | + "node_modules/kareem": { | ||
648 | + "version": "2.3.5", | ||
649 | + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.5.tgz", | ||
650 | + "integrity": "sha512-qxCyQtp3ioawkiRNQr/v8xw9KIviMSSNmy+63Wubj7KmMn3g7noRXIZB4vPCAP+ETi2SR8eH6CvmlKZuGpoHOg==" | ||
651 | + }, | ||
537 | "node_modules/media-typer": { | 652 | "node_modules/media-typer": { |
538 | "version": "0.3.0", | 653 | "version": "0.3.0", |
539 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", | 654 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", |
... | @@ -542,6 +657,12 @@ | ... | @@ -542,6 +657,12 @@ |
542 | "node": ">= 0.6" | 657 | "node": ">= 0.6" |
543 | } | 658 | } |
544 | }, | 659 | }, |
660 | + "node_modules/memory-pager": { | ||
661 | + "version": "1.5.0", | ||
662 | + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", | ||
663 | + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", | ||
664 | + "optional": true | ||
665 | + }, | ||
545 | "node_modules/merge-descriptors": { | 666 | "node_modules/merge-descriptors": { |
546 | "version": "1.0.1", | 667 | "version": "1.0.1", |
547 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", | 668 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", |
... | @@ -596,11 +717,103 @@ | ... | @@ -596,11 +717,103 @@ |
596 | "node": "*" | 717 | "node": "*" |
597 | } | 718 | } |
598 | }, | 719 | }, |
720 | + "node_modules/mongodb": { | ||
721 | + "version": "4.5.0", | ||
722 | + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.5.0.tgz", | ||
723 | + "integrity": "sha512-A2l8MjEpKojnhbCM0MK3+UOGUSGvTNNSv7AkP1fsT7tkambrkkqN/5F2y+PhzsV0Nbv58u04TETpkaSEdI2zKA==", | ||
724 | + "dependencies": { | ||
725 | + "bson": "^4.6.2", | ||
726 | + "denque": "^2.0.1", | ||
727 | + "mongodb-connection-string-url": "^2.5.2", | ||
728 | + "socks": "^2.6.2" | ||
729 | + }, | ||
730 | + "engines": { | ||
731 | + "node": ">=12.9.0" | ||
732 | + }, | ||
733 | + "optionalDependencies": { | ||
734 | + "saslprep": "^1.0.3" | ||
735 | + } | ||
736 | + }, | ||
737 | + "node_modules/mongodb-connection-string-url": { | ||
738 | + "version": "2.5.2", | ||
739 | + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz", | ||
740 | + "integrity": "sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA==", | ||
741 | + "dependencies": { | ||
742 | + "@types/whatwg-url": "^8.2.1", | ||
743 | + "whatwg-url": "^11.0.0" | ||
744 | + } | ||
745 | + }, | ||
746 | + "node_modules/mongoose": { | ||
747 | + "version": "6.3.4", | ||
748 | + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.3.4.tgz", | ||
749 | + "integrity": "sha512-UP0azyGMdY+2YNbJUHeHhnVw5vPzCqs4GQDUwHkilif/rwmSZktUQhQWMp1pUgRNeF2JC30vWGLrInZxD7K/Qw==", | ||
750 | + "dependencies": { | ||
751 | + "bson": "^4.6.2", | ||
752 | + "kareem": "2.3.5", | ||
753 | + "mongodb": "4.5.0", | ||
754 | + "mpath": "0.9.0", | ||
755 | + "mquery": "4.0.3", | ||
756 | + "ms": "2.1.3", | ||
757 | + "sift": "16.0.0" | ||
758 | + }, | ||
759 | + "engines": { | ||
760 | + "node": ">=12.0.0" | ||
761 | + }, | ||
762 | + "funding": { | ||
763 | + "type": "opencollective", | ||
764 | + "url": "https://opencollective.com/mongoose" | ||
765 | + } | ||
766 | + }, | ||
767 | + "node_modules/mongoose/node_modules/ms": { | ||
768 | + "version": "2.1.3", | ||
769 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | ||
770 | + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" | ||
771 | + }, | ||
599 | "node_modules/mout": { | 772 | "node_modules/mout": { |
600 | "version": "0.12.0", | 773 | "version": "0.12.0", |
601 | "resolved": "https://registry.npmjs.org/mout/-/mout-0.12.0.tgz", | 774 | "resolved": "https://registry.npmjs.org/mout/-/mout-0.12.0.tgz", |
602 | "integrity": "sha1-bVskLuMx+dBMaOWPd6kaMGDoyss=" | 775 | "integrity": "sha1-bVskLuMx+dBMaOWPd6kaMGDoyss=" |
603 | }, | 776 | }, |
777 | + "node_modules/mpath": { | ||
778 | + "version": "0.9.0", | ||
779 | + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", | ||
780 | + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", | ||
781 | + "engines": { | ||
782 | + "node": ">=4.0.0" | ||
783 | + } | ||
784 | + }, | ||
785 | + "node_modules/mquery": { | ||
786 | + "version": "4.0.3", | ||
787 | + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", | ||
788 | + "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", | ||
789 | + "dependencies": { | ||
790 | + "debug": "4.x" | ||
791 | + }, | ||
792 | + "engines": { | ||
793 | + "node": ">=12.0.0" | ||
794 | + } | ||
795 | + }, | ||
796 | + "node_modules/mquery/node_modules/debug": { | ||
797 | + "version": "4.3.4", | ||
798 | + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", | ||
799 | + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", | ||
800 | + "dependencies": { | ||
801 | + "ms": "2.1.2" | ||
802 | + }, | ||
803 | + "engines": { | ||
804 | + "node": ">=6.0" | ||
805 | + }, | ||
806 | + "peerDependenciesMeta": { | ||
807 | + "supports-color": { | ||
808 | + "optional": true | ||
809 | + } | ||
810 | + } | ||
811 | + }, | ||
812 | + "node_modules/mquery/node_modules/ms": { | ||
813 | + "version": "2.1.2", | ||
814 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||
815 | + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | ||
816 | + }, | ||
604 | "node_modules/ms": { | 817 | "node_modules/ms": { |
605 | "version": "2.0.0", | 818 | "version": "2.0.0", |
606 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | 819 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", |
... | @@ -707,6 +920,14 @@ | ... | @@ -707,6 +920,14 @@ |
707 | "node": ">= 0.10" | 920 | "node": ">= 0.10" |
708 | } | 921 | } |
709 | }, | 922 | }, |
923 | + "node_modules/punycode": { | ||
924 | + "version": "2.1.1", | ||
925 | + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | ||
926 | + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", | ||
927 | + "engines": { | ||
928 | + "node": ">=6" | ||
929 | + } | ||
930 | + }, | ||
710 | "node_modules/qs": { | 931 | "node_modules/qs": { |
711 | "version": "6.10.3", | 932 | "version": "6.10.3", |
712 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", | 933 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", |
... | @@ -794,6 +1015,18 @@ | ... | @@ -794,6 +1015,18 @@ |
794 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | 1015 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", |
795 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" | 1016 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" |
796 | }, | 1017 | }, |
1018 | + "node_modules/saslprep": { | ||
1019 | + "version": "1.0.3", | ||
1020 | + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", | ||
1021 | + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", | ||
1022 | + "optional": true, | ||
1023 | + "dependencies": { | ||
1024 | + "sparse-bitfield": "^3.0.3" | ||
1025 | + }, | ||
1026 | + "engines": { | ||
1027 | + "node": ">=6" | ||
1028 | + } | ||
1029 | + }, | ||
797 | "node_modules/send": { | 1030 | "node_modules/send": { |
798 | "version": "0.18.0", | 1031 | "version": "0.18.0", |
799 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", | 1032 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", |
... | @@ -854,6 +1087,42 @@ | ... | @@ -854,6 +1087,42 @@ |
854 | "url": "https://github.com/sponsors/ljharb" | 1087 | "url": "https://github.com/sponsors/ljharb" |
855 | } | 1088 | } |
856 | }, | 1089 | }, |
1090 | + "node_modules/sift": { | ||
1091 | + "version": "16.0.0", | ||
1092 | + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", | ||
1093 | + "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==" | ||
1094 | + }, | ||
1095 | + "node_modules/smart-buffer": { | ||
1096 | + "version": "4.2.0", | ||
1097 | + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", | ||
1098 | + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", | ||
1099 | + "engines": { | ||
1100 | + "node": ">= 6.0.0", | ||
1101 | + "npm": ">= 3.0.0" | ||
1102 | + } | ||
1103 | + }, | ||
1104 | + "node_modules/socks": { | ||
1105 | + "version": "2.6.2", | ||
1106 | + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", | ||
1107 | + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", | ||
1108 | + "dependencies": { | ||
1109 | + "ip": "^1.1.5", | ||
1110 | + "smart-buffer": "^4.2.0" | ||
1111 | + }, | ||
1112 | + "engines": { | ||
1113 | + "node": ">= 10.13.0", | ||
1114 | + "npm": ">= 3.0.0" | ||
1115 | + } | ||
1116 | + }, | ||
1117 | + "node_modules/sparse-bitfield": { | ||
1118 | + "version": "3.0.3", | ||
1119 | + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", | ||
1120 | + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", | ||
1121 | + "optional": true, | ||
1122 | + "dependencies": { | ||
1123 | + "memory-pager": "^1.0.2" | ||
1124 | + } | ||
1125 | + }, | ||
857 | "node_modules/sqlstring": { | 1126 | "node_modules/sqlstring": { |
858 | "version": "2.3.1", | 1127 | "version": "2.3.1", |
859 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", | 1128 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", |
... | @@ -902,6 +1171,17 @@ | ... | @@ -902,6 +1171,17 @@ |
902 | "node": ">=0.6" | 1171 | "node": ">=0.6" |
903 | } | 1172 | } |
904 | }, | 1173 | }, |
1174 | + "node_modules/tr46": { | ||
1175 | + "version": "3.0.0", | ||
1176 | + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", | ||
1177 | + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", | ||
1178 | + "dependencies": { | ||
1179 | + "punycode": "^2.1.1" | ||
1180 | + }, | ||
1181 | + "engines": { | ||
1182 | + "node": ">=12" | ||
1183 | + } | ||
1184 | + }, | ||
905 | "node_modules/type-is": { | 1185 | "node_modules/type-is": { |
906 | "version": "1.6.18", | 1186 | "version": "1.6.18", |
907 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", | 1187 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", |
... | @@ -966,6 +1246,26 @@ | ... | @@ -966,6 +1246,26 @@ |
966 | "engines": { | 1246 | "engines": { |
967 | "node": ">= 0.8" | 1247 | "node": ">= 0.8" |
968 | } | 1248 | } |
1249 | + }, | ||
1250 | + "node_modules/webidl-conversions": { | ||
1251 | + "version": "7.0.0", | ||
1252 | + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", | ||
1253 | + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", | ||
1254 | + "engines": { | ||
1255 | + "node": ">=12" | ||
1256 | + } | ||
1257 | + }, | ||
1258 | + "node_modules/whatwg-url": { | ||
1259 | + "version": "11.0.0", | ||
1260 | + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", | ||
1261 | + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", | ||
1262 | + "dependencies": { | ||
1263 | + "tr46": "^3.0.0", | ||
1264 | + "webidl-conversions": "^7.0.0" | ||
1265 | + }, | ||
1266 | + "engines": { | ||
1267 | + "node": ">=12" | ||
1268 | + } | ||
969 | } | 1269 | } |
970 | } | 1270 | } |
971 | } | 1271 | } | ... | ... |
... | @@ -12,11 +12,13 @@ | ... | @@ -12,11 +12,13 @@ |
12 | "body-parser": "^1.20.0", | 12 | "body-parser": "^1.20.0", |
13 | "bootstrap": "^5.1.3", | 13 | "bootstrap": "^5.1.3", |
14 | "cookie-parser": "^1.4.6", | 14 | "cookie-parser": "^1.4.6", |
15 | + "crypto": "^1.0.1", | ||
15 | "ejs": "^3.1.7", | 16 | "ejs": "^3.1.7", |
16 | "express": "^4.18.1", | 17 | "express": "^4.18.1", |
17 | "express-error-handler": "^1.1.0", | 18 | "express-error-handler": "^1.1.0", |
18 | "express-session": "^1.17.3", | 19 | "express-session": "^1.17.3", |
19 | "http": "^0.0.1-security", | 20 | "http": "^0.0.1-security", |
21 | + "mongoose": "^6.3.4", | ||
20 | "mysql": "^2.18.1", | 22 | "mysql": "^2.18.1", |
21 | "path": "^0.12.7", | 23 | "path": "^0.12.7", |
22 | "serve-static": "^1.15.0" | 24 | "serve-static": "^1.15.0" |
... | @@ -32,6 +34,25 @@ | ... | @@ -32,6 +34,25 @@ |
32 | "url": "https://opencollective.com/popperjs" | 34 | "url": "https://opencollective.com/popperjs" |
33 | } | 35 | } |
34 | }, | 36 | }, |
37 | + "node_modules/@types/node": { | ||
38 | + "version": "17.0.35", | ||
39 | + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", | ||
40 | + "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" | ||
41 | + }, | ||
42 | + "node_modules/@types/webidl-conversions": { | ||
43 | + "version": "6.1.1", | ||
44 | + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", | ||
45 | + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" | ||
46 | + }, | ||
47 | + "node_modules/@types/whatwg-url": { | ||
48 | + "version": "8.2.1", | ||
49 | + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", | ||
50 | + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", | ||
51 | + "dependencies": { | ||
52 | + "@types/node": "*", | ||
53 | + "@types/webidl-conversions": "*" | ||
54 | + } | ||
55 | + }, | ||
35 | "node_modules/accepts": { | 56 | "node_modules/accepts": { |
36 | "version": "1.3.8", | 57 | "version": "1.3.8", |
37 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", | 58 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", |
... | @@ -73,6 +94,25 @@ | ... | @@ -73,6 +94,25 @@ |
73 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", | 94 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", |
74 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" | 95 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" |
75 | }, | 96 | }, |
97 | + "node_modules/base64-js": { | ||
98 | + "version": "1.5.1", | ||
99 | + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||
100 | + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", | ||
101 | + "funding": [ | ||
102 | + { | ||
103 | + "type": "github", | ||
104 | + "url": "https://github.com/sponsors/feross" | ||
105 | + }, | ||
106 | + { | ||
107 | + "type": "patreon", | ||
108 | + "url": "https://www.patreon.com/feross" | ||
109 | + }, | ||
110 | + { | ||
111 | + "type": "consulting", | ||
112 | + "url": "https://feross.org/support" | ||
113 | + } | ||
114 | + ] | ||
115 | + }, | ||
76 | "node_modules/bignumber.js": { | 116 | "node_modules/bignumber.js": { |
77 | "version": "9.0.0", | 117 | "version": "9.0.0", |
78 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", | 118 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", |
... | @@ -125,6 +165,40 @@ | ... | @@ -125,6 +165,40 @@ |
125 | "concat-map": "0.0.1" | 165 | "concat-map": "0.0.1" |
126 | } | 166 | } |
127 | }, | 167 | }, |
168 | + "node_modules/bson": { | ||
169 | + "version": "4.6.4", | ||
170 | + "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.4.tgz", | ||
171 | + "integrity": "sha512-TdQ3FzguAu5HKPPlr0kYQCyrYUYh8tFM+CMTpxjNzVzxeiJY00Rtuj3LXLHSgiGvmaWlZ8PE+4KyM2thqE38pQ==", | ||
172 | + "dependencies": { | ||
173 | + "buffer": "^5.6.0" | ||
174 | + }, | ||
175 | + "engines": { | ||
176 | + "node": ">=6.9.0" | ||
177 | + } | ||
178 | + }, | ||
179 | + "node_modules/buffer": { | ||
180 | + "version": "5.7.1", | ||
181 | + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", | ||
182 | + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", | ||
183 | + "funding": [ | ||
184 | + { | ||
185 | + "type": "github", | ||
186 | + "url": "https://github.com/sponsors/feross" | ||
187 | + }, | ||
188 | + { | ||
189 | + "type": "patreon", | ||
190 | + "url": "https://www.patreon.com/feross" | ||
191 | + }, | ||
192 | + { | ||
193 | + "type": "consulting", | ||
194 | + "url": "https://feross.org/support" | ||
195 | + } | ||
196 | + ], | ||
197 | + "dependencies": { | ||
198 | + "base64-js": "^1.3.1", | ||
199 | + "ieee754": "^1.1.13" | ||
200 | + } | ||
201 | + }, | ||
128 | "node_modules/bytes": { | 202 | "node_modules/bytes": { |
129 | "version": "3.1.2", | 203 | "version": "3.1.2", |
130 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", | 204 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", |
... | @@ -238,6 +312,12 @@ | ... | @@ -238,6 +312,12 @@ |
238 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", | 312 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", |
239 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" | 313 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" |
240 | }, | 314 | }, |
315 | + "node_modules/crypto": { | ||
316 | + "version": "1.0.1", | ||
317 | + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", | ||
318 | + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", | ||
319 | + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." | ||
320 | + }, | ||
241 | "node_modules/debug": { | 321 | "node_modules/debug": { |
242 | "version": "2.6.9", | 322 | "version": "2.6.9", |
243 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | 323 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |
... | @@ -246,6 +326,14 @@ | ... | @@ -246,6 +326,14 @@ |
246 | "ms": "2.0.0" | 326 | "ms": "2.0.0" |
247 | } | 327 | } |
248 | }, | 328 | }, |
329 | + "node_modules/denque": { | ||
330 | + "version": "2.0.1", | ||
331 | + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", | ||
332 | + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", | ||
333 | + "engines": { | ||
334 | + "node": ">=0.10" | ||
335 | + } | ||
336 | + }, | ||
249 | "node_modules/depd": { | 337 | "node_modules/depd": { |
250 | "version": "2.0.0", | 338 | "version": "2.0.0", |
251 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", | 339 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", |
... | @@ -517,11 +605,35 @@ | ... | @@ -517,11 +605,35 @@ |
517 | "node": ">=0.10.0" | 605 | "node": ">=0.10.0" |
518 | } | 606 | } |
519 | }, | 607 | }, |
608 | + "node_modules/ieee754": { | ||
609 | + "version": "1.2.1", | ||
610 | + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", | ||
611 | + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", | ||
612 | + "funding": [ | ||
613 | + { | ||
614 | + "type": "github", | ||
615 | + "url": "https://github.com/sponsors/feross" | ||
616 | + }, | ||
617 | + { | ||
618 | + "type": "patreon", | ||
619 | + "url": "https://www.patreon.com/feross" | ||
620 | + }, | ||
621 | + { | ||
622 | + "type": "consulting", | ||
623 | + "url": "https://feross.org/support" | ||
624 | + } | ||
625 | + ] | ||
626 | + }, | ||
520 | "node_modules/inherits": { | 627 | "node_modules/inherits": { |
521 | "version": "2.0.4", | 628 | "version": "2.0.4", |
522 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | 629 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", |
523 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | 630 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" |
524 | }, | 631 | }, |
632 | + "node_modules/ip": { | ||
633 | + "version": "1.1.8", | ||
634 | + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", | ||
635 | + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" | ||
636 | + }, | ||
525 | "node_modules/ipaddr.js": { | 637 | "node_modules/ipaddr.js": { |
526 | "version": "1.9.1", | 638 | "version": "1.9.1", |
527 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", | 639 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", |
... | @@ -552,6 +664,11 @@ | ... | @@ -552,6 +664,11 @@ |
552 | "node": ">=10" | 664 | "node": ">=10" |
553 | } | 665 | } |
554 | }, | 666 | }, |
667 | + "node_modules/kareem": { | ||
668 | + "version": "2.3.5", | ||
669 | + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.5.tgz", | ||
670 | + "integrity": "sha512-qxCyQtp3ioawkiRNQr/v8xw9KIviMSSNmy+63Wubj7KmMn3g7noRXIZB4vPCAP+ETi2SR8eH6CvmlKZuGpoHOg==" | ||
671 | + }, | ||
555 | "node_modules/media-typer": { | 672 | "node_modules/media-typer": { |
556 | "version": "0.3.0", | 673 | "version": "0.3.0", |
557 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", | 674 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", |
... | @@ -560,6 +677,12 @@ | ... | @@ -560,6 +677,12 @@ |
560 | "node": ">= 0.6" | 677 | "node": ">= 0.6" |
561 | } | 678 | } |
562 | }, | 679 | }, |
680 | + "node_modules/memory-pager": { | ||
681 | + "version": "1.5.0", | ||
682 | + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", | ||
683 | + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", | ||
684 | + "optional": true | ||
685 | + }, | ||
563 | "node_modules/merge-descriptors": { | 686 | "node_modules/merge-descriptors": { |
564 | "version": "1.0.1", | 687 | "version": "1.0.1", |
565 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", | 688 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", |
... | @@ -614,11 +737,103 @@ | ... | @@ -614,11 +737,103 @@ |
614 | "node": "*" | 737 | "node": "*" |
615 | } | 738 | } |
616 | }, | 739 | }, |
740 | + "node_modules/mongodb": { | ||
741 | + "version": "4.5.0", | ||
742 | + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.5.0.tgz", | ||
743 | + "integrity": "sha512-A2l8MjEpKojnhbCM0MK3+UOGUSGvTNNSv7AkP1fsT7tkambrkkqN/5F2y+PhzsV0Nbv58u04TETpkaSEdI2zKA==", | ||
744 | + "dependencies": { | ||
745 | + "bson": "^4.6.2", | ||
746 | + "denque": "^2.0.1", | ||
747 | + "mongodb-connection-string-url": "^2.5.2", | ||
748 | + "socks": "^2.6.2" | ||
749 | + }, | ||
750 | + "engines": { | ||
751 | + "node": ">=12.9.0" | ||
752 | + }, | ||
753 | + "optionalDependencies": { | ||
754 | + "saslprep": "^1.0.3" | ||
755 | + } | ||
756 | + }, | ||
757 | + "node_modules/mongodb-connection-string-url": { | ||
758 | + "version": "2.5.2", | ||
759 | + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz", | ||
760 | + "integrity": "sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA==", | ||
761 | + "dependencies": { | ||
762 | + "@types/whatwg-url": "^8.2.1", | ||
763 | + "whatwg-url": "^11.0.0" | ||
764 | + } | ||
765 | + }, | ||
766 | + "node_modules/mongoose": { | ||
767 | + "version": "6.3.4", | ||
768 | + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.3.4.tgz", | ||
769 | + "integrity": "sha512-UP0azyGMdY+2YNbJUHeHhnVw5vPzCqs4GQDUwHkilif/rwmSZktUQhQWMp1pUgRNeF2JC30vWGLrInZxD7K/Qw==", | ||
770 | + "dependencies": { | ||
771 | + "bson": "^4.6.2", | ||
772 | + "kareem": "2.3.5", | ||
773 | + "mongodb": "4.5.0", | ||
774 | + "mpath": "0.9.0", | ||
775 | + "mquery": "4.0.3", | ||
776 | + "ms": "2.1.3", | ||
777 | + "sift": "16.0.0" | ||
778 | + }, | ||
779 | + "engines": { | ||
780 | + "node": ">=12.0.0" | ||
781 | + }, | ||
782 | + "funding": { | ||
783 | + "type": "opencollective", | ||
784 | + "url": "https://opencollective.com/mongoose" | ||
785 | + } | ||
786 | + }, | ||
787 | + "node_modules/mongoose/node_modules/ms": { | ||
788 | + "version": "2.1.3", | ||
789 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | ||
790 | + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" | ||
791 | + }, | ||
617 | "node_modules/mout": { | 792 | "node_modules/mout": { |
618 | "version": "0.12.0", | 793 | "version": "0.12.0", |
619 | "resolved": "https://registry.npmjs.org/mout/-/mout-0.12.0.tgz", | 794 | "resolved": "https://registry.npmjs.org/mout/-/mout-0.12.0.tgz", |
620 | "integrity": "sha1-bVskLuMx+dBMaOWPd6kaMGDoyss=" | 795 | "integrity": "sha1-bVskLuMx+dBMaOWPd6kaMGDoyss=" |
621 | }, | 796 | }, |
797 | + "node_modules/mpath": { | ||
798 | + "version": "0.9.0", | ||
799 | + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", | ||
800 | + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", | ||
801 | + "engines": { | ||
802 | + "node": ">=4.0.0" | ||
803 | + } | ||
804 | + }, | ||
805 | + "node_modules/mquery": { | ||
806 | + "version": "4.0.3", | ||
807 | + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", | ||
808 | + "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", | ||
809 | + "dependencies": { | ||
810 | + "debug": "4.x" | ||
811 | + }, | ||
812 | + "engines": { | ||
813 | + "node": ">=12.0.0" | ||
814 | + } | ||
815 | + }, | ||
816 | + "node_modules/mquery/node_modules/debug": { | ||
817 | + "version": "4.3.4", | ||
818 | + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", | ||
819 | + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", | ||
820 | + "dependencies": { | ||
821 | + "ms": "2.1.2" | ||
822 | + }, | ||
823 | + "engines": { | ||
824 | + "node": ">=6.0" | ||
825 | + }, | ||
826 | + "peerDependenciesMeta": { | ||
827 | + "supports-color": { | ||
828 | + "optional": true | ||
829 | + } | ||
830 | + } | ||
831 | + }, | ||
832 | + "node_modules/mquery/node_modules/ms": { | ||
833 | + "version": "2.1.2", | ||
834 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||
835 | + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | ||
836 | + }, | ||
622 | "node_modules/ms": { | 837 | "node_modules/ms": { |
623 | "version": "2.0.0", | 838 | "version": "2.0.0", |
624 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | 839 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", |
... | @@ -725,6 +940,14 @@ | ... | @@ -725,6 +940,14 @@ |
725 | "node": ">= 0.10" | 940 | "node": ">= 0.10" |
726 | } | 941 | } |
727 | }, | 942 | }, |
943 | + "node_modules/punycode": { | ||
944 | + "version": "2.1.1", | ||
945 | + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | ||
946 | + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", | ||
947 | + "engines": { | ||
948 | + "node": ">=6" | ||
949 | + } | ||
950 | + }, | ||
728 | "node_modules/qs": { | 951 | "node_modules/qs": { |
729 | "version": "6.10.3", | 952 | "version": "6.10.3", |
730 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", | 953 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", |
... | @@ -812,6 +1035,18 @@ | ... | @@ -812,6 +1035,18 @@ |
812 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | 1035 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", |
813 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" | 1036 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" |
814 | }, | 1037 | }, |
1038 | + "node_modules/saslprep": { | ||
1039 | + "version": "1.0.3", | ||
1040 | + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", | ||
1041 | + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", | ||
1042 | + "optional": true, | ||
1043 | + "dependencies": { | ||
1044 | + "sparse-bitfield": "^3.0.3" | ||
1045 | + }, | ||
1046 | + "engines": { | ||
1047 | + "node": ">=6" | ||
1048 | + } | ||
1049 | + }, | ||
815 | "node_modules/send": { | 1050 | "node_modules/send": { |
816 | "version": "0.18.0", | 1051 | "version": "0.18.0", |
817 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", | 1052 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", |
... | @@ -872,6 +1107,42 @@ | ... | @@ -872,6 +1107,42 @@ |
872 | "url": "https://github.com/sponsors/ljharb" | 1107 | "url": "https://github.com/sponsors/ljharb" |
873 | } | 1108 | } |
874 | }, | 1109 | }, |
1110 | + "node_modules/sift": { | ||
1111 | + "version": "16.0.0", | ||
1112 | + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", | ||
1113 | + "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==" | ||
1114 | + }, | ||
1115 | + "node_modules/smart-buffer": { | ||
1116 | + "version": "4.2.0", | ||
1117 | + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", | ||
1118 | + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", | ||
1119 | + "engines": { | ||
1120 | + "node": ">= 6.0.0", | ||
1121 | + "npm": ">= 3.0.0" | ||
1122 | + } | ||
1123 | + }, | ||
1124 | + "node_modules/socks": { | ||
1125 | + "version": "2.6.2", | ||
1126 | + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", | ||
1127 | + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", | ||
1128 | + "dependencies": { | ||
1129 | + "ip": "^1.1.5", | ||
1130 | + "smart-buffer": "^4.2.0" | ||
1131 | + }, | ||
1132 | + "engines": { | ||
1133 | + "node": ">= 10.13.0", | ||
1134 | + "npm": ">= 3.0.0" | ||
1135 | + } | ||
1136 | + }, | ||
1137 | + "node_modules/sparse-bitfield": { | ||
1138 | + "version": "3.0.3", | ||
1139 | + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", | ||
1140 | + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", | ||
1141 | + "optional": true, | ||
1142 | + "dependencies": { | ||
1143 | + "memory-pager": "^1.0.2" | ||
1144 | + } | ||
1145 | + }, | ||
875 | "node_modules/sqlstring": { | 1146 | "node_modules/sqlstring": { |
876 | "version": "2.3.1", | 1147 | "version": "2.3.1", |
877 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", | 1148 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", |
... | @@ -920,6 +1191,17 @@ | ... | @@ -920,6 +1191,17 @@ |
920 | "node": ">=0.6" | 1191 | "node": ">=0.6" |
921 | } | 1192 | } |
922 | }, | 1193 | }, |
1194 | + "node_modules/tr46": { | ||
1195 | + "version": "3.0.0", | ||
1196 | + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", | ||
1197 | + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", | ||
1198 | + "dependencies": { | ||
1199 | + "punycode": "^2.1.1" | ||
1200 | + }, | ||
1201 | + "engines": { | ||
1202 | + "node": ">=12" | ||
1203 | + } | ||
1204 | + }, | ||
923 | "node_modules/type-is": { | 1205 | "node_modules/type-is": { |
924 | "version": "1.6.18", | 1206 | "version": "1.6.18", |
925 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", | 1207 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", |
... | @@ -984,6 +1266,26 @@ | ... | @@ -984,6 +1266,26 @@ |
984 | "engines": { | 1266 | "engines": { |
985 | "node": ">= 0.8" | 1267 | "node": ">= 0.8" |
986 | } | 1268 | } |
1269 | + }, | ||
1270 | + "node_modules/webidl-conversions": { | ||
1271 | + "version": "7.0.0", | ||
1272 | + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", | ||
1273 | + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", | ||
1274 | + "engines": { | ||
1275 | + "node": ">=12" | ||
1276 | + } | ||
1277 | + }, | ||
1278 | + "node_modules/whatwg-url": { | ||
1279 | + "version": "11.0.0", | ||
1280 | + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", | ||
1281 | + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", | ||
1282 | + "dependencies": { | ||
1283 | + "tr46": "^3.0.0", | ||
1284 | + "webidl-conversions": "^7.0.0" | ||
1285 | + }, | ||
1286 | + "engines": { | ||
1287 | + "node": ">=12" | ||
1288 | + } | ||
987 | } | 1289 | } |
988 | }, | 1290 | }, |
989 | "dependencies": { | 1291 | "dependencies": { |
... | @@ -993,6 +1295,25 @@ | ... | @@ -993,6 +1295,25 @@ |
993 | "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", | 1295 | "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", |
994 | "peer": true | 1296 | "peer": true |
995 | }, | 1297 | }, |
1298 | + "@types/node": { | ||
1299 | + "version": "17.0.35", | ||
1300 | + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", | ||
1301 | + "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" | ||
1302 | + }, | ||
1303 | + "@types/webidl-conversions": { | ||
1304 | + "version": "6.1.1", | ||
1305 | + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", | ||
1306 | + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" | ||
1307 | + }, | ||
1308 | + "@types/whatwg-url": { | ||
1309 | + "version": "8.2.1", | ||
1310 | + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", | ||
1311 | + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", | ||
1312 | + "requires": { | ||
1313 | + "@types/node": "*", | ||
1314 | + "@types/webidl-conversions": "*" | ||
1315 | + } | ||
1316 | + }, | ||
996 | "accepts": { | 1317 | "accepts": { |
997 | "version": "1.3.8", | 1318 | "version": "1.3.8", |
998 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", | 1319 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", |
... | @@ -1025,6 +1346,11 @@ | ... | @@ -1025,6 +1346,11 @@ |
1025 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", | 1346 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", |
1026 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" | 1347 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" |
1027 | }, | 1348 | }, |
1349 | + "base64-js": { | ||
1350 | + "version": "1.5.1", | ||
1351 | + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||
1352 | + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" | ||
1353 | + }, | ||
1028 | "bignumber.js": { | 1354 | "bignumber.js": { |
1029 | "version": "9.0.0", | 1355 | "version": "9.0.0", |
1030 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", | 1356 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", |
... | @@ -1064,6 +1390,23 @@ | ... | @@ -1064,6 +1390,23 @@ |
1064 | "concat-map": "0.0.1" | 1390 | "concat-map": "0.0.1" |
1065 | } | 1391 | } |
1066 | }, | 1392 | }, |
1393 | + "bson": { | ||
1394 | + "version": "4.6.4", | ||
1395 | + "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.4.tgz", | ||
1396 | + "integrity": "sha512-TdQ3FzguAu5HKPPlr0kYQCyrYUYh8tFM+CMTpxjNzVzxeiJY00Rtuj3LXLHSgiGvmaWlZ8PE+4KyM2thqE38pQ==", | ||
1397 | + "requires": { | ||
1398 | + "buffer": "^5.6.0" | ||
1399 | + } | ||
1400 | + }, | ||
1401 | + "buffer": { | ||
1402 | + "version": "5.7.1", | ||
1403 | + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", | ||
1404 | + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", | ||
1405 | + "requires": { | ||
1406 | + "base64-js": "^1.3.1", | ||
1407 | + "ieee754": "^1.1.13" | ||
1408 | + } | ||
1409 | + }, | ||
1067 | "bytes": { | 1410 | "bytes": { |
1068 | "version": "3.1.2", | 1411 | "version": "3.1.2", |
1069 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", | 1412 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", |
... | @@ -1149,6 +1492,11 @@ | ... | @@ -1149,6 +1492,11 @@ |
1149 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", | 1492 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", |
1150 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" | 1493 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" |
1151 | }, | 1494 | }, |
1495 | + "crypto": { | ||
1496 | + "version": "1.0.1", | ||
1497 | + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", | ||
1498 | + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" | ||
1499 | + }, | ||
1152 | "debug": { | 1500 | "debug": { |
1153 | "version": "2.6.9", | 1501 | "version": "2.6.9", |
1154 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | 1502 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |
... | @@ -1157,6 +1505,11 @@ | ... | @@ -1157,6 +1505,11 @@ |
1157 | "ms": "2.0.0" | 1505 | "ms": "2.0.0" |
1158 | } | 1506 | } |
1159 | }, | 1507 | }, |
1508 | + "denque": { | ||
1509 | + "version": "2.0.1", | ||
1510 | + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", | ||
1511 | + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" | ||
1512 | + }, | ||
1160 | "depd": { | 1513 | "depd": { |
1161 | "version": "2.0.0", | 1514 | "version": "2.0.0", |
1162 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", | 1515 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", |
... | @@ -1371,11 +1724,21 @@ | ... | @@ -1371,11 +1724,21 @@ |
1371 | "safer-buffer": ">= 2.1.2 < 3" | 1724 | "safer-buffer": ">= 2.1.2 < 3" |
1372 | } | 1725 | } |
1373 | }, | 1726 | }, |
1727 | + "ieee754": { | ||
1728 | + "version": "1.2.1", | ||
1729 | + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", | ||
1730 | + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" | ||
1731 | + }, | ||
1374 | "inherits": { | 1732 | "inherits": { |
1375 | "version": "2.0.4", | 1733 | "version": "2.0.4", |
1376 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | 1734 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", |
1377 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | 1735 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" |
1378 | }, | 1736 | }, |
1737 | + "ip": { | ||
1738 | + "version": "1.1.8", | ||
1739 | + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", | ||
1740 | + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" | ||
1741 | + }, | ||
1379 | "ipaddr.js": { | 1742 | "ipaddr.js": { |
1380 | "version": "1.9.1", | 1743 | "version": "1.9.1", |
1381 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", | 1744 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", |
... | @@ -1397,11 +1760,22 @@ | ... | @@ -1397,11 +1760,22 @@ |
1397 | "minimatch": "^3.0.4" | 1760 | "minimatch": "^3.0.4" |
1398 | } | 1761 | } |
1399 | }, | 1762 | }, |
1763 | + "kareem": { | ||
1764 | + "version": "2.3.5", | ||
1765 | + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.5.tgz", | ||
1766 | + "integrity": "sha512-qxCyQtp3ioawkiRNQr/v8xw9KIviMSSNmy+63Wubj7KmMn3g7noRXIZB4vPCAP+ETi2SR8eH6CvmlKZuGpoHOg==" | ||
1767 | + }, | ||
1400 | "media-typer": { | 1768 | "media-typer": { |
1401 | "version": "0.3.0", | 1769 | "version": "0.3.0", |
1402 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", | 1770 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", |
1403 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" | 1771 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" |
1404 | }, | 1772 | }, |
1773 | + "memory-pager": { | ||
1774 | + "version": "1.5.0", | ||
1775 | + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", | ||
1776 | + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", | ||
1777 | + "optional": true | ||
1778 | + }, | ||
1405 | "merge-descriptors": { | 1779 | "merge-descriptors": { |
1406 | "version": "1.0.1", | 1780 | "version": "1.0.1", |
1407 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", | 1781 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", |
... | @@ -1438,11 +1812,81 @@ | ... | @@ -1438,11 +1812,81 @@ |
1438 | "brace-expansion": "^1.1.7" | 1812 | "brace-expansion": "^1.1.7" |
1439 | } | 1813 | } |
1440 | }, | 1814 | }, |
1815 | + "mongodb": { | ||
1816 | + "version": "4.5.0", | ||
1817 | + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.5.0.tgz", | ||
1818 | + "integrity": "sha512-A2l8MjEpKojnhbCM0MK3+UOGUSGvTNNSv7AkP1fsT7tkambrkkqN/5F2y+PhzsV0Nbv58u04TETpkaSEdI2zKA==", | ||
1819 | + "requires": { | ||
1820 | + "bson": "^4.6.2", | ||
1821 | + "denque": "^2.0.1", | ||
1822 | + "mongodb-connection-string-url": "^2.5.2", | ||
1823 | + "saslprep": "^1.0.3", | ||
1824 | + "socks": "^2.6.2" | ||
1825 | + } | ||
1826 | + }, | ||
1827 | + "mongodb-connection-string-url": { | ||
1828 | + "version": "2.5.2", | ||
1829 | + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz", | ||
1830 | + "integrity": "sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA==", | ||
1831 | + "requires": { | ||
1832 | + "@types/whatwg-url": "^8.2.1", | ||
1833 | + "whatwg-url": "^11.0.0" | ||
1834 | + } | ||
1835 | + }, | ||
1836 | + "mongoose": { | ||
1837 | + "version": "6.3.4", | ||
1838 | + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.3.4.tgz", | ||
1839 | + "integrity": "sha512-UP0azyGMdY+2YNbJUHeHhnVw5vPzCqs4GQDUwHkilif/rwmSZktUQhQWMp1pUgRNeF2JC30vWGLrInZxD7K/Qw==", | ||
1840 | + "requires": { | ||
1841 | + "bson": "^4.6.2", | ||
1842 | + "kareem": "2.3.5", | ||
1843 | + "mongodb": "4.5.0", | ||
1844 | + "mpath": "0.9.0", | ||
1845 | + "mquery": "4.0.3", | ||
1846 | + "ms": "2.1.3", | ||
1847 | + "sift": "16.0.0" | ||
1848 | + }, | ||
1849 | + "dependencies": { | ||
1850 | + "ms": { | ||
1851 | + "version": "2.1.3", | ||
1852 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | ||
1853 | + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" | ||
1854 | + } | ||
1855 | + } | ||
1856 | + }, | ||
1441 | "mout": { | 1857 | "mout": { |
1442 | "version": "0.12.0", | 1858 | "version": "0.12.0", |
1443 | "resolved": "https://registry.npmjs.org/mout/-/mout-0.12.0.tgz", | 1859 | "resolved": "https://registry.npmjs.org/mout/-/mout-0.12.0.tgz", |
1444 | "integrity": "sha1-bVskLuMx+dBMaOWPd6kaMGDoyss=" | 1860 | "integrity": "sha1-bVskLuMx+dBMaOWPd6kaMGDoyss=" |
1445 | }, | 1861 | }, |
1862 | + "mpath": { | ||
1863 | + "version": "0.9.0", | ||
1864 | + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", | ||
1865 | + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" | ||
1866 | + }, | ||
1867 | + "mquery": { | ||
1868 | + "version": "4.0.3", | ||
1869 | + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", | ||
1870 | + "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", | ||
1871 | + "requires": { | ||
1872 | + "debug": "4.x" | ||
1873 | + }, | ||
1874 | + "dependencies": { | ||
1875 | + "debug": { | ||
1876 | + "version": "4.3.4", | ||
1877 | + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", | ||
1878 | + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", | ||
1879 | + "requires": { | ||
1880 | + "ms": "2.1.2" | ||
1881 | + } | ||
1882 | + }, | ||
1883 | + "ms": { | ||
1884 | + "version": "2.1.2", | ||
1885 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||
1886 | + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | ||
1887 | + } | ||
1888 | + } | ||
1889 | + }, | ||
1446 | "ms": { | 1890 | "ms": { |
1447 | "version": "2.0.0", | 1891 | "version": "2.0.0", |
1448 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | 1892 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", |
... | @@ -1527,6 +1971,11 @@ | ... | @@ -1527,6 +1971,11 @@ |
1527 | "ipaddr.js": "1.9.1" | 1971 | "ipaddr.js": "1.9.1" |
1528 | } | 1972 | } |
1529 | }, | 1973 | }, |
1974 | + "punycode": { | ||
1975 | + "version": "2.1.1", | ||
1976 | + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | ||
1977 | + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" | ||
1978 | + }, | ||
1530 | "qs": { | 1979 | "qs": { |
1531 | "version": "6.10.3", | 1980 | "version": "6.10.3", |
1532 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", | 1981 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", |
... | @@ -1587,6 +2036,15 @@ | ... | @@ -1587,6 +2036,15 @@ |
1587 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | 2036 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", |
1588 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" | 2037 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" |
1589 | }, | 2038 | }, |
2039 | + "saslprep": { | ||
2040 | + "version": "1.0.3", | ||
2041 | + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", | ||
2042 | + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", | ||
2043 | + "optional": true, | ||
2044 | + "requires": { | ||
2045 | + "sparse-bitfield": "^3.0.3" | ||
2046 | + } | ||
2047 | + }, | ||
1590 | "send": { | 2048 | "send": { |
1591 | "version": "0.18.0", | 2049 | "version": "0.18.0", |
1592 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", | 2050 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", |
... | @@ -1640,6 +2098,34 @@ | ... | @@ -1640,6 +2098,34 @@ |
1640 | "object-inspect": "^1.9.0" | 2098 | "object-inspect": "^1.9.0" |
1641 | } | 2099 | } |
1642 | }, | 2100 | }, |
2101 | + "sift": { | ||
2102 | + "version": "16.0.0", | ||
2103 | + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", | ||
2104 | + "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==" | ||
2105 | + }, | ||
2106 | + "smart-buffer": { | ||
2107 | + "version": "4.2.0", | ||
2108 | + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", | ||
2109 | + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" | ||
2110 | + }, | ||
2111 | + "socks": { | ||
2112 | + "version": "2.6.2", | ||
2113 | + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", | ||
2114 | + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", | ||
2115 | + "requires": { | ||
2116 | + "ip": "^1.1.5", | ||
2117 | + "smart-buffer": "^4.2.0" | ||
2118 | + } | ||
2119 | + }, | ||
2120 | + "sparse-bitfield": { | ||
2121 | + "version": "3.0.3", | ||
2122 | + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", | ||
2123 | + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", | ||
2124 | + "optional": true, | ||
2125 | + "requires": { | ||
2126 | + "memory-pager": "^1.0.2" | ||
2127 | + } | ||
2128 | + }, | ||
1643 | "sqlstring": { | 2129 | "sqlstring": { |
1644 | "version": "2.3.1", | 2130 | "version": "2.3.1", |
1645 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", | 2131 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", |
... | @@ -1678,6 +2164,14 @@ | ... | @@ -1678,6 +2164,14 @@ |
1678 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", | 2164 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", |
1679 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" | 2165 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" |
1680 | }, | 2166 | }, |
2167 | + "tr46": { | ||
2168 | + "version": "3.0.0", | ||
2169 | + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", | ||
2170 | + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", | ||
2171 | + "requires": { | ||
2172 | + "punycode": "^2.1.1" | ||
2173 | + } | ||
2174 | + }, | ||
1681 | "type-is": { | 2175 | "type-is": { |
1682 | "version": "1.6.18", | 2176 | "version": "1.6.18", |
1683 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", | 2177 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", |
... | @@ -1729,6 +2223,20 @@ | ... | @@ -1729,6 +2223,20 @@ |
1729 | "version": "1.1.2", | 2223 | "version": "1.1.2", |
1730 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", | 2224 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", |
1731 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" | 2225 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" |
2226 | + }, | ||
2227 | + "webidl-conversions": { | ||
2228 | + "version": "7.0.0", | ||
2229 | + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", | ||
2230 | + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" | ||
2231 | + }, | ||
2232 | + "whatwg-url": { | ||
2233 | + "version": "11.0.0", | ||
2234 | + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", | ||
2235 | + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", | ||
2236 | + "requires": { | ||
2237 | + "tr46": "^3.0.0", | ||
2238 | + "webidl-conversions": "^7.0.0" | ||
2239 | + } | ||
1732 | } | 2240 | } |
1733 | } | 2241 | } |
1734 | } | 2242 | } | ... | ... |
... | @@ -12,11 +12,13 @@ | ... | @@ -12,11 +12,13 @@ |
12 | "body-parser": "^1.20.0", | 12 | "body-parser": "^1.20.0", |
13 | "bootstrap": "^5.1.3", | 13 | "bootstrap": "^5.1.3", |
14 | "cookie-parser": "^1.4.6", | 14 | "cookie-parser": "^1.4.6", |
15 | + "crypto": "^1.0.1", | ||
15 | "ejs": "^3.1.7", | 16 | "ejs": "^3.1.7", |
16 | "express": "^4.18.1", | 17 | "express": "^4.18.1", |
17 | "express-error-handler": "^1.1.0", | 18 | "express-error-handler": "^1.1.0", |
18 | "express-session": "^1.17.3", | 19 | "express-session": "^1.17.3", |
19 | "http": "^0.0.1-security", | 20 | "http": "^0.0.1-security", |
21 | + "mongoose": "^6.3.4", | ||
20 | "mysql": "^2.18.1", | 22 | "mysql": "^2.18.1", |
21 | "path": "^0.12.7", | 23 | "path": "^0.12.7", |
22 | "serve-static": "^1.15.0" | 24 | "serve-static": "^1.15.0" | ... | ... |
-
Please register or login to post a comment