강상위

Merge branch 'ksw'

1 node_modules 1 node_modules
2 +mongodb
3 +test.js
4 +test_api.js
2 5
......
1 +# 나만의 편성표 - My Personal Broadcating Schedule
2 +## Description
3 +- 오픈소스SW개발 프로젝트
4 +- 관심있는 인물이 출연하는 방송 프로그램을 검색하여 나만의 편성표를 만든다.
5 +
6 +## Environment
7 +- Backend - Node.js / Express
8 +- Frontend - HTML5/CSS/Javascript
9 +- DB - MongoDB
10 +
11 +## Prerequisite
12 +- Terminal Environment
13 +
14 +- 1.Clone
15 +> git clone \<THIS-PROJECT\>
16 +
17 +- 2.Install modules
18 +> cd \<THIS-PROJECT\>
19 +> npm install
20 +
21 +- 3.Run
...\ No newline at end of file ...\ No newline at end of file
1 +var express = require('express');
2 +var app = express();
3 +var bodyParser = require('body-parser');
4 +var session = require('express-session');
5 +var mongoose = require('mongoose');
6 +var passport = require('passport');
7 +
8 +//DB연결
9 +mongoose.connect('mongodb://username:pwd@host/dbname');
10 +mongoose.Promise = global.Promise;
11 +var db = mongoose.connection;
12 +
13 +//연결실패
14 +db.on('error', function()
15 +{
16 + console.log('Connection Failed!');
17 +});
18 +
19 +//연결 성공
20 +db.once('open', function()
21 +{
22 + console.log('Connected!');
23 +});
24 +
25 +// DB모델정의
26 +var Users = require('./models/users');
27 +
28 +// session
29 +app.use(session({
30 + secret: 'keyboard cat',
31 + resave: false,
32 + saveUninitialized: true
33 +}));
34 +
35 +// passport setting
36 +require('./passport')(passport);
37 +app.use(passport.initialize());
38 +app.use(passport.session()); //로그인 세션 유지
39 +// 주의! passport.session을 사용하기 전에 app.use(session(~))설정을 해줘야 한다.
40 +// 그렇지 않으면 passport가 session을 사용하지 못한다.
41 +// app.use는 동기식으로 작동하기 때문에 순서에 유의해야한다.
42 +
43 +
44 +// ejs사용
45 +// json사용설정
46 +app.set('view engine','ejs');
47 +app.use(bodyParser.json());
48 +app.use(bodyParser.urlencoded({extended: true}));
49 +
50 +// router import
51 +var router = require('./routing')(app, Users);
52 +
53 +var server = app.listen(23023, function()
54 +{
55 + var host = server.address().address;
56 + var port = server.address().port;
57 + console.log("http://%s:%s",host, port);
58 +});
...\ No newline at end of file ...\ No newline at end of file
1 +var mongoose = require('mongoose');
2 +var bcrypt = require('bcrypt-nodejs');
3 +
4 +var userSchema = mongoose.Schema
5 +(
6 + {
7 + id: String,
8 + pwd: String,
9 + name: String
10 + }
11 +);
12 +
13 +// 패스워드 암호화
14 +userSchema.methods.generateHash = function(password)
15 +{
16 + // password hash를 만든다
17 + return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
18 +};
19 +
20 +// 패스워드 검증
21 +userSchema.methods.validPassword = function(password)
22 +{
23 + // 기존의 해쉬값과 들어온 패스워드를 해쉬값으로 만든 값을 비교한다.
24 + // 주의! 기존의 값이 해쉬가 아니라면 비교불가. 따라서 에러.
25 + // 또한 나는 bcrypt를 bcryt로 잘못 썼는데 잘 안보인다... 조심해라...
26 + //var good = bcrypt.hashSync(this.pwd, bcrypt.genSaltSync(8), null);
27 + return bcrypt.compareSync(password, this.pwd);
28 +};
29 +
30 +module.exports = mongoose.model('user',userSchema);
31 +
1 +var mongoose = require('mongoose');
2 +mongoose.connect('mongodb://username:pwd@host/dbname');
3 +var db = mongoose.connection;
4 +
5 +//연결실패
6 +db.on('error', function(){
7 + console.log('Connection Failed!');
8 +});
9 +//연결 성공
10 +db.once('open', function() {
11 + console.log('Connected!');
12 +});
13 +
14 +
15 +
16 +var testSchema = mongoose.Schema
17 +({
18 + name: String
19 +});
20 +
21 +var TestModel = mongoose.model("TestModel", testSchema);
22 +
23 +/*
24 +var test = new TestModel({ name: "test" });
25 +
26 +test.save(function(err, test)
27 +{
28 + if(err){console.log(err);}
29 + else{console.log("Success!");}
30 + console.log("ok4");
31 +});
32 +*/
33 +
34 +TestModel.find(function(err, test){
35 + if(err){console.log(err);}
36 + else{
37 + console.log(test);
38 + }
39 +});
40 +
41 +
42 +db.close()
...\ No newline at end of file ...\ No newline at end of file
1 +{
2 + "name": "my-broadcasting-ksw",
3 + "version": "1.0.0",
4 + "lockfileVersion": 1,
5 + "requires": true,
6 + "dependencies": {
7 + "@types/node": {
8 + "version": "10.12.10",
9 + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.10.tgz",
10 + "integrity": "sha512-8xZEYckCbUVgK8Eg7lf5Iy4COKJ5uXlnIOnePN0WUwSQggy9tolM+tDJf7wMOnT/JT/W9xDYIaYggt3mRV2O5w=="
11 + },
12 + "accepts": {
13 + "version": "1.3.5",
14 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
15 + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
16 + "requires": {
17 + "mime-types": "2.1.21",
18 + "negotiator": "0.6.1"
19 + }
20 + },
21 + "ajv": {
22 + "version": "6.5.5",
23 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
24 + "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
25 + "requires": {
26 + "fast-deep-equal": "2.0.1",
27 + "fast-json-stable-stringify": "2.0.0",
28 + "json-schema-traverse": "0.4.1",
29 + "uri-js": "4.2.2"
30 + }
31 + },
32 + "array-flatten": {
33 + "version": "1.1.1",
34 + "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
35 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
36 + },
37 + "asn1": {
38 + "version": "0.2.4",
39 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
40 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
41 + "requires": {
42 + "safer-buffer": "2.1.2"
43 + }
44 + },
45 + "assert-plus": {
46 + "version": "1.0.0",
47 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
48 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
49 + },
50 + "async": {
51 + "version": "2.6.1",
52 + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
53 + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
54 + "requires": {
55 + "lodash": "4.17.11"
56 + }
57 + },
58 + "asynckit": {
59 + "version": "0.4.0",
60 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
61 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
62 + },
63 + "aws-sign2": {
64 + "version": "0.7.0",
65 + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
66 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
67 + },
68 + "aws4": {
69 + "version": "1.8.0",
70 + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
71 + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
72 + },
73 + "balanced-match": {
74 + "version": "1.0.0",
75 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
76 + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
77 + },
78 + "bcrypt-nodejs": {
79 + "version": "0.0.3",
80 + "resolved": "https://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz",
81 + "integrity": "sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs="
82 + },
83 + "bcrypt-pbkdf": {
84 + "version": "1.0.2",
85 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
86 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
87 + "requires": {
88 + "tweetnacl": "0.14.5"
89 + }
90 + },
91 + "bluebird": {
92 + "version": "3.5.1",
93 + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
94 + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
95 + },
96 + "body-parser": {
97 + "version": "1.18.3",
98 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
99 + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
100 + "requires": {
101 + "bytes": "3.0.0",
102 + "content-type": "1.0.4",
103 + "debug": "2.6.9",
104 + "depd": "1.1.2",
105 + "http-errors": "1.6.3",
106 + "iconv-lite": "0.4.23",
107 + "on-finished": "2.3.0",
108 + "qs": "6.5.2",
109 + "raw-body": "2.3.3",
110 + "type-is": "1.6.16"
111 + },
112 + "dependencies": {
113 + "debug": {
114 + "version": "2.6.9",
115 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
116 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
117 + "requires": {
118 + "ms": "2.0.0"
119 + }
120 + }
121 + }
122 + },
123 + "boolbase": {
124 + "version": "1.0.0",
125 + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
126 + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
127 + },
128 + "brace-expansion": {
129 + "version": "1.1.11",
130 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
131 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
132 + "requires": {
133 + "balanced-match": "1.0.0",
134 + "concat-map": "0.0.1"
135 + }
136 + },
137 + "bson": {
138 + "version": "1.1.0",
139 + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz",
140 + "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA=="
141 + },
142 + "bytes": {
143 + "version": "3.0.0",
144 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
145 + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
146 + },
147 + "caseless": {
148 + "version": "0.12.0",
149 + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
150 + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
151 + },
152 + "cheerio": {
153 + "version": "1.0.0-rc.2",
154 + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
155 + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
156 + "requires": {
157 + "css-select": "1.2.0",
158 + "dom-serializer": "0.1.0",
159 + "entities": "1.1.2",
160 + "htmlparser2": "3.10.0",
161 + "lodash": "4.17.11",
162 + "parse5": "3.0.3"
163 + }
164 + },
165 + "combined-stream": {
166 + "version": "1.0.7",
167 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
168 + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
169 + "requires": {
170 + "delayed-stream": "1.0.0"
171 + }
172 + },
173 + "concat-map": {
174 + "version": "0.0.1",
175 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
176 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
177 + },
178 + "content-disposition": {
179 + "version": "0.5.2",
180 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
181 + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
182 + },
183 + "content-type": {
184 + "version": "1.0.4",
185 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
186 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
187 + },
188 + "cookie": {
189 + "version": "0.3.1",
190 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
191 + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
192 + },
193 + "cookie-signature": {
194 + "version": "1.0.6",
195 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
196 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
197 + },
198 + "core-js": {
199 + "version": "2.3.0",
200 + "resolved": "http://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
201 + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU="
202 + },
203 + "core-util-is": {
204 + "version": "1.0.2",
205 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
206 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
207 + },
208 + "crc": {
209 + "version": "3.4.4",
210 + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz",
211 + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms="
212 + },
213 + "css-select": {
214 + "version": "1.2.0",
215 + "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
216 + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
217 + "requires": {
218 + "boolbase": "1.0.0",
219 + "css-what": "2.1.2",
220 + "domutils": "1.5.1",
221 + "nth-check": "1.0.2"
222 + }
223 + },
224 + "css-what": {
225 + "version": "2.1.2",
226 + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
227 + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ=="
228 + },
229 + "dashdash": {
230 + "version": "1.14.1",
231 + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
232 + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
233 + "requires": {
234 + "assert-plus": "1.0.0"
235 + }
236 + },
237 + "debug": {
238 + "version": "3.1.0",
239 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
240 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
241 + "requires": {
242 + "ms": "2.0.0"
243 + }
244 + },
245 + "delayed-stream": {
246 + "version": "1.0.0",
247 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
248 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
249 + },
250 + "depd": {
251 + "version": "1.1.2",
252 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
253 + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
254 + },
255 + "destroy": {
256 + "version": "1.0.4",
257 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
258 + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
259 + },
260 + "dom-serializer": {
261 + "version": "0.1.0",
262 + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
263 + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
264 + "requires": {
265 + "domelementtype": "1.1.3",
266 + "entities": "1.1.2"
267 + },
268 + "dependencies": {
269 + "domelementtype": {
270 + "version": "1.1.3",
271 + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
272 + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
273 + }
274 + }
275 + },
276 + "domelementtype": {
277 + "version": "1.2.1",
278 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz",
279 + "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA=="
280 + },
281 + "domhandler": {
282 + "version": "2.4.2",
283 + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
284 + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
285 + "requires": {
286 + "domelementtype": "1.2.1"
287 + }
288 + },
289 + "domutils": {
290 + "version": "1.5.1",
291 + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
292 + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
293 + "requires": {
294 + "dom-serializer": "0.1.0",
295 + "domelementtype": "1.2.1"
296 + }
297 + },
298 + "ecc-jsbn": {
299 + "version": "0.1.2",
300 + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
301 + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
302 + "requires": {
303 + "jsbn": "0.1.1",
304 + "safer-buffer": "2.1.2"
305 + }
306 + },
307 + "ee-first": {
308 + "version": "1.1.1",
309 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
310 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
311 + },
312 + "ejs": {
313 + "version": "2.6.1",
314 + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
315 + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ=="
316 + },
317 + "encodeurl": {
318 + "version": "1.0.2",
319 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
320 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
321 + },
322 + "entities": {
323 + "version": "1.1.2",
324 + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
325 + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
326 + },
327 + "es6-promise": {
328 + "version": "3.0.2",
329 + "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
330 + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y="
331 + },
332 + "escape-html": {
333 + "version": "1.0.3",
334 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
335 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
336 + },
337 + "etag": {
338 + "version": "1.8.1",
339 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
340 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
341 + },
342 + "express": {
343 + "version": "4.16.4",
344 + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
345 + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
346 + "requires": {
347 + "accepts": "1.3.5",
348 + "array-flatten": "1.1.1",
349 + "body-parser": "1.18.3",
350 + "content-disposition": "0.5.2",
351 + "content-type": "1.0.4",
352 + "cookie": "0.3.1",
353 + "cookie-signature": "1.0.6",
354 + "debug": "2.6.9",
355 + "depd": "1.1.2",
356 + "encodeurl": "1.0.2",
357 + "escape-html": "1.0.3",
358 + "etag": "1.8.1",
359 + "finalhandler": "1.1.1",
360 + "fresh": "0.5.2",
361 + "merge-descriptors": "1.0.1",
362 + "methods": "1.1.2",
363 + "on-finished": "2.3.0",
364 + "parseurl": "1.3.2",
365 + "path-to-regexp": "0.1.7",
366 + "proxy-addr": "2.0.4",
367 + "qs": "6.5.2",
368 + "range-parser": "1.2.0",
369 + "safe-buffer": "5.1.2",
370 + "send": "0.16.2",
371 + "serve-static": "1.13.2",
372 + "setprototypeof": "1.1.0",
373 + "statuses": "1.4.0",
374 + "type-is": "1.6.16",
375 + "utils-merge": "1.0.1",
376 + "vary": "1.1.2"
377 + },
378 + "dependencies": {
379 + "debug": {
380 + "version": "2.6.9",
381 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
382 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
383 + "requires": {
384 + "ms": "2.0.0"
385 + }
386 + }
387 + }
388 + },
389 + "express-session": {
390 + "version": "1.15.6",
391 + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz",
392 + "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==",
393 + "requires": {
394 + "cookie": "0.3.1",
395 + "cookie-signature": "1.0.6",
396 + "crc": "3.4.4",
397 + "debug": "2.6.9",
398 + "depd": "1.1.2",
399 + "on-headers": "1.0.1",
400 + "parseurl": "1.3.2",
401 + "uid-safe": "2.1.5",
402 + "utils-merge": "1.0.1"
403 + },
404 + "dependencies": {
405 + "debug": {
406 + "version": "2.6.9",
407 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
408 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
409 + "requires": {
410 + "ms": "2.0.0"
411 + }
412 + }
413 + }
414 + },
415 + "extend": {
416 + "version": "3.0.2",
417 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
418 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
419 + },
420 + "extsprintf": {
421 + "version": "1.3.0",
422 + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
423 + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
424 + },
425 + "fast-deep-equal": {
426 + "version": "2.0.1",
427 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
428 + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
429 + },
430 + "fast-json-stable-stringify": {
431 + "version": "2.0.0",
432 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
433 + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
434 + },
435 + "finalhandler": {
436 + "version": "1.1.1",
437 + "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
438 + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
439 + "requires": {
440 + "debug": "2.6.9",
441 + "encodeurl": "1.0.2",
442 + "escape-html": "1.0.3",
443 + "on-finished": "2.3.0",
444 + "parseurl": "1.3.2",
445 + "statuses": "1.4.0",
446 + "unpipe": "1.0.0"
447 + },
448 + "dependencies": {
449 + "debug": {
450 + "version": "2.6.9",
451 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
452 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
453 + "requires": {
454 + "ms": "2.0.0"
455 + }
456 + }
457 + }
458 + },
459 + "forever-agent": {
460 + "version": "0.6.1",
461 + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
462 + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
463 + },
464 + "form-data": {
465 + "version": "2.3.3",
466 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
467 + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
468 + "requires": {
469 + "asynckit": "0.4.0",
470 + "combined-stream": "1.0.7",
471 + "mime-types": "2.1.21"
472 + }
473 + },
474 + "forwarded": {
475 + "version": "0.1.2",
476 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
477 + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
478 + },
479 + "fresh": {
480 + "version": "0.5.2",
481 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
482 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
483 + },
484 + "fs.realpath": {
485 + "version": "1.0.0",
486 + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
487 + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
488 + },
489 + "getpass": {
490 + "version": "0.1.7",
491 + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
492 + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
493 + "requires": {
494 + "assert-plus": "1.0.0"
495 + }
496 + },
497 + "glob": {
498 + "version": "7.1.3",
499 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
500 + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
501 + "requires": {
502 + "fs.realpath": "1.0.0",
503 + "inflight": "1.0.6",
504 + "inherits": "2.0.3",
505 + "minimatch": "3.0.4",
506 + "once": "1.4.0",
507 + "path-is-absolute": "1.0.1"
508 + }
509 + },
510 + "har-schema": {
511 + "version": "2.0.0",
512 + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
513 + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
514 + },
515 + "har-validator": {
516 + "version": "5.1.3",
517 + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
518 + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
519 + "requires": {
520 + "ajv": "6.5.5",
521 + "har-schema": "2.0.0"
522 + }
523 + },
524 + "htmlparser2": {
525 + "version": "3.10.0",
526 + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
527 + "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
528 + "requires": {
529 + "domelementtype": "1.3.0",
530 + "domhandler": "2.4.2",
531 + "domutils": "1.5.1",
532 + "entities": "1.1.2",
533 + "inherits": "2.0.3",
534 + "readable-stream": "3.0.6"
535 + },
536 + "dependencies": {
537 + "domelementtype": {
538 + "version": "1.3.0",
539 + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
540 + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
541 + }
542 + }
543 + },
544 + "http-errors": {
545 + "version": "1.6.3",
546 + "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
547 + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
548 + "requires": {
549 + "depd": "1.1.2",
550 + "inherits": "2.0.3",
551 + "setprototypeof": "1.1.0",
552 + "statuses": "1.4.0"
553 + }
554 + },
555 + "http-signature": {
556 + "version": "1.2.0",
557 + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
558 + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
559 + "requires": {
560 + "assert-plus": "1.0.0",
561 + "jsprim": "1.4.1",
562 + "sshpk": "1.15.2"
563 + }
564 + },
565 + "iconv": {
566 + "version": "2.3.1",
567 + "resolved": "https://registry.npmjs.org/iconv/-/iconv-2.3.1.tgz",
568 + "integrity": "sha512-6gvRjd4frcMhTbWpdESntx1HGlvyezMjAH0HOmimelzfpDhUQhQ1DBoEeCabfmj0N0/0zJzr1E1P1O420Z+Bww==",
569 + "requires": {
570 + "nan": "2.11.1",
571 + "safer-buffer": "2.1.2"
572 + }
573 + },
574 + "iconv-lite": {
575 + "version": "0.4.23",
576 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
577 + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
578 + "requires": {
579 + "safer-buffer": "2.1.2"
580 + }
581 + },
582 + "immediate": {
583 + "version": "3.0.6",
584 + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
585 + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
586 + },
587 + "inflight": {
588 + "version": "1.0.6",
589 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
590 + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
591 + "requires": {
592 + "once": "1.4.0",
593 + "wrappy": "1.0.2"
594 + }
595 + },
596 + "inherits": {
597 + "version": "2.0.3",
598 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
599 + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
600 + },
601 + "ipaddr.js": {
602 + "version": "1.8.0",
603 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
604 + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
605 + },
606 + "is-typedarray": {
607 + "version": "1.0.0",
608 + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
609 + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
610 + },
611 + "isarray": {
612 + "version": "1.0.0",
613 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
614 + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
615 + },
616 + "isstream": {
617 + "version": "0.1.2",
618 + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
619 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
620 + },
621 + "jsbn": {
622 + "version": "0.1.1",
623 + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
624 + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
625 + },
626 + "json-schema": {
627 + "version": "0.2.3",
628 + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
629 + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
630 + },
631 + "json-schema-traverse": {
632 + "version": "0.4.1",
633 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
634 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
635 + },
636 + "json-stringify-safe": {
637 + "version": "5.0.1",
638 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
639 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
640 + },
641 + "jsprim": {
642 + "version": "1.4.1",
643 + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
644 + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
645 + "requires": {
646 + "assert-plus": "1.0.0",
647 + "extsprintf": "1.3.0",
648 + "json-schema": "0.2.3",
649 + "verror": "1.10.0"
650 + }
651 + },
652 + "jszip": {
653 + "version": "3.1.5",
654 + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
655 + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==",
656 + "requires": {
657 + "core-js": "2.3.0",
658 + "es6-promise": "3.0.2",
659 + "lie": "3.1.1",
660 + "pako": "1.0.7",
661 + "readable-stream": "2.0.6"
662 + },
663 + "dependencies": {
664 + "readable-stream": {
665 + "version": "2.0.6",
666 + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
667 + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
668 + "requires": {
669 + "core-util-is": "1.0.2",
670 + "inherits": "2.0.3",
671 + "isarray": "1.0.0",
672 + "process-nextick-args": "1.0.7",
673 + "string_decoder": "0.10.31",
674 + "util-deprecate": "1.0.2"
675 + }
676 + },
677 + "string_decoder": {
678 + "version": "0.10.31",
679 + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
680 + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
681 + }
682 + }
683 + },
684 + "kareem": {
685 + "version": "2.3.0",
686 + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz",
687 + "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg=="
688 + },
689 + "lie": {
690 + "version": "3.1.1",
691 + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
692 + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
693 + "requires": {
694 + "immediate": "3.0.6"
695 + }
696 + },
697 + "lodash": {
698 + "version": "4.17.11",
699 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
700 + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
701 + },
702 + "lodash.get": {
703 + "version": "4.4.2",
704 + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
705 + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
706 + },
707 + "media-typer": {
708 + "version": "0.3.0",
709 + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
710 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
711 + },
712 + "memory-pager": {
713 + "version": "1.1.0",
714 + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.1.0.tgz",
715 + "integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==",
716 + "optional": true
717 + },
718 + "merge-descriptors": {
719 + "version": "1.0.1",
720 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
721 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
722 + },
723 + "methods": {
724 + "version": "1.1.2",
725 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
726 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
727 + },
728 + "mime": {
729 + "version": "1.4.1",
730 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
731 + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
732 + },
733 + "mime-db": {
734 + "version": "1.37.0",
735 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
736 + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
737 + },
738 + "mime-types": {
739 + "version": "2.1.21",
740 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
741 + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
742 + "requires": {
743 + "mime-db": "1.37.0"
744 + }
745 + },
746 + "minimatch": {
747 + "version": "3.0.4",
748 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
749 + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
750 + "requires": {
751 + "brace-expansion": "1.1.11"
752 + }
753 + },
754 + "mongodb": {
755 + "version": "3.1.10",
756 + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.10.tgz",
757 + "integrity": "sha512-Uml42GeFxhTGQVml1XQ4cD0o/rp7J2ROy0fdYUcVitoE7vFqEhKH4TYVqRDpQr/bXtCJVxJdNQC1ntRxNREkPQ==",
758 + "requires": {
759 + "mongodb-core": "3.1.9",
760 + "safe-buffer": "5.1.2"
761 + }
762 + },
763 + "mongodb-core": {
764 + "version": "3.1.9",
765 + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.9.tgz",
766 + "integrity": "sha512-MJpciDABXMchrZphh3vMcqu8hkNf/Mi+Gk6btOimVg1XMxLXh87j6FAvRm+KmwD1A9fpu3qRQYcbQe4egj23og==",
767 + "requires": {
768 + "bson": "1.1.0",
769 + "require_optional": "1.0.1",
770 + "safe-buffer": "5.1.2",
771 + "saslprep": "1.0.2"
772 + }
773 + },
774 + "mongoose": {
775 + "version": "5.3.14",
776 + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.3.14.tgz",
777 + "integrity": "sha512-Vt7uC0+/SuPb+x6IwbtXl4tkUER1xU9INlfrDK1RdfsvvEMfG3FJUGNPVGeTWQaj8xqMBtZKIdUNt58rIAsCYg==",
778 + "requires": {
779 + "async": "2.6.1",
780 + "bson": "1.1.0",
781 + "kareem": "2.3.0",
782 + "lodash.get": "4.4.2",
783 + "mongodb": "3.1.10",
784 + "mongodb-core": "3.1.9",
785 + "mongoose-legacy-pluralize": "1.0.2",
786 + "mpath": "0.5.1",
787 + "mquery": "3.2.0",
788 + "ms": "2.0.0",
789 + "regexp-clone": "0.0.1",
790 + "safe-buffer": "5.1.2",
791 + "sliced": "1.0.1"
792 + }
793 + },
794 + "mongoose-legacy-pluralize": {
795 + "version": "1.0.2",
796 + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
797 + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
798 + },
799 + "mpath": {
800 + "version": "0.5.1",
801 + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz",
802 + "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg=="
803 + },
804 + "mquery": {
805 + "version": "3.2.0",
806 + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz",
807 + "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==",
808 + "requires": {
809 + "bluebird": "3.5.1",
810 + "debug": "3.1.0",
811 + "regexp-clone": "0.0.1",
812 + "safe-buffer": "5.1.2",
813 + "sliced": "1.0.1"
814 + }
815 + },
816 + "ms": {
817 + "version": "2.0.0",
818 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
819 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
820 + },
821 + "nan": {
822 + "version": "2.11.1",
823 + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
824 + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA=="
825 + },
826 + "negotiator": {
827 + "version": "0.6.1",
828 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
829 + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
830 + },
831 + "nth-check": {
832 + "version": "1.0.2",
833 + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
834 + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
835 + "requires": {
836 + "boolbase": "1.0.0"
837 + }
838 + },
839 + "oauth-sign": {
840 + "version": "0.9.0",
841 + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
842 + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
843 + },
844 + "on-finished": {
845 + "version": "2.3.0",
846 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
847 + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
848 + "requires": {
849 + "ee-first": "1.1.1"
850 + }
851 + },
852 + "on-headers": {
853 + "version": "1.0.1",
854 + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
855 + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
856 + },
857 + "once": {
858 + "version": "1.4.0",
859 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
860 + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
861 + "requires": {
862 + "wrappy": "1.0.2"
863 + }
864 + },
865 + "os-tmpdir": {
866 + "version": "1.0.2",
867 + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
868 + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
869 + },
870 + "pako": {
871 + "version": "1.0.7",
872 + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz",
873 + "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ=="
874 + },
875 + "parse5": {
876 + "version": "3.0.3",
877 + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
878 + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
879 + "requires": {
880 + "@types/node": "10.12.10"
881 + }
882 + },
883 + "parseurl": {
884 + "version": "1.3.2",
885 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
886 + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
887 + },
888 + "passport": {
889 + "version": "0.4.0",
890 + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz",
891 + "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=",
892 + "requires": {
893 + "passport-strategy": "1.0.0",
894 + "pause": "0.0.1"
895 + }
896 + },
897 + "passport-local": {
898 + "version": "1.0.0",
899 + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz",
900 + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=",
901 + "requires": {
902 + "passport-strategy": "1.0.0"
903 + }
904 + },
905 + "passport-strategy": {
906 + "version": "1.0.0",
907 + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
908 + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
909 + },
910 + "path-is-absolute": {
911 + "version": "1.0.1",
912 + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
913 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
914 + },
915 + "path-to-regexp": {
916 + "version": "0.1.7",
917 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
918 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
919 + },
920 + "pause": {
921 + "version": "0.0.1",
922 + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
923 + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
924 + },
925 + "performance-now": {
926 + "version": "2.1.0",
927 + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
928 + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
929 + },
930 + "process-nextick-args": {
931 + "version": "1.0.7",
932 + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
933 + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
934 + },
935 + "proxy-addr": {
936 + "version": "2.0.4",
937 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
938 + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
939 + "requires": {
940 + "forwarded": "0.1.2",
941 + "ipaddr.js": "1.8.0"
942 + }
943 + },
944 + "psl": {
945 + "version": "1.1.29",
946 + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
947 + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
948 + },
949 + "punycode": {
950 + "version": "2.1.1",
951 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
952 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
953 + },
954 + "qs": {
955 + "version": "6.5.2",
956 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
957 + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
958 + },
959 + "random-bytes": {
960 + "version": "1.0.0",
961 + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
962 + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
963 + },
964 + "range-parser": {
965 + "version": "1.2.0",
966 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
967 + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
968 + },
969 + "raw-body": {
970 + "version": "2.3.3",
971 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
972 + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
973 + "requires": {
974 + "bytes": "3.0.0",
975 + "http-errors": "1.6.3",
976 + "iconv-lite": "0.4.23",
977 + "unpipe": "1.0.0"
978 + }
979 + },
980 + "readable-stream": {
981 + "version": "3.0.6",
982 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz",
983 + "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==",
984 + "requires": {
985 + "inherits": "2.0.3",
986 + "string_decoder": "1.2.0",
987 + "util-deprecate": "1.0.2"
988 + }
989 + },
990 + "regexp-clone": {
991 + "version": "0.0.1",
992 + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
993 + "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
994 + },
995 + "request": {
996 + "version": "2.88.0",
997 + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
998 + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
999 + "requires": {
1000 + "aws-sign2": "0.7.0",
1001 + "aws4": "1.8.0",
1002 + "caseless": "0.12.0",
1003 + "combined-stream": "1.0.7",
1004 + "extend": "3.0.2",
1005 + "forever-agent": "0.6.1",
1006 + "form-data": "2.3.3",
1007 + "har-validator": "5.1.3",
1008 + "http-signature": "1.2.0",
1009 + "is-typedarray": "1.0.0",
1010 + "isstream": "0.1.2",
1011 + "json-stringify-safe": "5.0.1",
1012 + "mime-types": "2.1.21",
1013 + "oauth-sign": "0.9.0",
1014 + "performance-now": "2.1.0",
1015 + "qs": "6.5.2",
1016 + "safe-buffer": "5.1.2",
1017 + "tough-cookie": "2.4.3",
1018 + "tunnel-agent": "0.6.0",
1019 + "uuid": "3.3.2"
1020 + }
1021 + },
1022 + "require_optional": {
1023 + "version": "1.0.1",
1024 + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
1025 + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
1026 + "requires": {
1027 + "resolve-from": "2.0.0",
1028 + "semver": "5.6.0"
1029 + }
1030 + },
1031 + "resolve-from": {
1032 + "version": "2.0.0",
1033 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
1034 + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
1035 + },
1036 + "rimraf": {
1037 + "version": "2.6.2",
1038 + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
1039 + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
1040 + "requires": {
1041 + "glob": "7.1.3"
1042 + }
1043 + },
1044 + "safe-buffer": {
1045 + "version": "5.1.2",
1046 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1047 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1048 + },
1049 + "safer-buffer": {
1050 + "version": "2.1.2",
1051 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1052 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1053 + },
1054 + "saslprep": {
1055 + "version": "1.0.2",
1056 + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz",
1057 + "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==",
1058 + "optional": true,
1059 + "requires": {
1060 + "sparse-bitfield": "3.0.3"
1061 + }
1062 + },
1063 + "sax": {
1064 + "version": "1.2.4",
1065 + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
1066 + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
1067 + },
1068 + "selenium-webdriver": {
1069 + "version": "4.0.0-alpha.1",
1070 + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.1.tgz",
1071 + "integrity": "sha512-z88rdjHAv3jmTZ7KSGUkTvo4rGzcDGMq0oXWHNIDK96Gs31JKVdu9+FMtT4KBrVoibg8dUicJDok6GnqqttO5Q==",
1072 + "requires": {
1073 + "jszip": "3.1.5",
1074 + "rimraf": "2.6.2",
1075 + "tmp": "0.0.30",
1076 + "xml2js": "0.4.19"
1077 + }
1078 + },
1079 + "semver": {
1080 + "version": "5.6.0",
1081 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
1082 + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
1083 + },
1084 + "send": {
1085 + "version": "0.16.2",
1086 + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
1087 + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
1088 + "requires": {
1089 + "debug": "2.6.9",
1090 + "depd": "1.1.2",
1091 + "destroy": "1.0.4",
1092 + "encodeurl": "1.0.2",
1093 + "escape-html": "1.0.3",
1094 + "etag": "1.8.1",
1095 + "fresh": "0.5.2",
1096 + "http-errors": "1.6.3",
1097 + "mime": "1.4.1",
1098 + "ms": "2.0.0",
1099 + "on-finished": "2.3.0",
1100 + "range-parser": "1.2.0",
1101 + "statuses": "1.4.0"
1102 + },
1103 + "dependencies": {
1104 + "debug": {
1105 + "version": "2.6.9",
1106 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1107 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1108 + "requires": {
1109 + "ms": "2.0.0"
1110 + }
1111 + }
1112 + }
1113 + },
1114 + "serve-static": {
1115 + "version": "1.13.2",
1116 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
1117 + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
1118 + "requires": {
1119 + "encodeurl": "1.0.2",
1120 + "escape-html": "1.0.3",
1121 + "parseurl": "1.3.2",
1122 + "send": "0.16.2"
1123 + }
1124 + },
1125 + "setprototypeof": {
1126 + "version": "1.1.0",
1127 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
1128 + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
1129 + },
1130 + "sliced": {
1131 + "version": "1.0.1",
1132 + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
1133 + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
1134 + },
1135 + "sparse-bitfield": {
1136 + "version": "3.0.3",
1137 + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
1138 + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
1139 + "optional": true,
1140 + "requires": {
1141 + "memory-pager": "1.1.0"
1142 + }
1143 + },
1144 + "sshpk": {
1145 + "version": "1.15.2",
1146 + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
1147 + "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
1148 + "requires": {
1149 + "asn1": "0.2.4",
1150 + "assert-plus": "1.0.0",
1151 + "bcrypt-pbkdf": "1.0.2",
1152 + "dashdash": "1.14.1",
1153 + "ecc-jsbn": "0.1.2",
1154 + "getpass": "0.1.7",
1155 + "jsbn": "0.1.1",
1156 + "safer-buffer": "2.1.2",
1157 + "tweetnacl": "0.14.5"
1158 + }
1159 + },
1160 + "statuses": {
1161 + "version": "1.4.0",
1162 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
1163 + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
1164 + },
1165 + "string_decoder": {
1166 + "version": "1.2.0",
1167 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
1168 + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
1169 + "requires": {
1170 + "safe-buffer": "5.1.2"
1171 + }
1172 + },
1173 + "tmp": {
1174 + "version": "0.0.30",
1175 + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
1176 + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
1177 + "requires": {
1178 + "os-tmpdir": "1.0.2"
1179 + }
1180 + },
1181 + "tough-cookie": {
1182 + "version": "2.4.3",
1183 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
1184 + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
1185 + "requires": {
1186 + "psl": "1.1.29",
1187 + "punycode": "1.4.1"
1188 + },
1189 + "dependencies": {
1190 + "punycode": {
1191 + "version": "1.4.1",
1192 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
1193 + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
1194 + }
1195 + }
1196 + },
1197 + "tunnel-agent": {
1198 + "version": "0.6.0",
1199 + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1200 + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1201 + "requires": {
1202 + "safe-buffer": "5.1.2"
1203 + }
1204 + },
1205 + "tweetnacl": {
1206 + "version": "0.14.5",
1207 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1208 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
1209 + },
1210 + "type-is": {
1211 + "version": "1.6.16",
1212 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
1213 + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
1214 + "requires": {
1215 + "media-typer": "0.3.0",
1216 + "mime-types": "2.1.21"
1217 + }
1218 + },
1219 + "uid-safe": {
1220 + "version": "2.1.5",
1221 + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
1222 + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
1223 + "requires": {
1224 + "random-bytes": "1.0.0"
1225 + }
1226 + },
1227 + "unpipe": {
1228 + "version": "1.0.0",
1229 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1230 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1231 + },
1232 + "uri-js": {
1233 + "version": "4.2.2",
1234 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
1235 + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
1236 + "requires": {
1237 + "punycode": "2.1.1"
1238 + }
1239 + },
1240 + "util-deprecate": {
1241 + "version": "1.0.2",
1242 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1243 + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1244 + },
1245 + "utils-merge": {
1246 + "version": "1.0.1",
1247 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1248 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1249 + },
1250 + "uuid": {
1251 + "version": "3.3.2",
1252 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
1253 + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
1254 + },
1255 + "vary": {
1256 + "version": "1.1.2",
1257 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1258 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1259 + },
1260 + "verror": {
1261 + "version": "1.10.0",
1262 + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1263 + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1264 + "requires": {
1265 + "assert-plus": "1.0.0",
1266 + "core-util-is": "1.0.2",
1267 + "extsprintf": "1.3.0"
1268 + }
1269 + },
1270 + "wrappy": {
1271 + "version": "1.0.2",
1272 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1273 + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1274 + },
1275 + "xml2js": {
1276 + "version": "0.4.19",
1277 + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
1278 + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
1279 + "requires": {
1280 + "sax": "1.2.4",
1281 + "xmlbuilder": "9.0.7"
1282 + }
1283 + },
1284 + "xmlbuilder": {
1285 + "version": "9.0.7",
1286 + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
1287 + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
1288 + }
1289 + }
1290 +}
1 +{
2 + "name": "my-broadcasting-ksw",
3 + "version": "1.0.0",
4 + "description": "- 오픈소스SW개발 프로젝트 - 관심있는 인물이 출연하는 방송 프로그램을 검색하여 나만의 편성표를 만든다.",
5 + "main": "index.js",
6 + "scripts": {
7 + "test": "echo \"Error: no test specified\" && exit 1"
8 + },
9 + "repository": {
10 + "type": "git",
11 + "url": "http://khuhub.khu.ac.kr/2013104043/my-broadcasting.git"
12 + },
13 + "author": "",
14 + "license": "ISC",
15 + "dependencies": {
16 + "bcrypt-nodejs": "0.0.3",
17 + "body-parser": "^1.18.3",
18 + "cheerio": "^1.0.0-rc.2",
19 + "ejs": "^2.6.1",
20 + "express": "^4.16.4",
21 + "express-session": "^1.15.6",
22 + "iconv": "^2.3.1",
23 + "mongoose": "^5.3.14",
24 + "passport": "^0.4.0",
25 + "passport-local": "^1.0.0",
26 + "request": "^2.88.0",
27 + "selenium-webdriver": "^4.0.0-alpha.1"
28 + }
29 +}
1 +var LocalStrategy = require('passport-local').Strategy;
2 +var Users = require('./models/users');
3 +
4 +module.exports = function(passport)
5 +{
6 + passport.serializeUser(function(user, done)
7 + {
8 + done(null, user.id);
9 + });
10 +
11 + passport.deserializeUser(function(id, done)
12 + {
13 + done(null, id);
14 + /*
15 + Users.findById(id, function(err, user)
16 + {
17 + done(err, user);
18 + });
19 + */
20 + });
21 +
22 + // 회원가입 처리
23 + passport.use('join', new LocalStrategy
24 + (
25 + {
26 + usernameField: 'id',
27 + passwordField: 'pwd',
28 + passReqToCallback: true
29 + },
30 +
31 + function(req, id, pwd, done)
32 + {
33 + Users.findOne({'id':id}, function(err, user)
34 + {
35 + if(err) return done(err);
36 +
37 + // 유저가 있을 경우 처리
38 + if(user)
39 + {
40 + console.log("Duplicated user");
41 + return done(null, false);
42 + }
43 +
44 + // 새로운 유저 DB추가처리
45 + else
46 + {
47 + var newUser = new Users();
48 + newUser.id = id;
49 + newUser.pwd = newUser.generateHash(pwd);
50 +
51 + // 로그인 이외 필요한 값들 추가
52 + newUser.name = req.body.name;
53 +
54 + newUser.save(function(err)
55 + {
56 + if(err) throw err;
57 + return done(null, newUser);
58 + });
59 +
60 + }
61 + });
62 + }));
63 +
64 + // 로그인 처리
65 + passport.use('login', new LocalStrategy
66 + (
67 + {
68 + usernameField: 'id',
69 + passwordField: 'pwd',
70 + passReqToCallback: true
71 + },
72 + function(req, id, pwd, done)
73 + {
74 + Users.findOne({'id': id}, function(err, user)
75 + {
76 + if(err) return done(err);
77 +
78 + // 유저가 없을 시
79 + if(!user)
80 + {
81 + console.log('no user');
82 + return done(null, false);
83 + //return done(null, false, req.flash('loginMessage', '없는 유저입니다..'));
84 + }
85 +
86 + // 틀린 비밀번호
87 + if(!user.validPassword(pwd))
88 + {
89 + console.log('bad password');
90 + return done(null, false);
91 + //return done(null, false, req.flash('loginMessage', '비밀번호가 다릅니다.'));
92 + }
93 +
94 + console.log('login sucess');
95 + return done(null, user);
96 + });
97 + }
98 + ));
99 +
100 +}
...\ No newline at end of file ...\ No newline at end of file
1 +module.exports = function(app, Users)
2 +{
3 + var passport = require('passport');
4 +
5 + app.get('/', function(req, res)
6 + {
7 + // 로그인 중이면 메인페이지로
8 + if(req.isAuthenticated())
9 + res.redirect("/main");
10 + // 로그인 중이 아니라면 인덱스페이지
11 + else
12 + {
13 + res.render("index");
14 + console.log("The index page!");
15 + }
16 + });
17 +
18 + // 로그인 수행 - POST
19 + app.route('/login')
20 + .post(passport.authenticate('login',
21 + {
22 + successRedirect: '/main',
23 + failureRedirect: '/'
24 + //failureFlash : true
25 + }))
26 + // unexpected access
27 + .get(function(req, res)
28 + {
29 + res.redirect("/");
30 + });
31 +
32 +
33 + // 로그아웃 수행
34 + app.get('/logout', function(req, res)
35 + {
36 + req.logout();
37 + res.redirect('/');
38 + })
39 +
40 +
41 + // Join
42 + app.route('/join')
43 + // 처음 Join화면 랜더 - GET
44 + .get(function(req, res)
45 + {
46 + res.render("join")
47 + })
48 + // 실제 Join 수행 - POST
49 + .post(passport.authenticate('join',
50 + {
51 + successRedirect: '/main',
52 + failureRedirect: '/',
53 + //failureFlash : true
54 + }));
55 +
56 +
57 + // 메인화면 - 로그인 후 기본 검색화면으로
58 + app.get('/main', function(req, res)
59 + {
60 + // 로그인 중이라면
61 + if(req.isAuthenticated())
62 + {
63 + console.log("Logged in page");
64 + res.render("main");
65 + }
66 + // 로그인 중이 아니라면
67 + else res.redirect("/");
68 +
69 + });
70 +
71 + // 마이페이지 - 로그인 필수
72 + app.get('/mypage',function(req, res)
73 + {
74 + // 로그인 중이라면
75 + if(req.isAuthenticated())
76 + {
77 + // find를 쓰면, 다행으로 반환되기 때문에 결과의 첫번째 요소를 지정하고 해야함
78 + // 그래서 하나만을 대상으로 할 때는 보통 findOne을 사용
79 + // mongoose로 디비 find는 콜백으로 정의해야함.
80 + Users.findOne({id: req.user}, function(err, user_info)
81 + {
82 + console.log("mypage");
83 + res.render("mypage",
84 + {
85 + id: user_info.id,
86 + name: user_info.name
87 + });
88 + });
89 +
90 + }
91 + // 로그인 중이 아니라면
92 + else res.redirect("/");
93 + });
94 +
95 +
96 + // 동명이인 검색 페이지
97 + app.get("/samename" ,function(req, res)
98 + {
99 + var samename_list = [["강호동", "https://search.pstatic.net/common?type=a&size=60x76&quality=95&src=http://sstatic.naver.net/people/portrait/201304/20130403113314207.jpg"], ["강호동", "https://search.pstatic.net/common?type=a&size=60x76&quality=95&src=http://sstatic.naver.net/people/72/201601061648058211.jpg"]];
100 + console.log("samename page");
101 + res.render("samename",{samename : samename_list});
102 + });
103 +
104 + // 인물-방송정보 페이지
105 + app.get("/programs", function(req, res)
106 + {
107 + var program_list =
108 + [
109 + ["https://search.pstatic.net/common?type=o&size=120x172&quality=90&direct=true&src=http%3A%2F%2Fsstatic.naver.net%2Fkeypage%2Fimage%2Fdss%2F57%2F03%2F30%2F31%2F57_9033031_poster_image_1543806768348.jpg",
110 + "2018",
111 + "아모르파티",
112 + true,
113 + "SUN",
114 + "2240"],
115 + ["https://search.pstatic.net/common?type=o&size=120x172&quality=90&direct=true&src=http%3A%2F%2Fsstatic.naver.net%2Fkeypage%2Fimage%2Fdss%2F57%2F03%2F30%2F31%2F57_9033031_poster_image_1543806768348.jpg",
116 + "2018",
117 + "아모르파티",
118 + true,
119 + "SUN",
120 + "2240"]
121 + ];
122 + res.render("programs", {programs: program_list});
123 + });
124 +
125 + // 나만의 시간표
126 + app.get("/timetable", function(req, res)
127 + {
128 +
129 + var program_list =
130 + [
131 + {
132 + content: '런닝맨',
133 + endDate: new Date(2018, 11, 9, 5, 45),
134 + startDate: new Date(2018, 11, 9, 1, 30),
135 + disabled: true
136 + }
137 + ];
138 +
139 + res.render("timetable", {pl: JSON.stringify(program_list)});
140 + });
141 +
142 +}
143 +
144 +
145 +
146 +
147 +
148 +/*
149 +(구)직접 DB에 저장하기
150 +.post(function(req, res) // 실제 Join 수행 - POST
151 +{
152 + // user정보 입력
153 + var user = new Users();
154 + user.id = req.body.id;
155 + user.pwd = req.body.pwd;
156 + user.name = req.body.name;
157 +
158 + // DB저장
159 + user.save(function(err)
160 + {
161 + if(err)
162 + {
163 + console.log(err);
164 + res.send("Error!")
165 + }
166 + else
167 + {
168 + console.log("Join Success");
169 + res.redirect('/');
170 + }
171 + });
172 +});
173 +*/
174 +
175 +/*
176 +(구)직접 로그인 하기
177 +app.post('/login', function(req, res)
178 +{
179 + Users.find({id: req.body.id, pwd: req.body.pwd},{_id: 1}, function(err, user)
180 + {
181 + if(err)
182 + {
183 + console.log("Error!");
184 + res.send("Error!")
185 + }
186 +
187 + // 매칭정보 없음 - 로그인 실패
188 + if(user.length==0)
189 + {
190 + console.log("Login failed!")
191 + res.send("Login_failed");
192 + }
193 +
194 + // 매칭정보 있음 - 로그인 성공
195 + else
196 + {
197 + console.log("Login Success!")
198 + res.redirect("/main");
199 + // main으로 이동
200 + }
201 + });
202 +});
203 +*/
...\ No newline at end of file ...\ No newline at end of file
1 +
2 +<div id="wrapper">
3 +<div id="myScheduler"></div>
4 +</div>
5 +<script>
6 + setTimeout(() =>
7 + {
8 + YUI().use('aui-scheduler',
9 + function(Y)
10 + {
11 + // code goes here
12 +
13 + //console.log(<%- pl %>);
14 +
15 + var events =
16 + [
17 + {
18 + content: '<%- pl[0].content%>',
19 + endDate: new Date(2018, 11, 9, 5, 30),
20 + startDate: new Date(2018, 11, 9, 1, 30),
21 + disabled: true
22 + }
23 + ];
24 +
25 + var weekView = new Y.SchedulerWeekView();
26 +
27 + myScheduler = new Y.Scheduler(
28 + {
29 + boundingBox: '#myScheduler',
30 + date: new Date(Date.now().getYear, Date.now().getMonth, Date.now().getDay),
31 + items: events,
32 + render: true,
33 + views: [weekView]
34 + }
35 + );
36 +
37 + });
38 + }, 1000);
39 +</script>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="contents_index">
2 + <form method="POST" action="/login">
3 + <label>id:</label><input type="text" name="id"><br/>
4 + <label>pwd:</label><input type="password" name="pwd"><br/>
5 + <button type="submit">로그인</button>
6 + </form>
7 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="contents_index">
2 + <form method="POST" action="/join">
3 + <label>id:</label><input type="text" name="id"><br/>
4 + <label>pwd:</label><input type="password" name="pwd"><br/>
5 + <label>name:</label><input type="text" name="name"><br/>
6 + <button type="submit">가입</button>
7 + </form>
8 + <a href='/'><button>취소</button></a>
9 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="contents_main">
2 + <h1>This is main</h1>
3 + <form method="GET" action="/samename">
4 + <input type="text" name="samename">
5 + <button type="submit">검색</button>
6 + </form>
7 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="contents_main">
2 + <h1>mypage</h1>
3 + <div><label>id:</label><%=id %></div>
4 + <div><label>name:</label><%=name %></div>
5 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="contents_main">
2 + <h1>This is Programs</h1>
3 + <% programs.forEach(function(val){ %>
4 + <li><img src="<%= val[0]%>"></li>
5 + <li><%= val[1]%></li>
6 + <li><%= val[2]%></li>
7 +
8 + <% if(val[3] == true) { %>
9 + <li><%= val[4] %></li>
10 + <li><%= val[5] %></li>
11 + <button>추가</button>
12 + <% } %>
13 + <% }) %>
14 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="contents_main">
2 + <h1>This is Samename</h1>
3 + <% samename.forEach(function(val){ %>
4 + <li><%= val[0]%></li>
5 + <li><img src="<%= val[1]%>"></li>
6 + <% }) %>
7 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="contents_main">
2 + <h1>This is TimeTable</h1>
3 + <table border="1">
4 + <tr>
5 + <td>*</td>
6 + <td>월</td>
7 + <td>화</td>
8 + <td>수</td>
9 + <td>목</td>
10 + <td>금</td>
11 + <td>토</td>
12 + <td>일</td>
13 + </tr>
14 + <% for(var i=0; i<=24; i++) { %>
15 + <tr>
16 + <td><%=i %></td>
17 + <% for(var j=1; j<=7; j++) { %>
18 + <td><%=j %></td>
19 + <% } %>
20 + </tr>
21 + <% } %>
22 +
23 + </table>
24 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<html>
2 +<head>
3 + <title>Index</title>
4 +</head>
5 +<body>
6 + <% include ./navigation_index.ejs %>
7 + <% include ./contents_index.ejs %>
8 +</body>
9 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<html>
2 +<head>
3 + <title>Join</title>
4 +</head>
5 +<body>
6 + <% include ./navigation_index.ejs %>
7 + <% include ./contents_join.ejs %>
8 +</body>
9 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<html>
2 +<head>
3 + <title>Main</title>
4 +</head>
5 +<body>
6 + <% include ./navigation_main.ejs %>
7 + <% include ./contents_main.ejs %>
8 +</body>
9 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<html>
2 +<head>
3 + <title>MyPage</title>
4 +</head>
5 +<body>
6 + <% include ./navigation_main.ejs %>
7 + <% include ./contents_mypage.ejs %>
8 +</body>
9 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="navigation_index">
2 + <a href='/join'><button>회원가입</button></a>
3 + <a href='/'><button>Index</button></a>
4 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="navigation_main">
2 + <a href="/logout"><button>로그아웃</button></a>
3 + <a href="/main"><button>검색</button></a>
4 + <a href="/mypage"><button>마이페이지</button></a>
5 + <a href="/timetable"><button>나만의시간표</button></a>
6 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 +<html>
2 +<head>
3 + <title>Programs</title>
4 +</head>
5 +<body>
6 + <% include ./navigation_main.ejs %>
7 + <% include ./contents_programs.ejs %>
8 +</body>
9 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<html>
2 +<head>
3 + <title>Samename</title>
4 +</head>
5 +<body>
6 + <% include ./navigation_main.ejs %>
7 + <% include ./contents_samename.ejs %>
8 +</body>
9 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<html>
2 +<head>
3 + <title>My Timetable</title>
4 + <script src="https://cdn.alloyui.com/3.0.1/aui/aui-min.js"></script>
5 + <link href="https://cdn.alloyui.com/3.0.1/aui-css/css/bootstrap.min.css" rel="stylesheet"></link>
6 +</head>
7 +<body>
8 + <% include ./navigation_main.ejs %>
9 + <% include ./alloyscheulertest.ejs %>
10 +</body>
11 +</html>
...\ No newline at end of file ...\ No newline at end of file