임준표

HealthAssistant

1 +node_modules/
2 +*.vscode
3 +*.idea
...\ No newline at end of file ...\ No newline at end of file
1 +# [Health Assistant](http://2018102224.osschatbot.cf:23023)
2 +
3 +Health Assistant is a Web based program for Daily exercisers.
4 +
5 +* **시간 효율성:** 이 프로그램은 운동하는 사람에게 몇 세트가 남았는지 알려준다. 또한, 세트와 세트 사이에 유저가 설정한 쉬는 시간이 끝나면, 유저에게 쉬는 시간이 끝났음을 알리고, 다시 운동할 수 있게끔 해준다. 이를 통해 유저는 시간 효율적으로 운동할 수 있다.
6 +* **운동 추천 기능:** 유저들의 키, 몸무게 정보를 저장하여 비슷한 체형의 유저의 운동 루틴을 추천해주거나 운동을 많이 해보지 못한 유저가 운동법을 추천받기를 원하면, 유튜브와 연동하여 운동법을 추천해 준다.
7 +
8 +## Built with
9 +- kakao api
10 +- mysql DB
11 +- 부트스트랩
12 +- node js
13 +
14 +## Prerequisites
15 +```
16 +npm install
17 +npm install express --save
18 +```
19 +
20 +## Installation
21 +- Clone repo<br>
22 + http://khuhub.khu.ac.kr/2018102224/health_assistant.git
23 +
24 +- MySQL 설치<br>
25 + sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
26 + sudo yum install mysql-community-server
27 + - 서버 자동 시작 설정<br>
28 + sudo systemctl enable mysqld
29 + sudo systemctl start mysqld
30 +
31 + - 서버 실행 여부 확인<br>
32 + sudo systemctl status mysqld
33 +
34 + - mysql root 초기 비밀번호 확인<br>
35 + sudo grep 'A temporary password' /var/log/mysqld.log
36 +
37 + - mysql 접속<br>
38 + mysql -u root -p
39 +
40 +- DB 테이블 생성
41 + - user_info(username, userHeight, userWeight)
42 + - userHealth(username, day, way, part, setNumber, number, breakTime, Id)
43 +
44 +- AWS 도메인 설정
45 + - SSL Certificate
46 +
47 +## Usage
48 +
49 + 1. 로그인 - kakao
50 + 2. 키와 몸무게를 입력
51 + 3. 요일별 운동 루틴 저장
52 + 4. 운동 방법에 대한 설명 (유튜브 링크)
53 + 4. 설정한 쉬는 시간 끝났을 때 팝업 알림
54 + 5. 루틴 추천 기능: 키와 몸무게가 비슷한 다른 유저들의 루틴 참고 가능
55 +
56 +## Roadmap
57 +
58 +- [X] DataStructures
59 +- [X] Add back to top links
60 +- [X] Exception Handling
61 +- [X] Use Cookies
62 +- [X] Encryption
63 +
64 +## Contributing
65 +
66 +Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
67 +
68 +If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
69 +Don't forget to give the project a star! Thanks again!
70 +
71 +1. Fork the Project
72 +2. Create your Feature Branch
73 +3. Commit your Changes
74 +4. Push to the Branch
75 +5. Open a Pull Request
76 +
77 +## License
78 +- MySQL (https://www.mysql.com/)
79 +- Kakao API (https://developers.kakao.com/docs/latest/ko/kakaologin/common)
80 +
81 +
82 +## Contact
83 +- 임준표 wnsvy1997@gmail.com
84 +
1 +const express = require("express");
2 +const app = express();
3 +const sslport = 23023;
4 +const passport = require("passport");
5 +const index = require("./routes/index");
6 +const user = require("./routes/user");
7 +const path = require("path");
8 +const setup = require("./routes/setup");
9 +const daySelect = require("./routes/daySelect");
10 +const otherUser = require("./routes/otherUser");
11 +const myHealth = require("./routes/myHealth");
12 +
13 +passport.serializeUser(function (user, done) {
14 + console.log("serialized");
15 + done(null, user);
16 +});
17 +passport.deserializeUser(function (user, done) {
18 + console.log("deserialized");
19 + done(null, user);
20 +});
21 +
22 +app.use(express.json());
23 +app.use(express.static(__dirname + "/public"));
24 +
25 +app.set("views", path.join(__dirname, "views"));
26 +app.set("view engine", "ejs");
27 +
28 +app.use(passport.initialize());
29 +app.use("/", index);
30 +app.use("/user", user);
31 +app.use("/setup", setup);
32 +app.use("/daySelect", daySelect);
33 +app.use("/otherUser", otherUser);
34 +app.use("/myHealth", myHealth);
35 +app.use("/static", express.static("./js/"));
36 +
37 +app.listen(sslport, () => {
38 + console.log(`Example app listening at www.2018102224.osschatbot.cf:${sslport}`);
39 + //도메인 입력
40 +});
41 +
42 +module.exports = app;
1 +var target;
2 +
3 +function addressKindChange(e) {
4 + const shoulder = [
5 + "아놀드 프레스",
6 + "래터럴 레이즈",
7 + "프론트 레이즈",
8 + "리버스 펙덱 플라이",
9 + ];
10 + const leg = ["레그프레스", "스쿼트", "런지", "레그 익스텐션", "레그컬"];
11 + const arm = [
12 + "덤벨 컬",
13 + "오버헤드프레스",
14 + "덤벨 킥백",
15 + "라잉 트라이셉스 익스텐션",
16 + ];
17 + const core = ["플랭크", "백 익스텐션", "크런치"];
18 + const breath = ["싸이클", "런닝머신"];
19 + const back = ["랫풀다운", "시티드로우", "바벨로우", "데드리프트", "풀업"];
20 + const chest = ["인클라인 벤치프레스", "벤치프레스", "딥스", "푸쉬업"];
21 + target = document.getElementById("way");
22 +
23 + if (e.value == "어깨") var d = shoulder;
24 + else if (e.value == "하체") var d = leg;
25 + else if (e.value == "이삼두") var d = arm;
26 + else if (e.value == "등") var d = back;
27 + else if (e.value == "유산소") var d = breath;
28 + else if (e.value == "코어") var d = core;
29 + else if (e.value == "가슴") var d = chest;
30 +
31 + target.options.length = 0;
32 +
33 + for (x in d) {
34 + var opt = document.createElement("option");
35 + opt.value = d[x];
36 + opt.innerHTML = d[x];
37 + target.appendChild(opt);
38 + }
39 +}
40 +
41 +function ex1() {
42 + return target;
43 +}
1 +/*!
2 + * Start Bootstrap - Stylish Portfolio v6.0.4 (https://startbootstrap.com/theme/stylish-portfolio)
3 + * Copyright 2013-2021 Start Bootstrap
4 + * Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-stylish-portfolio/blob/master/LICENSE)
5 + */
6 +window.addEventListener("DOMContentLoaded", (event) => {
7 + const sidebarWrapper = document.getElementById("sidebar-wrapper");
8 + let scrollToTopVisible = false;
9 + // Closes the sidebar menu
10 + const menuToggle = document.body.querySelector(".menu-toggle");
11 + menuToggle.addEventListener("click", (event) => {
12 + event.preventDefault();
13 + sidebarWrapper.classList.toggle("active");
14 + _toggleMenuIcon();
15 + menuToggle.classList.toggle("active");
16 + });
17 +
18 + // Closes responsive menu when a scroll trigger link is clicked
19 + var scrollTriggerList = [].slice.call(
20 + document.querySelectorAll("#sidebar-wrapper .js-scroll-trigger")
21 + );
22 + scrollTriggerList.map((scrollTrigger) => {
23 + scrollTrigger.addEventListener("click", () => {
24 + sidebarWrapper.classList.remove("active");
25 + menuToggle.classList.remove("active");
26 + _toggleMenuIcon();
27 + });
28 + });
29 +
30 + function _toggleMenuIcon() {
31 + const menuToggleBars = document.body.querySelector(
32 + ".menu-toggle > .fa-bars"
33 + );
34 + const menuToggleTimes = document.body.querySelector(
35 + ".menu-toggle > .fa-times"
36 + );
37 + if (menuToggleBars) {
38 + menuToggleBars.classList.remove("fa-bars");
39 + menuToggleBars.classList.add("fa-times");
40 + }
41 + if (menuToggleTimes) {
42 + menuToggleTimes.classList.remove("fa-times");
43 + menuToggleTimes.classList.add("fa-bars");
44 + }
45 + }
46 +
47 + // Scroll to top button appear
48 + document.addEventListener("scroll", () => {
49 + const scrollToTop = document.body.querySelector(".scroll-to-top");
50 + if (document.documentElement.scrollTop > 100) {
51 + if (!scrollToTopVisible) {
52 + fadeIn(scrollToTop);
53 + scrollToTopVisible = true;
54 + }
55 + } else {
56 + if (scrollToTopVisible) {
57 + fadeOut(scrollToTop);
58 + scrollToTopVisible = false;
59 + }
60 + }
61 + });
62 +});
63 +
64 +function fadeOut(el) {
65 + el.style.opacity = 1;
66 + (function fade() {
67 + if ((el.style.opacity -= 0.1) < 0) {
68 + el.style.display = "none";
69 + } else {
70 + requestAnimationFrame(fade);
71 + }
72 + })();
73 +}
74 +
75 +function fadeIn(el, display) {
76 + el.style.opacity = 0;
77 + el.style.display = display || "block";
78 + (function fade() {
79 + var val = parseFloat(el.style.opacity);
80 + if (!((val += 0.1) > 1)) {
81 + el.style.opacity = val;
82 + requestAnimationFrame(fade);
83 + }
84 + })();
85 +}
1 +var x;
2 +
3 +const onClick = (bt) => {
4 + const onDelete = () => {
5 + clearInterval(x);
6 + document.getElementById("demo").innerText = "";
7 + document.querySelector("#deleteBtn").innerText = "";
8 + document.querySelector("#healthname").innerText = "";
9 + };
10 + const a = document.querySelector("#breaktime").innerText;
11 + var time = parseInt(bt.value);
12 + console.log(bt.name);
13 + console.log(time);
14 + var min = "";
15 + var sec = "";
16 + x = setInterval(function () {
17 + min = parseInt(time / 60);
18 + sec = time % 60;
19 +
20 + document.getElementById("demo").innerHTML = min + ":" + sec + "";
21 + time--;
22 +
23 + if (time < 0) {
24 + clearInterval(x);
25 + document.getElementById("demo").innerHTML = "쉬는시간 끝!";
26 + alert("쉬는시간이 끝났습니다!");
27 + }
28 + }, 1000);
29 + const del_bt = document.querySelector("#deleteBtn");
30 + const healthname = document.querySelector("#healthname");
31 + healthname.innerHTML = bt.name + " 쉬는시간!";
32 + var ex = document.createElement("Button");
33 + ex.innerHTML = "타이머 지우기";
34 + ex.className = "btn btn-dark";
35 + ex.onclick = onDelete;
36 + del_bt.appendChild(ex);
37 +};
1 +{
2 + "name": "abcd",
3 + "version": "1.0.0",
4 + "lockfileVersion": 2,
5 + "requires": true,
6 + "packages": {
7 + "": {
8 + "name": "abcd",
9 + "version": "1.0.0",
10 + "license": "ISC",
11 + "dependencies": {
12 + "axios": "^0.24.0",
13 + "body-parser": "^1.19.0",
14 + "ejs": "^3.1.6",
15 + "express": "^4.17.1",
16 + "express-mysql-session": "^2.1.7",
17 + "express-session": "^1.17.2",
18 + "mysql": "^2.18.1",
19 + "passport": "^0.5.0",
20 + "passport-kakao": "^1.0.1"
21 + }
22 + },
23 + "node_modules/accepts": {
24 + "version": "1.3.7",
25 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
26 + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
27 + "dependencies": {
28 + "mime-types": "~2.1.24",
29 + "negotiator": "0.6.2"
30 + },
31 + "engines": {
32 + "node": ">= 0.6"
33 + }
34 + },
35 + "node_modules/ansi-styles": {
36 + "version": "3.2.1",
37 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
38 + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
39 + "dependencies": {
40 + "color-convert": "^1.9.0"
41 + },
42 + "engines": {
43 + "node": ">=4"
44 + }
45 + },
46 + "node_modules/array-flatten": {
47 + "version": "1.1.1",
48 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
49 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
50 + },
51 + "node_modules/async": {
52 + "version": "0.9.2",
53 + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
54 + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
55 + },
56 + "node_modules/axios": {
57 + "version": "0.24.0",
58 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
59 + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
60 + "dependencies": {
61 + "follow-redirects": "^1.14.4"
62 + }
63 + },
64 + "node_modules/balanced-match": {
65 + "version": "1.0.2",
66 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
67 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
68 + },
69 + "node_modules/bignumber.js": {
70 + "version": "9.0.0",
71 + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
72 + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
73 + "engines": {
74 + "node": "*"
75 + }
76 + },
77 + "node_modules/body-parser": {
78 + "version": "1.19.0",
79 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
80 + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
81 + "dependencies": {
82 + "bytes": "3.1.0",
83 + "content-type": "~1.0.4",
84 + "debug": "2.6.9",
85 + "depd": "~1.1.2",
86 + "http-errors": "1.7.2",
87 + "iconv-lite": "0.4.24",
88 + "on-finished": "~2.3.0",
89 + "qs": "6.7.0",
90 + "raw-body": "2.4.0",
91 + "type-is": "~1.6.17"
92 + },
93 + "engines": {
94 + "node": ">= 0.8"
95 + }
96 + },
97 + "node_modules/brace-expansion": {
98 + "version": "1.1.11",
99 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
100 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
101 + "dependencies": {
102 + "balanced-match": "^1.0.0",
103 + "concat-map": "0.0.1"
104 + }
105 + },
106 + "node_modules/bytes": {
107 + "version": "3.1.0",
108 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
109 + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
110 + "engines": {
111 + "node": ">= 0.8"
112 + }
113 + },
114 + "node_modules/chalk": {
115 + "version": "2.4.2",
116 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
117 + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
118 + "dependencies": {
119 + "ansi-styles": "^3.2.1",
120 + "escape-string-regexp": "^1.0.5",
121 + "supports-color": "^5.3.0"
122 + },
123 + "engines": {
124 + "node": ">=4"
125 + }
126 + },
127 + "node_modules/color-convert": {
128 + "version": "1.9.3",
129 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
130 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
131 + "dependencies": {
132 + "color-name": "1.1.3"
133 + }
134 + },
135 + "node_modules/color-name": {
136 + "version": "1.1.3",
137 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
138 + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
139 + },
140 + "node_modules/concat-map": {
141 + "version": "0.0.1",
142 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
143 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
144 + },
145 + "node_modules/content-disposition": {
146 + "version": "0.5.3",
147 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
148 + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
149 + "dependencies": {
150 + "safe-buffer": "5.1.2"
151 + },
152 + "engines": {
153 + "node": ">= 0.6"
154 + }
155 + },
156 + "node_modules/content-type": {
157 + "version": "1.0.4",
158 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
159 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
160 + "engines": {
161 + "node": ">= 0.6"
162 + }
163 + },
164 + "node_modules/cookie": {
165 + "version": "0.4.0",
166 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
167 + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
168 + "engines": {
169 + "node": ">= 0.6"
170 + }
171 + },
172 + "node_modules/cookie-signature": {
173 + "version": "1.0.6",
174 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
175 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
176 + },
177 + "node_modules/core-util-is": {
178 + "version": "1.0.3",
179 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
180 + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
181 + },
182 + "node_modules/debug": {
183 + "version": "2.6.9",
184 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
185 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
186 + "dependencies": {
187 + "ms": "2.0.0"
188 + }
189 + },
190 + "node_modules/depd": {
191 + "version": "1.1.2",
192 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
193 + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
194 + "engines": {
195 + "node": ">= 0.6"
196 + }
197 + },
198 + "node_modules/destroy": {
199 + "version": "1.0.4",
200 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
201 + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
202 + },
203 + "node_modules/ee-first": {
204 + "version": "1.1.1",
205 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
206 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
207 + },
208 + "node_modules/ejs": {
209 + "version": "3.1.6",
210 + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
211 + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
212 + "dependencies": {
213 + "jake": "^10.6.1"
214 + },
215 + "bin": {
216 + "ejs": "bin/cli.js"
217 + },
218 + "engines": {
219 + "node": ">=0.10.0"
220 + }
221 + },
222 + "node_modules/encodeurl": {
223 + "version": "1.0.2",
224 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
225 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
226 + "engines": {
227 + "node": ">= 0.8"
228 + }
229 + },
230 + "node_modules/escape-html": {
231 + "version": "1.0.3",
232 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
233 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
234 + },
235 + "node_modules/escape-string-regexp": {
236 + "version": "1.0.5",
237 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
238 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
239 + "engines": {
240 + "node": ">=0.8.0"
241 + }
242 + },
243 + "node_modules/etag": {
244 + "version": "1.8.1",
245 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
246 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
247 + "engines": {
248 + "node": ">= 0.6"
249 + }
250 + },
251 + "node_modules/express": {
252 + "version": "4.17.1",
253 + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
254 + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
255 + "dependencies": {
256 + "accepts": "~1.3.7",
257 + "array-flatten": "1.1.1",
258 + "body-parser": "1.19.0",
259 + "content-disposition": "0.5.3",
260 + "content-type": "~1.0.4",
261 + "cookie": "0.4.0",
262 + "cookie-signature": "1.0.6",
263 + "debug": "2.6.9",
264 + "depd": "~1.1.2",
265 + "encodeurl": "~1.0.2",
266 + "escape-html": "~1.0.3",
267 + "etag": "~1.8.1",
268 + "finalhandler": "~1.1.2",
269 + "fresh": "0.5.2",
270 + "merge-descriptors": "1.0.1",
271 + "methods": "~1.1.2",
272 + "on-finished": "~2.3.0",
273 + "parseurl": "~1.3.3",
274 + "path-to-regexp": "0.1.7",
275 + "proxy-addr": "~2.0.5",
276 + "qs": "6.7.0",
277 + "range-parser": "~1.2.1",
278 + "safe-buffer": "5.1.2",
279 + "send": "0.17.1",
280 + "serve-static": "1.14.1",
281 + "setprototypeof": "1.1.1",
282 + "statuses": "~1.5.0",
283 + "type-is": "~1.6.18",
284 + "utils-merge": "1.0.1",
285 + "vary": "~1.1.2"
286 + },
287 + "engines": {
288 + "node": ">= 0.10.0"
289 + }
290 + },
291 + "node_modules/express-mysql-session": {
292 + "version": "2.1.7",
293 + "resolved": "https://registry.npmjs.org/express-mysql-session/-/express-mysql-session-2.1.7.tgz",
294 + "integrity": "sha512-0lY8nBVo6GZdQ/Y98zsTsRnDMNJJYRh5k83rrzLf/5CKHEAJZfOnHaox1WG/W8HHTutNKMsmsiiGgL16r1PcsQ==",
295 + "dependencies": {
296 + "debug": "4.3.2",
297 + "express-session": "1.17.2",
298 + "mysql": "2.18.1",
299 + "underscore": "1.13.1"
300 + },
301 + "funding": {
302 + "type": "individual",
303 + "url": "https://degreesofzero.com/donate.html?project=express-mysql-session"
304 + }
305 + },
306 + "node_modules/express-mysql-session/node_modules/debug": {
307 + "version": "4.3.2",
308 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
309 + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
310 + "dependencies": {
311 + "ms": "2.1.2"
312 + },
313 + "engines": {
314 + "node": ">=6.0"
315 + },
316 + "peerDependenciesMeta": {
317 + "supports-color": {
318 + "optional": true
319 + }
320 + }
321 + },
322 + "node_modules/express-mysql-session/node_modules/ms": {
323 + "version": "2.1.2",
324 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
325 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
326 + },
327 + "node_modules/express-session": {
328 + "version": "1.17.2",
329 + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz",
330 + "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==",
331 + "dependencies": {
332 + "cookie": "0.4.1",
333 + "cookie-signature": "1.0.6",
334 + "debug": "2.6.9",
335 + "depd": "~2.0.0",
336 + "on-headers": "~1.0.2",
337 + "parseurl": "~1.3.3",
338 + "safe-buffer": "5.2.1",
339 + "uid-safe": "~2.1.5"
340 + },
341 + "engines": {
342 + "node": ">= 0.8.0"
343 + }
344 + },
345 + "node_modules/express-session/node_modules/cookie": {
346 + "version": "0.4.1",
347 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
348 + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
349 + "engines": {
350 + "node": ">= 0.6"
351 + }
352 + },
353 + "node_modules/express-session/node_modules/depd": {
354 + "version": "2.0.0",
355 + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
356 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
357 + "engines": {
358 + "node": ">= 0.8"
359 + }
360 + },
361 + "node_modules/express-session/node_modules/safe-buffer": {
362 + "version": "5.2.1",
363 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
364 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
365 + "funding": [
366 + {
367 + "type": "github",
368 + "url": "https://github.com/sponsors/feross"
369 + },
370 + {
371 + "type": "patreon",
372 + "url": "https://www.patreon.com/feross"
373 + },
374 + {
375 + "type": "consulting",
376 + "url": "https://feross.org/support"
377 + }
378 + ]
379 + },
380 + "node_modules/filelist": {
381 + "version": "1.0.2",
382 + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
383 + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
384 + "dependencies": {
385 + "minimatch": "^3.0.4"
386 + }
387 + },
388 + "node_modules/finalhandler": {
389 + "version": "1.1.2",
390 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
391 + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
392 + "dependencies": {
393 + "debug": "2.6.9",
394 + "encodeurl": "~1.0.2",
395 + "escape-html": "~1.0.3",
396 + "on-finished": "~2.3.0",
397 + "parseurl": "~1.3.3",
398 + "statuses": "~1.5.0",
399 + "unpipe": "~1.0.0"
400 + },
401 + "engines": {
402 + "node": ">= 0.8"
403 + }
404 + },
405 + "node_modules/follow-redirects": {
406 + "version": "1.14.5",
407 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
408 + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==",
409 + "funding": [
410 + {
411 + "type": "individual",
412 + "url": "https://github.com/sponsors/RubenVerborgh"
413 + }
414 + ],
415 + "engines": {
416 + "node": ">=4.0"
417 + },
418 + "peerDependenciesMeta": {
419 + "debug": {
420 + "optional": true
421 + }
422 + }
423 + },
424 + "node_modules/forwarded": {
425 + "version": "0.2.0",
426 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
427 + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
428 + "engines": {
429 + "node": ">= 0.6"
430 + }
431 + },
432 + "node_modules/fresh": {
433 + "version": "0.5.2",
434 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
435 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
436 + "engines": {
437 + "node": ">= 0.6"
438 + }
439 + },
440 + "node_modules/has-flag": {
441 + "version": "3.0.0",
442 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
443 + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
444 + "engines": {
445 + "node": ">=4"
446 + }
447 + },
448 + "node_modules/http-errors": {
449 + "version": "1.7.2",
450 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
451 + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
452 + "dependencies": {
453 + "depd": "~1.1.2",
454 + "inherits": "2.0.3",
455 + "setprototypeof": "1.1.1",
456 + "statuses": ">= 1.5.0 < 2",
457 + "toidentifier": "1.0.0"
458 + },
459 + "engines": {
460 + "node": ">= 0.6"
461 + }
462 + },
463 + "node_modules/iconv-lite": {
464 + "version": "0.4.24",
465 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
466 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
467 + "dependencies": {
468 + "safer-buffer": ">= 2.1.2 < 3"
469 + },
470 + "engines": {
471 + "node": ">=0.10.0"
472 + }
473 + },
474 + "node_modules/inherits": {
475 + "version": "2.0.3",
476 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
477 + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
478 + },
479 + "node_modules/ipaddr.js": {
480 + "version": "1.9.1",
481 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
482 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
483 + "engines": {
484 + "node": ">= 0.10"
485 + }
486 + },
487 + "node_modules/isarray": {
488 + "version": "1.0.0",
489 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
490 + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
491 + },
492 + "node_modules/jake": {
493 + "version": "10.8.2",
494 + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
495 + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
496 + "dependencies": {
497 + "async": "0.9.x",
498 + "chalk": "^2.4.2",
499 + "filelist": "^1.0.1",
500 + "minimatch": "^3.0.4"
501 + },
502 + "bin": {
503 + "jake": "bin/cli.js"
504 + },
505 + "engines": {
506 + "node": "*"
507 + }
508 + },
509 + "node_modules/media-typer": {
510 + "version": "0.3.0",
511 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
512 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
513 + "engines": {
514 + "node": ">= 0.6"
515 + }
516 + },
517 + "node_modules/merge-descriptors": {
518 + "version": "1.0.1",
519 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
520 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
521 + },
522 + "node_modules/methods": {
523 + "version": "1.1.2",
524 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
525 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
526 + "engines": {
527 + "node": ">= 0.6"
528 + }
529 + },
530 + "node_modules/mime": {
531 + "version": "1.6.0",
532 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
533 + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
534 + "bin": {
535 + "mime": "cli.js"
536 + },
537 + "engines": {
538 + "node": ">=4"
539 + }
540 + },
541 + "node_modules/mime-db": {
542 + "version": "1.51.0",
543 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
544 + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
545 + "engines": {
546 + "node": ">= 0.6"
547 + }
548 + },
549 + "node_modules/mime-types": {
550 + "version": "2.1.34",
551 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
552 + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
553 + "dependencies": {
554 + "mime-db": "1.51.0"
555 + },
556 + "engines": {
557 + "node": ">= 0.6"
558 + }
559 + },
560 + "node_modules/minimatch": {
561 + "version": "3.0.4",
562 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
563 + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
564 + "dependencies": {
565 + "brace-expansion": "^1.1.7"
566 + },
567 + "engines": {
568 + "node": "*"
569 + }
570 + },
571 + "node_modules/ms": {
572 + "version": "2.0.0",
573 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
574 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
575 + },
576 + "node_modules/mysql": {
577 + "version": "2.18.1",
578 + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
579 + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
580 + "dependencies": {
581 + "bignumber.js": "9.0.0",
582 + "readable-stream": "2.3.7",
583 + "safe-buffer": "5.1.2",
584 + "sqlstring": "2.3.1"
585 + },
586 + "engines": {
587 + "node": ">= 0.6"
588 + }
589 + },
590 + "node_modules/negotiator": {
591 + "version": "0.6.2",
592 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
593 + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
594 + "engines": {
595 + "node": ">= 0.6"
596 + }
597 + },
598 + "node_modules/oauth": {
599 + "version": "0.9.15",
600 + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
601 + "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
602 + },
603 + "node_modules/on-finished": {
604 + "version": "2.3.0",
605 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
606 + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
607 + "dependencies": {
608 + "ee-first": "1.1.1"
609 + },
610 + "engines": {
611 + "node": ">= 0.8"
612 + }
613 + },
614 + "node_modules/on-headers": {
615 + "version": "1.0.2",
616 + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
617 + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
618 + "engines": {
619 + "node": ">= 0.8"
620 + }
621 + },
622 + "node_modules/parseurl": {
623 + "version": "1.3.3",
624 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
625 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
626 + "engines": {
627 + "node": ">= 0.8"
628 + }
629 + },
630 + "node_modules/passport": {
631 + "version": "0.5.0",
632 + "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz",
633 + "integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==",
634 + "dependencies": {
635 + "passport-strategy": "1.x.x",
636 + "pause": "0.0.1"
637 + },
638 + "engines": {
639 + "node": ">= 0.4.0"
640 + },
641 + "funding": {
642 + "type": "github",
643 + "url": "https://github.com/sponsors/jaredhanson"
644 + }
645 + },
646 + "node_modules/passport-kakao": {
647 + "version": "1.0.1",
648 + "resolved": "https://registry.npmjs.org/passport-kakao/-/passport-kakao-1.0.1.tgz",
649 + "integrity": "sha512-uItaYRVrTHL6iGPMnMZvPa/O1GrAdh/V6EMjOHcFlQcVroZ9wgG7BZ5PonMNJCxfHQ3L2QVNRnzhKWUzSsumbw==",
650 + "dependencies": {
651 + "passport-oauth2": "~1.1.2",
652 + "pkginfo": "~0.3.0"
653 + }
654 + },
655 + "node_modules/passport-oauth2": {
656 + "version": "1.1.2",
657 + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.1.2.tgz",
658 + "integrity": "sha1-vXFjsbYJA3GGjcTvb58uHkzEuUg=",
659 + "dependencies": {
660 + "oauth": "0.9.x",
661 + "passport-strategy": "1.x.x",
662 + "uid2": "0.0.x"
663 + },
664 + "engines": {
665 + "node": ">= 0.4.0"
666 + }
667 + },
668 + "node_modules/passport-strategy": {
669 + "version": "1.0.0",
670 + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
671 + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=",
672 + "engines": {
673 + "node": ">= 0.4.0"
674 + }
675 + },
676 + "node_modules/path-to-regexp": {
677 + "version": "0.1.7",
678 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
679 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
680 + },
681 + "node_modules/pause": {
682 + "version": "0.0.1",
683 + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
684 + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
685 + },
686 + "node_modules/pkginfo": {
687 + "version": "0.3.1",
688 + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
689 + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=",
690 + "engines": {
691 + "node": ">= 0.4.0"
692 + }
693 + },
694 + "node_modules/process-nextick-args": {
695 + "version": "2.0.1",
696 + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
697 + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
698 + },
699 + "node_modules/proxy-addr": {
700 + "version": "2.0.7",
701 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
702 + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
703 + "dependencies": {
704 + "forwarded": "0.2.0",
705 + "ipaddr.js": "1.9.1"
706 + },
707 + "engines": {
708 + "node": ">= 0.10"
709 + }
710 + },
711 + "node_modules/qs": {
712 + "version": "6.7.0",
713 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
714 + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
715 + "engines": {
716 + "node": ">=0.6"
717 + }
718 + },
719 + "node_modules/random-bytes": {
720 + "version": "1.0.0",
721 + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
722 + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=",
723 + "engines": {
724 + "node": ">= 0.8"
725 + }
726 + },
727 + "node_modules/range-parser": {
728 + "version": "1.2.1",
729 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
730 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
731 + "engines": {
732 + "node": ">= 0.6"
733 + }
734 + },
735 + "node_modules/raw-body": {
736 + "version": "2.4.0",
737 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
738 + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
739 + "dependencies": {
740 + "bytes": "3.1.0",
741 + "http-errors": "1.7.2",
742 + "iconv-lite": "0.4.24",
743 + "unpipe": "1.0.0"
744 + },
745 + "engines": {
746 + "node": ">= 0.8"
747 + }
748 + },
749 + "node_modules/readable-stream": {
750 + "version": "2.3.7",
751 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
752 + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
753 + "dependencies": {
754 + "core-util-is": "~1.0.0",
755 + "inherits": "~2.0.3",
756 + "isarray": "~1.0.0",
757 + "process-nextick-args": "~2.0.0",
758 + "safe-buffer": "~5.1.1",
759 + "string_decoder": "~1.1.1",
760 + "util-deprecate": "~1.0.1"
761 + }
762 + },
763 + "node_modules/safe-buffer": {
764 + "version": "5.1.2",
765 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
766 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
767 + },
768 + "node_modules/safer-buffer": {
769 + "version": "2.1.2",
770 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
771 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
772 + },
773 + "node_modules/send": {
774 + "version": "0.17.1",
775 + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
776 + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
777 + "dependencies": {
778 + "debug": "2.6.9",
779 + "depd": "~1.1.2",
780 + "destroy": "~1.0.4",
781 + "encodeurl": "~1.0.2",
782 + "escape-html": "~1.0.3",
783 + "etag": "~1.8.1",
784 + "fresh": "0.5.2",
785 + "http-errors": "~1.7.2",
786 + "mime": "1.6.0",
787 + "ms": "2.1.1",
788 + "on-finished": "~2.3.0",
789 + "range-parser": "~1.2.1",
790 + "statuses": "~1.5.0"
791 + },
792 + "engines": {
793 + "node": ">= 0.8.0"
794 + }
795 + },
796 + "node_modules/send/node_modules/ms": {
797 + "version": "2.1.1",
798 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
799 + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
800 + },
801 + "node_modules/serve-static": {
802 + "version": "1.14.1",
803 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
804 + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
805 + "dependencies": {
806 + "encodeurl": "~1.0.2",
807 + "escape-html": "~1.0.3",
808 + "parseurl": "~1.3.3",
809 + "send": "0.17.1"
810 + },
811 + "engines": {
812 + "node": ">= 0.8.0"
813 + }
814 + },
815 + "node_modules/setprototypeof": {
816 + "version": "1.1.1",
817 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
818 + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
819 + },
820 + "node_modules/sqlstring": {
821 + "version": "2.3.1",
822 + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
823 + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=",
824 + "engines": {
825 + "node": ">= 0.6"
826 + }
827 + },
828 + "node_modules/statuses": {
829 + "version": "1.5.0",
830 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
831 + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
832 + "engines": {
833 + "node": ">= 0.6"
834 + }
835 + },
836 + "node_modules/string_decoder": {
837 + "version": "1.1.1",
838 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
839 + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
840 + "dependencies": {
841 + "safe-buffer": "~5.1.0"
842 + }
843 + },
844 + "node_modules/supports-color": {
845 + "version": "5.5.0",
846 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
847 + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
848 + "dependencies": {
849 + "has-flag": "^3.0.0"
850 + },
851 + "engines": {
852 + "node": ">=4"
853 + }
854 + },
855 + "node_modules/toidentifier": {
856 + "version": "1.0.0",
857 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
858 + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
859 + "engines": {
860 + "node": ">=0.6"
861 + }
862 + },
863 + "node_modules/type-is": {
864 + "version": "1.6.18",
865 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
866 + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
867 + "dependencies": {
868 + "media-typer": "0.3.0",
869 + "mime-types": "~2.1.24"
870 + },
871 + "engines": {
872 + "node": ">= 0.6"
873 + }
874 + },
875 + "node_modules/uid-safe": {
876 + "version": "2.1.5",
877 + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
878 + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
879 + "dependencies": {
880 + "random-bytes": "~1.0.0"
881 + },
882 + "engines": {
883 + "node": ">= 0.8"
884 + }
885 + },
886 + "node_modules/uid2": {
887 + "version": "0.0.4",
888 + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
889 + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
890 + },
891 + "node_modules/underscore": {
892 + "version": "1.13.1",
893 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
894 + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
895 + },
896 + "node_modules/unpipe": {
897 + "version": "1.0.0",
898 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
899 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
900 + "engines": {
901 + "node": ">= 0.8"
902 + }
903 + },
904 + "node_modules/util-deprecate": {
905 + "version": "1.0.2",
906 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
907 + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
908 + },
909 + "node_modules/utils-merge": {
910 + "version": "1.0.1",
911 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
912 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
913 + "engines": {
914 + "node": ">= 0.4.0"
915 + }
916 + },
917 + "node_modules/vary": {
918 + "version": "1.1.2",
919 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
920 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
921 + "engines": {
922 + "node": ">= 0.8"
923 + }
924 + }
925 + },
926 + "dependencies": {
927 + "accepts": {
928 + "version": "1.3.7",
929 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
930 + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
931 + "requires": {
932 + "mime-types": "~2.1.24",
933 + "negotiator": "0.6.2"
934 + }
935 + },
936 + "ansi-styles": {
937 + "version": "3.2.1",
938 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
939 + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
940 + "requires": {
941 + "color-convert": "^1.9.0"
942 + }
943 + },
944 + "array-flatten": {
945 + "version": "1.1.1",
946 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
947 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
948 + },
949 + "async": {
950 + "version": "0.9.2",
951 + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
952 + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
953 + },
954 + "axios": {
955 + "version": "0.24.0",
956 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
957 + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
958 + "requires": {
959 + "follow-redirects": "^1.14.4"
960 + }
961 + },
962 + "balanced-match": {
963 + "version": "1.0.2",
964 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
965 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
966 + },
967 + "bignumber.js": {
968 + "version": "9.0.0",
969 + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
970 + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
971 + },
972 + "body-parser": {
973 + "version": "1.19.0",
974 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
975 + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
976 + "requires": {
977 + "bytes": "3.1.0",
978 + "content-type": "~1.0.4",
979 + "debug": "2.6.9",
980 + "depd": "~1.1.2",
981 + "http-errors": "1.7.2",
982 + "iconv-lite": "0.4.24",
983 + "on-finished": "~2.3.0",
984 + "qs": "6.7.0",
985 + "raw-body": "2.4.0",
986 + "type-is": "~1.6.17"
987 + }
988 + },
989 + "brace-expansion": {
990 + "version": "1.1.11",
991 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
992 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
993 + "requires": {
994 + "balanced-match": "^1.0.0",
995 + "concat-map": "0.0.1"
996 + }
997 + },
998 + "bytes": {
999 + "version": "3.1.0",
1000 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
1001 + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
1002 + },
1003 + "chalk": {
1004 + "version": "2.4.2",
1005 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1006 + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1007 + "requires": {
1008 + "ansi-styles": "^3.2.1",
1009 + "escape-string-regexp": "^1.0.5",
1010 + "supports-color": "^5.3.0"
1011 + }
1012 + },
1013 + "color-convert": {
1014 + "version": "1.9.3",
1015 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1016 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1017 + "requires": {
1018 + "color-name": "1.1.3"
1019 + }
1020 + },
1021 + "color-name": {
1022 + "version": "1.1.3",
1023 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1024 + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
1025 + },
1026 + "concat-map": {
1027 + "version": "0.0.1",
1028 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1029 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
1030 + },
1031 + "content-disposition": {
1032 + "version": "0.5.3",
1033 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
1034 + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
1035 + "requires": {
1036 + "safe-buffer": "5.1.2"
1037 + }
1038 + },
1039 + "content-type": {
1040 + "version": "1.0.4",
1041 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
1042 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
1043 + },
1044 + "cookie": {
1045 + "version": "0.4.0",
1046 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
1047 + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
1048 + },
1049 + "cookie-signature": {
1050 + "version": "1.0.6",
1051 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
1052 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
1053 + },
1054 + "core-util-is": {
1055 + "version": "1.0.3",
1056 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
1057 + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
1058 + },
1059 + "debug": {
1060 + "version": "2.6.9",
1061 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1062 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1063 + "requires": {
1064 + "ms": "2.0.0"
1065 + }
1066 + },
1067 + "depd": {
1068 + "version": "1.1.2",
1069 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
1070 + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
1071 + },
1072 + "destroy": {
1073 + "version": "1.0.4",
1074 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
1075 + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
1076 + },
1077 + "ee-first": {
1078 + "version": "1.1.1",
1079 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
1080 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
1081 + },
1082 + "ejs": {
1083 + "version": "3.1.6",
1084 + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
1085 + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
1086 + "requires": {
1087 + "jake": "^10.6.1"
1088 + }
1089 + },
1090 + "encodeurl": {
1091 + "version": "1.0.2",
1092 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
1093 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
1094 + },
1095 + "escape-html": {
1096 + "version": "1.0.3",
1097 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1098 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
1099 + },
1100 + "escape-string-regexp": {
1101 + "version": "1.0.5",
1102 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1103 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
1104 + },
1105 + "etag": {
1106 + "version": "1.8.1",
1107 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1108 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
1109 + },
1110 + "express": {
1111 + "version": "4.17.1",
1112 + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
1113 + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
1114 + "requires": {
1115 + "accepts": "~1.3.7",
1116 + "array-flatten": "1.1.1",
1117 + "body-parser": "1.19.0",
1118 + "content-disposition": "0.5.3",
1119 + "content-type": "~1.0.4",
1120 + "cookie": "0.4.0",
1121 + "cookie-signature": "1.0.6",
1122 + "debug": "2.6.9",
1123 + "depd": "~1.1.2",
1124 + "encodeurl": "~1.0.2",
1125 + "escape-html": "~1.0.3",
1126 + "etag": "~1.8.1",
1127 + "finalhandler": "~1.1.2",
1128 + "fresh": "0.5.2",
1129 + "merge-descriptors": "1.0.1",
1130 + "methods": "~1.1.2",
1131 + "on-finished": "~2.3.0",
1132 + "parseurl": "~1.3.3",
1133 + "path-to-regexp": "0.1.7",
1134 + "proxy-addr": "~2.0.5",
1135 + "qs": "6.7.0",
1136 + "range-parser": "~1.2.1",
1137 + "safe-buffer": "5.1.2",
1138 + "send": "0.17.1",
1139 + "serve-static": "1.14.1",
1140 + "setprototypeof": "1.1.1",
1141 + "statuses": "~1.5.0",
1142 + "type-is": "~1.6.18",
1143 + "utils-merge": "1.0.1",
1144 + "vary": "~1.1.2"
1145 + }
1146 + },
1147 + "express-mysql-session": {
1148 + "version": "2.1.7",
1149 + "resolved": "https://registry.npmjs.org/express-mysql-session/-/express-mysql-session-2.1.7.tgz",
1150 + "integrity": "sha512-0lY8nBVo6GZdQ/Y98zsTsRnDMNJJYRh5k83rrzLf/5CKHEAJZfOnHaox1WG/W8HHTutNKMsmsiiGgL16r1PcsQ==",
1151 + "requires": {
1152 + "debug": "4.3.2",
1153 + "express-session": "1.17.2",
1154 + "mysql": "2.18.1",
1155 + "underscore": "1.13.1"
1156 + },
1157 + "dependencies": {
1158 + "debug": {
1159 + "version": "4.3.2",
1160 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
1161 + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
1162 + "requires": {
1163 + "ms": "2.1.2"
1164 + }
1165 + },
1166 + "ms": {
1167 + "version": "2.1.2",
1168 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1169 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1170 + }
1171 + }
1172 + },
1173 + "express-session": {
1174 + "version": "1.17.2",
1175 + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz",
1176 + "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==",
1177 + "requires": {
1178 + "cookie": "0.4.1",
1179 + "cookie-signature": "1.0.6",
1180 + "debug": "2.6.9",
1181 + "depd": "~2.0.0",
1182 + "on-headers": "~1.0.2",
1183 + "parseurl": "~1.3.3",
1184 + "safe-buffer": "5.2.1",
1185 + "uid-safe": "~2.1.5"
1186 + },
1187 + "dependencies": {
1188 + "cookie": {
1189 + "version": "0.4.1",
1190 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
1191 + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
1192 + },
1193 + "depd": {
1194 + "version": "2.0.0",
1195 + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
1196 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
1197 + },
1198 + "safe-buffer": {
1199 + "version": "5.2.1",
1200 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1201 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1202 + }
1203 + }
1204 + },
1205 + "filelist": {
1206 + "version": "1.0.2",
1207 + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
1208 + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
1209 + "requires": {
1210 + "minimatch": "^3.0.4"
1211 + }
1212 + },
1213 + "finalhandler": {
1214 + "version": "1.1.2",
1215 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
1216 + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
1217 + "requires": {
1218 + "debug": "2.6.9",
1219 + "encodeurl": "~1.0.2",
1220 + "escape-html": "~1.0.3",
1221 + "on-finished": "~2.3.0",
1222 + "parseurl": "~1.3.3",
1223 + "statuses": "~1.5.0",
1224 + "unpipe": "~1.0.0"
1225 + }
1226 + },
1227 + "follow-redirects": {
1228 + "version": "1.14.5",
1229 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
1230 + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA=="
1231 + },
1232 + "forwarded": {
1233 + "version": "0.2.0",
1234 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1235 + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
1236 + },
1237 + "fresh": {
1238 + "version": "0.5.2",
1239 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1240 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
1241 + },
1242 + "has-flag": {
1243 + "version": "3.0.0",
1244 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1245 + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
1246 + },
1247 + "http-errors": {
1248 + "version": "1.7.2",
1249 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1250 + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1251 + "requires": {
1252 + "depd": "~1.1.2",
1253 + "inherits": "2.0.3",
1254 + "setprototypeof": "1.1.1",
1255 + "statuses": ">= 1.5.0 < 2",
1256 + "toidentifier": "1.0.0"
1257 + }
1258 + },
1259 + "iconv-lite": {
1260 + "version": "0.4.24",
1261 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1262 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1263 + "requires": {
1264 + "safer-buffer": ">= 2.1.2 < 3"
1265 + }
1266 + },
1267 + "inherits": {
1268 + "version": "2.0.3",
1269 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1270 + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1271 + },
1272 + "ipaddr.js": {
1273 + "version": "1.9.1",
1274 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1275 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1276 + },
1277 + "isarray": {
1278 + "version": "1.0.0",
1279 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1280 + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
1281 + },
1282 + "jake": {
1283 + "version": "10.8.2",
1284 + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
1285 + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
1286 + "requires": {
1287 + "async": "0.9.x",
1288 + "chalk": "^2.4.2",
1289 + "filelist": "^1.0.1",
1290 + "minimatch": "^3.0.4"
1291 + }
1292 + },
1293 + "media-typer": {
1294 + "version": "0.3.0",
1295 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1296 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
1297 + },
1298 + "merge-descriptors": {
1299 + "version": "1.0.1",
1300 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1301 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
1302 + },
1303 + "methods": {
1304 + "version": "1.1.2",
1305 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1306 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
1307 + },
1308 + "mime": {
1309 + "version": "1.6.0",
1310 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1311 + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1312 + },
1313 + "mime-db": {
1314 + "version": "1.51.0",
1315 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
1316 + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
1317 + },
1318 + "mime-types": {
1319 + "version": "2.1.34",
1320 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
1321 + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
1322 + "requires": {
1323 + "mime-db": "1.51.0"
1324 + }
1325 + },
1326 + "minimatch": {
1327 + "version": "3.0.4",
1328 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1329 + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1330 + "requires": {
1331 + "brace-expansion": "^1.1.7"
1332 + }
1333 + },
1334 + "ms": {
1335 + "version": "2.0.0",
1336 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1337 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1338 + },
1339 + "mysql": {
1340 + "version": "2.18.1",
1341 + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
1342 + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
1343 + "requires": {
1344 + "bignumber.js": "9.0.0",
1345 + "readable-stream": "2.3.7",
1346 + "safe-buffer": "5.1.2",
1347 + "sqlstring": "2.3.1"
1348 + }
1349 + },
1350 + "negotiator": {
1351 + "version": "0.6.2",
1352 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
1353 + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
1354 + },
1355 + "oauth": {
1356 + "version": "0.9.15",
1357 + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
1358 + "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
1359 + },
1360 + "on-finished": {
1361 + "version": "2.3.0",
1362 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1363 + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1364 + "requires": {
1365 + "ee-first": "1.1.1"
1366 + }
1367 + },
1368 + "on-headers": {
1369 + "version": "1.0.2",
1370 + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1371 + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
1372 + },
1373 + "parseurl": {
1374 + "version": "1.3.3",
1375 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1376 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1377 + },
1378 + "passport": {
1379 + "version": "0.5.0",
1380 + "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz",
1381 + "integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==",
1382 + "requires": {
1383 + "passport-strategy": "1.x.x",
1384 + "pause": "0.0.1"
1385 + }
1386 + },
1387 + "passport-kakao": {
1388 + "version": "1.0.1",
1389 + "resolved": "https://registry.npmjs.org/passport-kakao/-/passport-kakao-1.0.1.tgz",
1390 + "integrity": "sha512-uItaYRVrTHL6iGPMnMZvPa/O1GrAdh/V6EMjOHcFlQcVroZ9wgG7BZ5PonMNJCxfHQ3L2QVNRnzhKWUzSsumbw==",
1391 + "requires": {
1392 + "passport-oauth2": "~1.1.2",
1393 + "pkginfo": "~0.3.0"
1394 + }
1395 + },
1396 + "passport-oauth2": {
1397 + "version": "1.1.2",
1398 + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.1.2.tgz",
1399 + "integrity": "sha1-vXFjsbYJA3GGjcTvb58uHkzEuUg=",
1400 + "requires": {
1401 + "oauth": "0.9.x",
1402 + "passport-strategy": "1.x.x",
1403 + "uid2": "0.0.x"
1404 + }
1405 + },
1406 + "passport-strategy": {
1407 + "version": "1.0.0",
1408 + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
1409 + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
1410 + },
1411 + "path-to-regexp": {
1412 + "version": "0.1.7",
1413 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1414 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1415 + },
1416 + "pause": {
1417 + "version": "0.0.1",
1418 + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
1419 + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
1420 + },
1421 + "pkginfo": {
1422 + "version": "0.3.1",
1423 + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
1424 + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE="
1425 + },
1426 + "process-nextick-args": {
1427 + "version": "2.0.1",
1428 + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
1429 + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
1430 + },
1431 + "proxy-addr": {
1432 + "version": "2.0.7",
1433 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1434 + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1435 + "requires": {
1436 + "forwarded": "0.2.0",
1437 + "ipaddr.js": "1.9.1"
1438 + }
1439 + },
1440 + "qs": {
1441 + "version": "6.7.0",
1442 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
1443 + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
1444 + },
1445 + "random-bytes": {
1446 + "version": "1.0.0",
1447 + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
1448 + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
1449 + },
1450 + "range-parser": {
1451 + "version": "1.2.1",
1452 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1453 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1454 + },
1455 + "raw-body": {
1456 + "version": "2.4.0",
1457 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
1458 + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
1459 + "requires": {
1460 + "bytes": "3.1.0",
1461 + "http-errors": "1.7.2",
1462 + "iconv-lite": "0.4.24",
1463 + "unpipe": "1.0.0"
1464 + }
1465 + },
1466 + "readable-stream": {
1467 + "version": "2.3.7",
1468 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
1469 + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
1470 + "requires": {
1471 + "core-util-is": "~1.0.0",
1472 + "inherits": "~2.0.3",
1473 + "isarray": "~1.0.0",
1474 + "process-nextick-args": "~2.0.0",
1475 + "safe-buffer": "~5.1.1",
1476 + "string_decoder": "~1.1.1",
1477 + "util-deprecate": "~1.0.1"
1478 + }
1479 + },
1480 + "safe-buffer": {
1481 + "version": "5.1.2",
1482 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1483 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1484 + },
1485 + "safer-buffer": {
1486 + "version": "2.1.2",
1487 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1488 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1489 + },
1490 + "send": {
1491 + "version": "0.17.1",
1492 + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1493 + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1494 + "requires": {
1495 + "debug": "2.6.9",
1496 + "depd": "~1.1.2",
1497 + "destroy": "~1.0.4",
1498 + "encodeurl": "~1.0.2",
1499 + "escape-html": "~1.0.3",
1500 + "etag": "~1.8.1",
1501 + "fresh": "0.5.2",
1502 + "http-errors": "~1.7.2",
1503 + "mime": "1.6.0",
1504 + "ms": "2.1.1",
1505 + "on-finished": "~2.3.0",
1506 + "range-parser": "~1.2.1",
1507 + "statuses": "~1.5.0"
1508 + },
1509 + "dependencies": {
1510 + "ms": {
1511 + "version": "2.1.1",
1512 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1513 + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1514 + }
1515 + }
1516 + },
1517 + "serve-static": {
1518 + "version": "1.14.1",
1519 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1520 + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1521 + "requires": {
1522 + "encodeurl": "~1.0.2",
1523 + "escape-html": "~1.0.3",
1524 + "parseurl": "~1.3.3",
1525 + "send": "0.17.1"
1526 + }
1527 + },
1528 + "setprototypeof": {
1529 + "version": "1.1.1",
1530 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1531 + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1532 + },
1533 + "sqlstring": {
1534 + "version": "2.3.1",
1535 + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
1536 + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
1537 + },
1538 + "statuses": {
1539 + "version": "1.5.0",
1540 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1541 + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1542 + },
1543 + "string_decoder": {
1544 + "version": "1.1.1",
1545 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1546 + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1547 + "requires": {
1548 + "safe-buffer": "~5.1.0"
1549 + }
1550 + },
1551 + "supports-color": {
1552 + "version": "5.5.0",
1553 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1554 + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1555 + "requires": {
1556 + "has-flag": "^3.0.0"
1557 + }
1558 + },
1559 + "toidentifier": {
1560 + "version": "1.0.0",
1561 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1562 + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1563 + },
1564 + "type-is": {
1565 + "version": "1.6.18",
1566 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1567 + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1568 + "requires": {
1569 + "media-typer": "0.3.0",
1570 + "mime-types": "~2.1.24"
1571 + }
1572 + },
1573 + "uid-safe": {
1574 + "version": "2.1.5",
1575 + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
1576 + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
1577 + "requires": {
1578 + "random-bytes": "~1.0.0"
1579 + }
1580 + },
1581 + "uid2": {
1582 + "version": "0.0.4",
1583 + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
1584 + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
1585 + },
1586 + "underscore": {
1587 + "version": "1.13.1",
1588 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
1589 + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
1590 + },
1591 + "unpipe": {
1592 + "version": "1.0.0",
1593 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1594 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1595 + },
1596 + "util-deprecate": {
1597 + "version": "1.0.2",
1598 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1599 + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1600 + },
1601 + "utils-merge": {
1602 + "version": "1.0.1",
1603 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1604 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1605 + },
1606 + "vary": {
1607 + "version": "1.1.2",
1608 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1609 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1610 + }
1611 + }
1612 +}
1 +{
2 + "name": "abcd",
3 + "version": "1.0.0",
4 + "description": "",
5 + "main": "app.js",
6 + "scripts": {
7 + "test": "echo \"Error: no test specified\" && exit 1"
8 + },
9 + "keywords": [],
10 + "author": "",
11 + "license": "ISC",
12 + "dependencies": {
13 + "axios": "^0.24.0",
14 + "body-parser": "^1.19.0",
15 + "ejs": "^3.1.6",
16 + "express": "^4.17.1",
17 + "express-mysql-session": "^2.1.7",
18 + "express-session": "^1.17.2",
19 + "mysql": "^2.18.1",
20 + "passport": "^0.5.0",
21 + "passport-kakao": "^1.0.1"
22 + }
23 +}
This diff could not be displayed because it is too large.
1 +const express = require("express");
2 +const router = express.Router();
3 +const mysql = require("mysql");
4 +
5 +router.use(express.urlencoded({ extended: false }));
6 +
7 +const conn = {
8 + host: "localhost",
9 + port: "3306",
10 + user: "root",
11 + password: "@Binocchio66",
12 + database: "healthassistant",
13 +};
14 +
15 +let testQuery;
16 +
17 +const connection = mysql.createConnection(conn); // DB 커넥션 생성
18 +connection.connect(); // DB접속
19 +
20 +router.get("/", (req, res, next) => {
21 + testQuery = `SELECT * FROM userHealth WHERE username ="${req.user.nickname}"`;
22 + connection.query(testQuery, (err, results, fields) => {
23 + if (!err) {
24 + let myArr_mon = new Array();
25 + let myArr_tue = new Array();
26 + let myArr_wed = new Array();
27 + let myArr_thu = new Array();
28 + let myArr_fri = new Array();
29 + let myArr_sat = new Array();
30 + let myArr_sun = new Array();
31 + for (let i = 0; i < results.length; i++) {
32 + if (results[i].day == "월") {
33 + myArr_mon.push(results[i]);
34 + }
35 + }
36 + for (let i = 0; i < results.length; i++) {
37 + if (results[i].day == "화") {
38 + myArr_tue.push(results[i]);
39 + }
40 + }
41 + for (let i = 0; i < results.length; i++) {
42 + if (results[i].day == "수") {
43 + myArr_wed.push(results[i]);
44 + }
45 + }
46 + for (let i = 0; i < results.length; i++) {
47 + if (results[i].day == "목") {
48 + myArr_thu.push(results[i]);
49 + }
50 + }
51 + for (let i = 0; i < results.length; i++) {
52 + if (results[i].day == "금") {
53 + myArr_fri.push(results[i]);
54 + }
55 + }
56 + for (let i = 0; i < results.length; i++) {
57 + if (results[i].day == "토") {
58 + myArr_sat.push(results[i]);
59 + }
60 + }
61 + for (let i = 0; i < results.length; i++) {
62 + if (results[i].day == "일") {
63 + myArr_sun.push(results[i]);
64 + }
65 + }
66 + res.render("daySelect", {
67 + arr_mon: myArr_mon,
68 + arr_tue: myArr_tue,
69 + arr_wed: myArr_wed,
70 + arr_thu: myArr_thu,
71 + arr_fri: myArr_fri,
72 + arr_sat: myArr_sat,
73 + arr_sun: myArr_sun,
74 + });
75 + } else {
76 + console.log(err);
77 + }
78 + });
79 +});
80 +
81 +
82 +module.exports = router;
1 +const express = require("express");
2 +const router = express.Router();
3 +const passport = require("passport");
4 +const axios = require("axios");
5 +const KakaoStrategy = require("passport-kakao").Strategy;
6 +const session = require("express-session");
7 +const mysql = require("mysql");
8 +
9 +passport.serializeUser(function (user, done) {
10 + // console.log("serialized");
11 + done(null, user);
12 +});
13 +passport.deserializeUser(function (user, done) {
14 + // console.log("deserialized");
15 + done(null, user);
16 +});
17 +
18 +router.use(session({ secret: "anything" }));
19 +router.use(passport.initialize());
20 +router.use(passport.session());
21 +
22 +passport.use(
23 + "kakao-login",
24 + new KakaoStrategy(
25 + {
26 + clientID: "359a37c3d9b0bec98aab1f2882447b24",
27 + callbackURL: "/auth/kakao/callback",
28 + clientSecret: "XvRp0bV6dZ8aj9f7ApYCT0ZoeDEL9cGi",
29 + },
30 + async (accessToken, refreshToken, profile, done) => {
31 + console.log(accessToken);
32 + console.log(profile);
33 + return done(null, {
34 + //req.user가 되는 부분
35 + user_id: profile._json.id,
36 + nickname: profile._json.properties.nickname,
37 + });
38 + }
39 + )
40 +);
41 +router.get("/", (req, res) => {
42 + res.render("index", {
43 + title: "안녕하세요",
44 + });
45 +});
46 +
47 +router.get("/auth/kakao", passport.authenticate("kakao-login"));
48 +
49 +router.get(
50 + "/auth/kakao/callback",
51 + passport.authenticate("kakao-login", {
52 + failureRedirect: "/failure",
53 + }),
54 + (req, res) => {
55 + res.redirect("/user");
56 + }
57 +);
58 +
59 +router.get("/auth/logout/kakao", function (req, res) {
60 + req.logout();
61 + res.redirect("/");
62 +});
63 +
64 +module.exports = router;
1 +const express = require("express");
2 +const router = express.Router();
3 +const mysql = require("mysql");
4 +
5 +router.use(express.urlencoded({ extended: false }));
6 +
7 +const conn = {
8 + host: "localhost",
9 + port: "3306",
10 + user: "root",
11 + password: "@Binocchio66",
12 + database: "healthassistant",
13 +};
14 +
15 +let testQuery;
16 +
17 +const connection = mysql.createConnection(conn); // DB 커넥션 생성
18 +connection.connect(); // DB접속
19 +
20 +router.get("/", (req, res) => {
21 + testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
22 + connection.query(testQuery, (err, results, field) => {
23 + if (err) {
24 + console.log(err);
25 + } else {
26 + console.log(results);
27 + res.render("myHealth", {
28 + arr1: results,
29 + });
30 + }
31 + });
32 +});
33 +
34 +module.exports = router;
1 +const express = require("express");
2 +const router = express.Router();
3 +const mysql = require("mysql");
4 +
5 +router.use(express.urlencoded({ extended: false }));
6 +
7 +const conn = {
8 + host: "localhost",
9 + port: "3306",
10 + user: "root",
11 + password: "@Binocchio66",
12 + database: "healthassistant",
13 +};
14 +
15 +let testQuery;
16 +
17 +const connection = mysql.createConnection(conn); // DB 커넥션 생성
18 +connection.connect(); // DB접속
19 +
20 +router.get("/", (req, res) => {
21 + testQuery = `SELECT * FROM user_info WHERE username="${req.user.nickname}"`;
22 + connection.query(testQuery, (err, results, fields) => {
23 + if (!err) {
24 + const userHeight = results[0].userHeight;
25 + const userWeight = results[0].userWeight;
26 + testQuery = `SELECT * FROM user_info WHERE userWeight <= (${userWeight} + 5) and userWeight >= (${userWeight} -5 ) and userHeight <= (${userHeight} +5) and userHeight >= (${userHeight} -5) and username != "${req.user.nickname}" `;
27 + connection.query(testQuery, (err, results, fields) => {
28 + if (err) {
29 + console.log(err);
30 + } else {
31 + res.render("otherUser", {
32 + userlist: results,
33 + });
34 + }
35 + });
36 + }
37 + });
38 +});
39 +
40 +router.get("/show/:username", (req, res) => {
41 + const username = req.params.username;
42 + testQuery = `SELECT * FROM userHealth WHERE username = "${username}"`;
43 + connection.query(testQuery, (err, results, field) => {
44 + if (err) {
45 + console.log(err);
46 + } else {
47 + res.render("otherHealth", {
48 + arr1: results,
49 + username: username,
50 + });
51 + }
52 + });
53 +});
54 +
55 +module.exports = router;
1 +const express = require("express");
2 +const router = express.Router();
3 +const mysql = require("mysql");
4 +const test = require("../js/examples");
5 +
6 +const conn = {
7 + host: "localhost",
8 + port: "3306",
9 + user: "root",
10 + password: "@Binocchio66",
11 + database: "healthassistant",
12 +};
13 +
14 +let day, day_eng;
15 +let myArr, myArr2;
16 +let cnt = 0;
17 +
18 +const connection = mysql.createConnection(conn); // DB 커넥션 생성
19 +connection.connect(); // DB접속
20 +
21 +router.use(express.urlencoded({ extended: false }));
22 +
23 +router.get("/", (req, res, next) => {
24 + res.render("setup");
25 +});
26 +
27 +router.post("/", (req, res, next) => {
28 + let testQuery = `INSERT INTO userHealth (username, day, way, part, setNumber, number, breakTime, Id) VALUES ("${req.user.nickname}", "${req.body.day}","${req.body.way}","${req.body.part}","${req.body.setNumber}","${req.body.number}","${req.body.breakTime}","${cnt}")`;
29 + cnt++;
30 + connection.query(testQuery, (err, results, fields) => {
31 + //results에 배열로 db값이 저장됨.
32 + if (err) {
33 + console.log(err);
34 + }
35 + });
36 + res.redirect("/daySelect");
37 +});
38 +
39 +router.get("/Monday", (req, res, next) => {
40 + let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
41 + connection.query(testQuery, (err, results, fields) => {
42 + if (!err) {
43 + day = "월";
44 + day_eng = "Monday";
45 + myArr = new Array();
46 + myArr2 = new Array();
47 + for (let i = 0; i < results.length; i++) {
48 + if (results[i].day == "월") {
49 + myArr2.push(results[i]);
50 + }
51 + }
52 + for (let i = 0; i < results.length; i++) {
53 + myArr.push(results[i].day);
54 + }
55 + if (myArr.findIndex((e) => e === "월") !== -1) {
56 + console.log("월요일 루틴이 있습니다.");
57 + res.render("startHealth", {
58 + day: "월",
59 + arr1: myArr2,
60 + });
61 + } else {
62 + console.log("월요일 루틴이 없습니다.");
63 + res.render("setup");
64 + }
65 + } else {
66 + console.log(err);
67 + }
68 + });
69 +});
70 +
71 +router.get("/Tuesday", (req, res, next) => {
72 + let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
73 + connection.query(testQuery, (err, results, fields) => {
74 + if (!err) {
75 + day = "화";
76 + day_eng = "Tuesday";
77 + myArr = new Array();
78 + myArr2 = new Array();
79 + for (let i = 0; i < results.length; i++) {
80 + if (results[i].day == "화") {
81 + myArr2.push(results[i]);
82 + }
83 + }
84 + for (let i = 0; i < results.length; i++) {
85 + myArr.push(results[i].day);
86 + }
87 + if (myArr.findIndex((e) => e === "화") !== -1) {
88 + console.log("화요일 루틴이 있습니다.");
89 + res.render("startHealth", {
90 + day: "화",
91 + arr1: myArr2,
92 + });
93 + } else {
94 + console.log("화요일 루틴이 없습니다.");
95 + res.render("setup");
96 + }
97 + } else {
98 + console.log(err);
99 + }
100 + });
101 +});
102 +
103 +router.get("/Wednesday", (req, res, next) => {
104 + let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
105 + connection.query(testQuery, (err, results, fields) => {
106 + if (!err) {
107 + day = "수";
108 + day_eng = "Wednesday";
109 + myArr = new Array();
110 + myArr2 = new Array();
111 + for (let i = 0; i < results.length; i++) {
112 + if (results[i].day == "수") {
113 + myArr2.push(results[i]);
114 + }
115 + }
116 + for (let i = 0; i < results.length; i++) {
117 + myArr.push(results[i].day);
118 + }
119 + if (myArr.findIndex((e) => e === "수") !== -1) {
120 + console.log("수요일 루틴이 있습니다.");
121 + res.render("startHealth", {
122 + day: "수",
123 + arr1: myArr2,
124 + });
125 + } else {
126 + console.log("수요일 루틴이 없습니다.");
127 + res.render("setup");
128 + }
129 + } else {
130 + console.log(err);
131 + }
132 + });
133 +});
134 +
135 +router.get("/Thursday", (req, res, next) => {
136 + let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
137 + connection.query(testQuery, (err, results, fields) => {
138 + if (!err) {
139 + day = "목";
140 + day_eng = "Thursday";
141 + myArr = new Array();
142 + myArr2 = new Array();
143 + for (let i = 0; i < results.length; i++) {
144 + if (results[i].day == "목") {
145 + myArr2.push(results[i]);
146 + }
147 + }
148 + for (let i = 0; i < results.length; i++) {
149 + myArr.push(results[i].day);
150 + }
151 + if (myArr.findIndex((e) => e === "목") !== -1) {
152 + console.log("목요일 루틴이 있습니다.");
153 + res.render("startHealth", {
154 + day: "목",
155 + arr1: myArr2,
156 + });
157 + } else {
158 + console.log("목요일 루틴이 없습니다.");
159 + res.render("setup");
160 + }
161 + } else {
162 + console.log(err);
163 + }
164 + });
165 +});
166 +
167 +router.get("/Friday", (req, res, next) => {
168 + let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
169 + connection.query(testQuery, (err, results, fields) => {
170 + if (!err) {
171 + day = "금";
172 + day_eng = "Friday";
173 + myArr = new Array();
174 + myArr2 = new Array();
175 + for (let i = 0; i < results.length; i++) {
176 + if (results[i].day == "금") {
177 + myArr2.push(results[i]);
178 + }
179 + }
180 + for (let i = 0; i < results.length; i++) {
181 + myArr.push(results[i].day);
182 + }
183 + if (myArr.findIndex((e) => e === "금") !== -1) {
184 + console.log("금요일 루틴이 있습니다.");
185 + res.render("startHealth", {
186 + day: "금",
187 + arr1: myArr2,
188 + });
189 + } else {
190 + console.log("금요일 루틴이 없습니다.");
191 + res.render("setup");
192 + }
193 + } else {
194 + console.log(err);
195 + }
196 + });
197 +});
198 +
199 +router.get("/Saturday", (req, res, next) => {
200 + let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
201 + connection.query(testQuery, (err, results, fields) => {
202 + if (!err) {
203 + day = "토";
204 + day_eng = "Saturday";
205 + myArr = new Array();
206 + myArr2 = new Array();
207 + for (let i = 0; i < results.length; i++) {
208 + if (results[i].day == "토") {
209 + myArr2.push(results[i]);
210 + }
211 + }
212 + for (let i = 0; i < results.length; i++) {
213 + myArr.push(results[i].day);
214 + }
215 + if (myArr.findIndex((e) => e === "토") !== -1) {
216 + console.log("토요일 루틴이 있습니다.");
217 + res.render("startHealth", {
218 + day: "토",
219 + arr1: myArr2,
220 + });
221 + } else {
222 + console.log("토요일 루틴이 없습니다.");
223 + res.render("setup");
224 + }
225 + } else {
226 + console.log(err);
227 + }
228 + });
229 +});
230 +
231 +router.get("/Sunday", (req, res, next) => {
232 + let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
233 + connection.query(testQuery, (err, results, fields) => {
234 + if (!err) {
235 + day = "일";
236 + day_eng = "Sunday";
237 + myArr = new Array();
238 + myArr2 = new Array();
239 + for (let i = 0; i < results.length; i++) {
240 + if (results[i].day == "일") {
241 + myArr2.push(results[i]);
242 + }
243 + }
244 + for (let i = 0; i < results.length; i++) {
245 + myArr.push(results[i].day);
246 + }
247 + if (myArr.findIndex((e) => e === "일") !== -1) {
248 + console.log("일요일 루틴이 있습니다.");
249 + res.render("startHealth", {
250 + day: "일",
251 + arr1: myArr2,
252 + });
253 + } else {
254 + console.log("일요일 루틴이 없습니다.");
255 + res.render("setup");
256 + }
257 + } else {
258 + console.log(err);
259 + }
260 + });
261 +});
262 +
263 +router.get("/remove/:Id", (req, res, next) => {
264 + let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
265 + const Id = req.params.Id;
266 + connection.query(testQuery, (err, results, fields) => {
267 + if (!err) {
268 + myArr = new Array();
269 + for (let i = 0; i < results.length; i++) {
270 + if (results[i].day == day) {
271 + myArr.push(results[i]);
272 + }
273 + }
274 + testQuery = `DELETE FROM userHealth WHERE id = ${Id}`;
275 + connection.query(testQuery, (err, results, fields) => {
276 + if (!err) {
277 + res.send(
278 + `<script>alert("삭제 완료!"); location.href='/setup/${day_eng}';</script>`
279 + );
280 + } else {
281 + console.log(err);
282 + }
283 + });
284 + } else {
285 + console.log(err);
286 + }
287 + });
288 +});
289 +
290 +router.get("/edit/:Id", (req, res, next) => {
291 + res.render("editHealth", {
292 + day: day,
293 + arr1: myArr2,
294 + Id: req.params.Id,
295 + });
296 +});
297 +
298 +router.post("/edit/:Id", (req, res, next) => {
299 + const Id = req.params.Id;
300 + let testQuery = `UPDATE userHealth SET way="${req.body.way}", part="${req.body.part}", setNumber="${req.body.setNumber}", number="${req.body.number}", breakTime="${req.body.breakTime}" WHERE way = "${Id}"`;
301 + connection.query(testQuery, (err, results, field) => {
302 + if (!err) {
303 + console.log("수정완료!");
304 + res.redirect(`/setup/${day_eng}`);
305 + } else {
306 + console.log(err);
307 + }
308 + });
309 +});
310 +
311 +module.exports = router;
1 +const express = require("express");
2 +const router = express.Router();
3 +const mysql = require("mysql");
4 +
5 +const conn = {
6 + host: "localhost",
7 + port: "3306",
8 + user: "root",
9 + password: "@Binocchio66",
10 + database: "healthassistant",
11 +};
12 +
13 +const connection = mysql.createConnection(conn); // DB 커넥션 생성
14 +connection.connect(); // DB접속
15 +
16 +router.use(express.urlencoded({ extended: false }));
17 +
18 +router.get("/", (req, res, next) => {
19 + console.log("로그인 성공!");
20 +
21 + let testQuery = `SELECT * FROM user_info WHERE username="${req.user.nickname}"`;
22 +
23 + connection.query(testQuery, (err, results, fields) => {
24 + if (results.length == 0) {
25 + res.render("user", {
26 + title: "정보 입력",
27 + });
28 + } else {
29 + console.log("정보가 있는 유저입니다.");
30 + res.redirect("/daySelect");
31 + }
32 + });
33 +});
34 +
35 +router.post("/", (req, res) => {
36 + const height = req.body.height;
37 + const weight = req.body.weight;
38 +
39 + let testQuery = `INSERT INTO user_info (username, userHeight, userWeight) values ("${req.user.nickname}", ${height}, ${weight})`;
40 + // let testQuery = `INSERT INTO 'user_info' ('username', 'userHeight)`;
41 +
42 + connection.query(testQuery, (err, results, fields) => {
43 + if (err) {
44 + console.log(err);
45 + }
46 + });
47 + res.redirect("/daySelect");
48 + // res.redirect("/");
49 +});
50 +
51 +module.exports = router;
1 +<!DOCTYPE html>
2 +<html lang="ko">
3 + <head>
4 + <meta charset="UTF-8" />
5 + <title>Setup</title>
6 + <link
7 + href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
8 + rel="stylesheet"
9 + />
10 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
11 + <!-- Font Awesome icons (free version)-->
12 + <script
13 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
14 + crossorigin="anonymous"
15 + ></script>
16 + <!-- Simple line icons-->
17 + <link
18 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
19 + rel="stylesheet"
20 + />
21 + <!-- Google fonts-->
22 + <link
23 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
24 + rel="stylesheet"
25 + type="text/css"
26 + />
27 + <link rel="preconnect" href="https://fonts.googleapis.com" />
28 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
29 + <link
30 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Gowun+Dodum&family=Do+Hyeon&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
31 + rel="stylesheet"
32 + />
33 + <link rel="stylesheet" href="/stylesheets/styles.css" />
34 + <style>
35 + .title-fontA {
36 + font-family: 'Fuzzy Bubbles', cursive;
37 + }
38 + .title-fontB {
39 + font-family: 'Anton', sans-serif;
40 + }
41 + .day-fontA {
42 + font-family: 'Gowun Dodum', sans-serif;
43 + font-size: 35px;
44 + color: black;
45 + }
46 + </style>
47 + </head>
48 + <body>
49 + <div class="navbar navbar-expand-lg navbar-light bgtop">
50 + <div class="container text-center mx-4 my-1">
51 + <a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
52 + </div>
53 + <div class="mx-3">
54 + <a class="otherUser title-fontB" href="/otherUser">OTHER</a>
55 + </div>
56 + <div class="mx-3">
57 + <a class="otherUser title-fontB" href="/myHealth">MY</a>
58 + </div>
59 + <div class="mx-3">
60 + <a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
61 + </div>
62 + </div>
63 + <div class="container">
64 + <div class="row row-cols-1 row-cols-md-4 g-4 mt-4">
65 + <div class="col">
66 + <a href="/setup/Monday">
67 + <div class="card" style="width: 75%">
68 + <div class="card-body">
69 + <h5 class="card-title text-center day-fontA">월요일</h5>
70 + <p class="card-text">
71 +
72 + <% if(arr_mon.length ==0) { %>
73 + <p>월요일 운동이 없습니다! </p>
74 + <% } else { %>
75 + <ul>
76 + <li><%= arr_mon[0].way %></li>
77 + </ul>
78 + <% } %>
79 +
80 + </p>
81 + </div>
82 + </div>
83 + </a>
84 + </div>
85 + <div class="col">
86 + <a href="/setup/Tuesday">
87 + <div class="card" style="width: 75%">
88 + <div class="card-body">
89 + <h5 class="card-title text-center day-fontA">화요일</h5>
90 + <p class="card-text">
91 + <% if(arr_tue.length ==0) { %>
92 + <p>화요일 운동이 없습니다!</p>
93 + <% } else { %>
94 + <ul>
95 + <li><%= arr_tue[0].way %></li>
96 + </ul>
97 + <% } %>
98 + </p>
99 + </div>
100 + </div>
101 + </a>
102 + </div>
103 + <div class="col">
104 + <a href="/setup/Wednesday">
105 + <div class="card" style="width: 75%">
106 + <div class="card-body">
107 + <h5 class="card-title text-center day-fontA">수요일</h5>
108 + <p class="card-text">
109 + <% if(arr_wed.length ==0) { %>
110 + <p>수요일 운동이 없습니다!</p>
111 + <% } else { %>
112 + <ul>
113 + <li><%= arr_wed[0].way %></li>
114 + </ul>
115 + <% } %>
116 + </ul>
117 + </p>
118 + </div>
119 + </div>
120 + </a>
121 + </div>
122 + <div class="col">
123 + <a href="/setup/Thursday">
124 + <div class="card" style="width: 75%">
125 + <div class="card-body">
126 + <h5 class="card-title text-center day-fontA">목요일</h5>
127 + <p class="card-text">
128 +
129 + <% if(arr_thu.length ==0) { %>
130 + <p>목요일 운동이 없습니다!</p>
131 + <% } else { %>
132 + <ul>
133 + <li><%= arr_thu[0].way %></li>
134 + </ul>
135 + <% } %>
136 +
137 + </p>
138 + </div>
139 + </div>
140 + </a>
141 + </div>
142 + <div class="col">
143 + <a href="/setup/Friday">
144 + <div class="card mt-5" style="width: 75%">
145 + <div class="card-body">
146 + <h5 class="card-title text-center day-fontA">금요일</h5>
147 + <p class="card-text">
148 +
149 + <% if(arr_fri.length ==0) { %>
150 + <p>금요일 운동이 없습니다!</p>
151 + <% } else { %>
152 + <ul>
153 + <li><%= arr_fri[0].way %></li>
154 + </ul>
155 + <% } %>
156 +
157 + </p>
158 + </div>
159 + </div>
160 + </a>
161 + </div>
162 + <div class="col">
163 + <a href="/setup/Saturday">
164 + <div class="card mt-5" style="width: 75%">
165 + <div class="card-body">
166 + <h5 class="card-title text-center day-fontA">토요일</h5>
167 + <p class="card-text">
168 +
169 + <% if(arr_sat.length ==0) { %>
170 + <p>토요일 운동이 없습니다!</p>
171 + <% } else { %>
172 + <ul>
173 + <li><%= arr_sat[0].way %></li>
174 + </ul>
175 + <% } %>
176 + </p>
177 + </div>
178 + </div>
179 + </a>
180 + </div>
181 + <div class="col">
182 + <a href="setup/Sunday">
183 + <div class="card mt-5" style="width: 75%">
184 + <div class="card-body">
185 + <h5 class="card-title text-center day-fontA">일요일</h5>
186 + <p class="card-text">
187 +
188 + <% if(arr_sun.length ==0) { %>
189 + <p>일요일 운동이 없습니다!</p>
190 + <% } else { %>
191 + <ul>
192 + <li><%= arr_sun[0].way %></li>
193 + </ul>
194 + <% } %>
195 + </p>
196 + </div>
197 + </div>
198 + </a>
199 + </div>
200 + </div>
201 + </div>
202 +
203 +
204 +
205 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
206 + <script src="/static/scripts.js"></script>
207 + </body>
208 +</html>
1 +<!DOCTYPE html>
2 +<html lang="en">
3 + <head>
4 + <meta charset="UTF-8" />
5 + <title><%= day %>요일 운동 시작!</title>
6 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
7 + <!-- Font Awesome icons (free version)-->
8 + <script
9 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
10 + crossorigin="anonymous"
11 + ></script>
12 + <!-- Simple line icons-->
13 + <link
14 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
15 + rel="stylesheet"
16 + />
17 + <!-- Google fonts-->
18 + <link
19 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
20 + rel="stylesheet"
21 + type="text/css"
22 + />
23 + <!-- Core theme CSS (includes Bootstrap)-->
24 + <link rel="preconnect" href="https://fonts.googleapis.com" />
25 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
26 + <link
27 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Anton&family=Jua&family=Fuzzy+Bubbles:wght@700&display=swap"
28 + rel="stylesheet"
29 + />
30 + <link rel="stylesheet" href="/stylesheets/styles.css" />
31 + <style>
32 + .title-fontA {
33 + font-family: 'Fuzzy Bubbles', cursive;
34 + }
35 + .title-fontB {
36 + font-family: 'Anton', sans-serif;
37 + }
38 + .day-fontB {
39 + font-family: 'Jua';
40 + }
41 + </style>
42 + </head>
43 +
44 + <body>
45 + <div class="navbar navbar-expand-lg navbar-light bgtop">
46 + <div class="container text-center mx-4 my-1">
47 + <a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
48 + </div>
49 + <div class="mx-3">
50 + <a class="otherUser title-fontB" href="/otherUser">OTHER</a>
51 + </div>
52 + <div class="mx-3">
53 + <a class="otherUser title-fontB" href="/myHealth">MY</a>
54 + </div>
55 + <div class="mx-3">
56 + <a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
57 + </div>
58 + </div>
59 + <section class="container">
60 + <div>
61 + <h1 class="day-fontB mt-5 text-center"><%= day%>요일 운동 수정</h1>
62 + </div>
63 + <div class="mt-5">
64 + <table class="table text-center">
65 + <tr>
66 + <th>운동 방법</th>
67 + <th>자극 부위</th>
68 + <th>세트</th>
69 + <th>횟수</th>
70 + <th>쉬는시간(초)</th>
71 + <th></th>
72 + <th></th>
73 + </tr>
74 +
75 + <% for(let i=0; i <arr1.length ;i++) {
76 + %>
77 + <% if(arr1[i].way == Id) { %>
78 + <tr>
79 + <form method="POST" action="" id="editForm">
80 + <td><input class="w-40" type="text" name="way" /></td>
81 + <td><input class="w-40" type="text" name="part" /></td>
82 + <td><input class="w-40" type="text" name="setNumber" /></td>
83 + <td><input class="w-40" type="text" name="number" /></td>
84 + <td><input class="w-40" type="text" name="breakTime" /></td>
85 + <td><button class="btn" type="submit"><i class="far fa-check-circle"></i></button></td>
86 + <td></td>
87 + </form>
88 + </tr>
89 + <% } else {%>
90 + <div>
91 + <tr>
92 + <td><%= arr1[i].way %></td>
93 + <td><%= arr1[i].part %></td>
94 + <td><%= arr1[i].setNumber %></td>
95 + <td><%= arr1[i].number %></td>
96 + <td><%= arr1[i].breakTime %></td>
97 + <td></td>
98 + <td></td>
99 + </tr>
100 + </div>
101 + <% }} %>
102 + </table>
103 + </div>
104 +</section>
105 +
106 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
107 + <script src="/static/scripts.js"></script>
108 + </body>
109 +</html>
1 +<!DOCTYPE html>
2 +<html lang="ko">
3 + <head>
4 + <meta charset="UTF-8" />
5 + <title>Health Assistant</title>
6 + <link
7 + href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
8 + rel="stylesheet"
9 + />
10 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
11 + <!-- Font Awesome icons (free version)-->
12 + <script
13 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
14 + crossorigin="anonymous"
15 + ></script>
16 + <!-- Simple line icons-->
17 + <link
18 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
19 + rel="stylesheet"
20 + />
21 + <!-- Google fonts-->
22 + <link
23 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
24 + rel="stylesheet"
25 + type="text/css"
26 + />
27 + <link rel="preconnect" href="https://fonts.googleapis.com" />
28 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
29 + <link
30 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Fuzzy+Bubbles:wght@700&display=swap"
31 + rel="stylesheet"
32 + />
33 + <link rel="stylesheet" href="/stylesheets/styles.css" />
34 + <style>
35 + .title-fontA {
36 + font-family: "Fuzzy Bubbles", cursive;
37 + }
38 + </style>
39 + </head>
40 + <body id="page-top">
41 + <nav id="sidebar-wrapper">
42 + <ul class="sidebar-nav">
43 + <li class="sidebar-brand"><a href="#page-top">Health Assistant</a></li>
44 + <li class="sidebar-nav-item"><a href="#page-top">Home</a></li>
45 + <li class="sidebar-nav-item"><a href="#about">About</a></li>
46 + <li class="sidebar-nav-item"><a href="#features">Services</a></li>
47 + </ul>
48 + </nav>
49 + <div class="navbar navbar-expand-lg navbar-light fixed-top">
50 + <a class="menu-toggle rounded" href="#"><i class="fas fa-bars"></i></a>
51 + <div class="container mx-4 my-1">
52 + <a class="navbar-brand title-fontA" href="#page-top"
53 + >Health Assistant</a
54 + >
55 + </div>
56 + </div>
57 +
58 + <!-- Header-->
59 + <header class="masthead d-flex align-items-center">
60 + <div class="container px-4 px-lg-5 text-center">
61 + <h1 class="mb-1">Health Assitant</h1>
62 + <h3 class="mb-5"><em>헬스 관리 쉽게하자!</em></h3>
63 + <a class="btn btn-dark btn-xl" href="/auth/kakao">카카오로 시작하기</a>
64 + </div>
65 + </header>
66 + <section class="content-section bg-light" id="about">
67 + <div class="container px-4 px-lg-5 text-center">
68 + <div class="row gx-4 gx-lg-5 justify-content-center">
69 + <div class="col-lg-4">
70 + <h2 class="mb-3">Programmers</h2>
71 + <p class="lead mb-5">2018102224 임준표</p>
72 + </div>
73 + <div class="col-lg-4">
74 + <h2 class="mb-3">Introduction</h2>
75 + <p class="lead mb-5">
76 + Health Assistant is a Web based program for Daily exercisers.
77 + </p>
78 + </div>
79 + <div class="col-lg-5 mt-1">
80 + <a class="btn btn-dark btn-xl" href="#features">Features</a>
81 + </div>
82 + </div>
83 + </div>
84 + </section>
85 +
86 + <section
87 + class="content-section bg-primary text-white text-center"
88 + id="features"
89 + >
90 + <div class="container px-4 px-lg-5">
91 + <div class="content-section-heading">
92 + <h3 class="text-secondary mb-0 title-fontA">Health Assistant</h3>
93 + <h2 class="mb-5">Features</h2>
94 + </div>
95 + <div class="row gx-4 gx-lg-5">
96 + <div class="col-lg-4 col-md-6 mb-5 mb-lg-0">
97 + <span class="service-icon rounded-circle mx-auto mb-3">
98 + <i class="fas fa-cogs"></i>
99 + </span>
100 + <h4><strong>효율성</strong></h4>
101 + <p class="text-faded mb-0">
102 + 요일별 부위와 운동을 정리해 <br />효율적으로 볼 수 있습니다!
103 + </p>
104 + </div>
105 + <div class="col-lg-4 col-md-0 mb-0 mb-lg-0">
106 + <span class="service-icon rounded-circle mx-auto mb-3">
107 + <div>
108 + <i class="fas fa-clock"></i>
109 + </div>
110 + </span>
111 + <h4><strong>시간관리</strong></h4>
112 + <p class="text-faded mb-0">
113 + 타이머를 통해 쉬는시간을 <br />확실하게 알 수 있습니다!
114 + </p>
115 + </div>
116 + <div class="col-lg-4 col-md-0 mb-0 mb-md-0">
117 + <span class="service-icon rounded-circle mx-auto mb-3">
118 + <i class="far fa-user-circle"></i>
119 + </span>
120 + <h4><strong>루틴추천</strong></h4>
121 + <p class="text-faded mb-0">
122 + 나와 비슷한 체형인 <br />다른사람의 루틴을 볼 수 있습니다!
123 + </p>
124 + </div>
125 + </div>
126 + </div>
127 + </section>
128 +
129 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
130 + <script src="/static/scripts.js"></script>
131 + </body>
132 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<!DOCTYPE html>
2 +<html lang="en">
3 + <head>
4 + <meta charset="UTF-8" />
5 + <title>내 운동 목록</title>
6 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
7 + <!-- Font Awesome icons (free version)-->
8 + <script
9 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
10 + crossorigin="anonymous"
11 + ></script>
12 + <!-- Simple line icons-->
13 + <link
14 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
15 + rel="stylesheet"
16 + />
17 + <!-- Google fonts-->
18 + <link
19 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
20 + rel="stylesheet"
21 + type="text/css"
22 + />
23 + <!-- Core theme CSS (includes Bootstrap)-->
24 + <link rel="preconnect" href="https://fonts.googleapis.com" />
25 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
26 + <link
27 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
28 + rel="stylesheet"
29 + />
30 + <link rel="stylesheet" href="/stylesheets/styles.css" />
31 + <style>
32 + .title-fontA {
33 + font-family: 'Fuzzy Bubbles', cursive;
34 + }
35 + .title-fontB {
36 + font-family: 'Anton', sans-serif;
37 + }
38 + .day-fontB {
39 + font-family: 'Jua';
40 + }
41 + .table-title {
42 + color: pink;
43 + font-size: 20px;
44 + }
45 + </style>
46 +
47 + </head>
48 +
49 + <body>
50 + <div class="navbar navbar-expand-lg navbar-light bgtop">
51 + <div class="container text-center mx-4 my-1">
52 + <a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
53 + </div>
54 + <div class="mx-3">
55 + <a class="otherUser title-fontB" href="/otherUser">OTHER</a>
56 + </div>
57 + <div class="mx-3">
58 + <a class="otherUser title-fontB" href="/myHealth">MY</a>
59 + </div>
60 + <div class="mx-3">
61 + <a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
62 + </div>
63 + </div>
64 + <section class="container">
65 + <div>
66 + <h1 class="mt-5 text-center day-fontB">내 운동 목록</h1>
67 + </div>
68 + <div class="mt-5">
69 + <table class="table text-center">
70 + <tr class="table-title">
71 + <th>운동 방법</th>
72 + <th>자극 부위</th>
73 + <th>세트</th>
74 + <th>횟수</th>
75 + <th>쉬는시간(초)</th>
76 + </tr>
77 + <div>
78 + <% for(let i=0; i <arr1.length ;i++) {
79 + %>
80 + <tr>
81 + <td><%= arr1[i].way %></td>
82 + <td><%= arr1[i].part %></td>
83 + <td><%= arr1[i].setNumber %></td>
84 + <td><%= arr1[i].number %></td>
85 + <td><%= arr1[i].breakTime %></td>
86 + </tr>
87 + <% } %>
88 + </div>
89 + </table>
90 + </div>
91 + <div>
92 + <button class="btn btn-lg" onclick="location.href='/setup'" style="float: right;"><i class="fas fa-plus"></i> 추가</button>
93 + </div>
94 +
95 + </section>
96 +
97 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
98 + </body>
99 +</html>
1 +<!DOCTYPE html>
2 +<html lang="en">
3 + <head>
4 + <meta charset="UTF-8" />
5 + <title>내 운동 목록</title>
6 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
7 + <!-- Font Awesome icons (free version)-->
8 + <script
9 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
10 + crossorigin="anonymous"
11 + ></script>
12 + <!-- Simple line icons-->
13 + <link
14 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
15 + rel="stylesheet"
16 + />
17 + <!-- Google fonts-->
18 + <link
19 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
20 + rel="stylesheet"
21 + type="text/css"
22 + />
23 + <!-- Core theme CSS (includes Bootstrap)-->
24 + <link rel="preconnect" href="https://fonts.googleapis.com" />
25 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
26 + <link
27 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
28 + rel="stylesheet"
29 + />
30 + <link rel="stylesheet" href="/stylesheets/styles.css" />
31 + <style>
32 + .title-fontA {
33 + font-family: 'Fuzzy Bubbles', cursive;
34 + }
35 + .title-fontB {
36 + font-family: 'Anton', sans-serif;
37 + }
38 + .table-title {
39 + color: pink;
40 + font-size: 20px;
41 + }
42 + .otheruser {
43 + font-family: 'Jua', sans-serif;
44 + }
45 + </style>
46 + </head>
47 +
48 + <body>
49 + <div class="navbar navbar-expand-lg navbar-light bgtop">
50 + <div class="container text-center mx-4 my-1">
51 + <a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
52 + </div>
53 + <div class="mx-3">
54 + <a class="otherUser title-fontB" href="/otherUser">OTHER</a>
55 + </div>
56 + <div class="mx-3">
57 + <a class="otherUser title-fontB" href="/myHealth">MY</a>
58 + </div>
59 + <div class="mx-3">
60 + <a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
61 + </div>
62 + </div>
63 + <section class="container">
64 + <div>
65 + <h1 class="otheruser mt-5 text-center"><%= username[0] %>**의 운동 목록</h1>
66 + </div>
67 + <% if(arr1.length == 0) { %>
68 + <h2 class="text-center mt-5"><%= username[0] %>**님의 운동목록이 없습니다!</h2>
69 + <% } else { %>
70 + <div class="mt-5">
71 + <table class="table text-center">
72 + <tr class="table-title">
73 + <th>운동 방법</th>
74 + <th>자극 부위</th>
75 + <th>세트</th>
76 + <th>횟수</th>
77 + <th>쉬는시간(초)</th>
78 + </tr>
79 +
80 + <div>
81 +
82 + <% for(let i=0; i <arr1.length ;i++) {
83 + %>
84 + <tr>
85 + <td><%= arr1[i].way %></td>
86 + <td><%= arr1[i].part %></td>
87 + <td><%= arr1[i].setNumber %></td>
88 + <td><%= arr1[i].number %></td>
89 + <td><%= arr1[i].breakTime %></td>
90 + </tr>
91 + <% } %>
92 + </div>
93 + <% } %>
94 +
95 +
96 + </table>
97 + </div>
98 +
99 + </section>
100 +
101 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
102 + </body>
103 +</html>
1 +<!DOCTYPE html>
2 +<html lang="en">
3 + <head>
4 + <meta charset="UTF-8" />
5 + <title>Document</title>
6 + <link
7 + href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
8 + rel="stylesheet"
9 + />
10 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
11 + <!-- Font Awesome icons (free version)-->
12 + <script
13 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
14 + crossorigin="anonymous"
15 + ></script>
16 + <!-- Simple line icons-->
17 + <link
18 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
19 + rel="stylesheet"
20 + />
21 + <!-- Google fonts-->
22 + <link
23 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
24 + rel="stylesheet"
25 + type="text/css"
26 + />
27 + <link rel="preconnect" href="https://fonts.googleapis.com" />
28 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
29 + <link
30 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
31 + rel="stylesheet"
32 + />
33 + <link rel="stylesheet" href="/stylesheets/styles.css" />
34 + <style>
35 + .title-fontA {
36 + font-family: 'Fuzzy Bubbles', cursive;
37 + }
38 + .title-fontB {
39 + font-family: 'Anton', sans-serif;
40 + }
41 + .noneuser {
42 + font-family: 'Jua', sans-serif;
43 + }
44 + </style>
45 + </head>
46 + <body>
47 + <div class="navbar navbar-expand-lg navbar-light bgtop">
48 + <div class="container text-center mx-4 my-1">
49 + <a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
50 + </div>
51 + <div class="mx-3">
52 + <a class="otherUser title-fontB" href="/otherUser">OTHER</a>
53 + </div>
54 + <div class="mx-3">
55 + <a class="otherUser title-fontB" href="/myHealth">MY</a>
56 + </div>
57 + <div class="mx-3">
58 + <a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
59 + </div>
60 + </div>
61 + <div class="container">
62 + <% if(userlist.length ==0) { %>
63 + <div class="mt-5 text-center noneuser">
64 + <h1>비슷한 체형의 사용자가 없습니다!</h1>
65 + </div>
66 + <% } else { %>
67 + <div class="row row-cols-1 row-cols-md-4 g-4 mt-4">
68 +
69 + <% for(let i =0; i <userlist.length; i++) { %>
70 + <div class="col">
71 + <a href="/otherUser/show/<%= userlist[i].username %>">
72 + <div class="card" style="width: 75%">
73 + <div class="card-body">
74 + <h5 class="card-title text-center">
75 + <%= userlist[i].username[0] %>**
76 + </h5>
77 + <p class="card-text"></p>
78 + <p><%= userlist[i].userHeight %></p>
79 + <p><%= userlist[i].userWeight %></p>
80 + </div>
81 + </div>
82 + </a>
83 + </div>
84 + <% }} %>
85 +
86 + </div>
87 + </div>
88 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
89 + </body>
90 +</html>
1 +<!DOCTYPE html>
2 +<html>
3 + <head>
4 + <meta charset="UTF-8" />
5 + <title>Setup</title>
6 + <link
7 + href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
8 + rel="stylesheet"
9 + />
10 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
11 + <!-- Font Awesome icons (free version)-->
12 + <script
13 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
14 + crossorigin="anonymous"
15 + ></script>
16 + <!-- Simple line icons-->
17 + <link
18 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
19 + rel="stylesheet"
20 + />
21 + <!-- Google fonts-->
22 + <link
23 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
24 + rel="stylesheet"
25 + type="text/css"
26 + />
27 + <link rel="preconnect" href="https://fonts.googleapis.com" />
28 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
29 + <link
30 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
31 + rel="stylesheet"
32 + />
33 + <link rel="stylesheet" href="/stylesheets/styles.css" />
34 + <style>
35 + .title-fontA {
36 + font-family: "Fuzzy Bubbles", cursive;
37 + }
38 + .title-fontB {
39 + font-family: "Anton", sans-serif;
40 + }
41 + .day-fontB {
42 + font-family: "Jua", sans-serif;
43 + }
44 + </style>
45 + <script src="/static/examples.js"></script>
46 + </head>
47 +
48 + <body id="page-top">
49 + <div class="navbar navbar-expand-lg navbar-light bgtop">
50 + <div class="container text-center mx-4 my-1">
51 + <a class="navbar-brand title-fontA" href="/daySelect"
52 + >Health Assistant</a
53 + >
54 + </div>
55 + <div class="mx-3">
56 + <a class="otherUser title-fontB" href="/otherUser">OTHER</a>
57 + </div>
58 + <div class="mx-3">
59 + <a class="otherUser title-fontB" href="/myHealth">MY</a>
60 + </div>
61 + <div class="mx-3">
62 + <a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
63 + </div>
64 + </div>
65 + <section class="container">
66 + <div>
67 + <h1 class="mt-5 text-center day-fontB">운동 추가!</h1>
68 + </div>
69 + <div class="mt-5" style="float: none; margin: 100 auto">
70 + <form
71 + class="w-50"
72 + style="float: none; margin: 0 auto"
73 + method="POST"
74 + action="/setup"
75 + >
76 + <div class="mb-3 row">
77 + <label for="staticEmail" class="col-sm-2 col-form-label"
78 + >요일</label
79 + >
80 + <div class="col-sm-10">
81 + <select class="form-select" name="day">
82 + <option>선택해주세요</option>
83 + <option value="월"></option>
84 + <option value="화"></option>
85 + <option value="수"></option>
86 + <option value="목"></option>
87 + <option value="금"></option>
88 + <option value="토"></option>
89 + <option value="일"></option>
90 + </select>
91 + </div>
92 + </div>
93 +
94 + <div class="mb-4 row">
95 + <label for="staticEmail" class="col-sm-2 col-form-label">
96 + 운동 부위
97 + </label>
98 + <div class="col-sm-10">
99 + <select
100 + class="form-select"
101 + name="part"
102 + id="part"
103 + onchange="addressKindChange(this)"
104 + >
105 + <option>선택해주세요</option>
106 + <option value="어깨">어깨</option>
107 + <option value="하체">하체</option>
108 + <option value="이삼두">이두 삼두</option>
109 + <option value="코어">코어</option>
110 + <option value="유산소">유산소</option>
111 + <option value="등"></option>
112 + <option value="가슴">가슴</option>
113 + <!-- <option value="d">이두</option> -->
114 + <!-- <option value="e">삼두</option>
115 + <option value="f">하체</option>
116 + <option value="g">코어</option> -->
117 + </select>
118 + </div>
119 + </div>
120 + <div class="mb-4 row">
121 + <label for="staticEmail" class="col-sm-2 col-form-label">
122 + 운동 방법
123 + </label>
124 + <div class="col-sm-10">
125 + <select class="form-select" id="way" name="way">
126 + <option>선택해주세요</option>
127 + </select>
128 + </div>
129 + </div>
130 + <div class="mb-4 row">
131 + <label for="staticEmail" class="col-sm-2 col-form-label">
132 + 세트 수
133 + </label>
134 + <div class="col-sm-10">
135 + <input class="form-control" type="text" name="setNumber" />
136 + </div>
137 + </div>
138 + <div class="mb-4 row">
139 + <label for="staticEmail" class="col-sm-2 col-form-label">
140 + 횟수
141 + </label>
142 + <div class="col-sm-10">
143 + <input class="form-control" type="text" name="number" />
144 + </div>
145 + </div>
146 + <div class="mb-4 row">
147 + <label for="staticEmail" class="col-sm-2 col-form-label">
148 + 쉬는 시간(초)
149 + </label>
150 + <div class="col-sm-10">
151 + <input class="form-control" type="text" name="breakTime" />
152 + </div>
153 + </div>
154 + <div class="mt-3 text-center">
155 + <button type="submit" class="btn btn-lg">
156 + <i class="fas fa-save"></i>
157 + </button>
158 + </div>
159 + </form>
160 + </div>
161 + </section>
162 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
163 + <script src="/static/scripts.js"></script>
164 + </body>
165 +</html>
1 +<!DOCTYPE html>
2 +<html lang="en">
3 + <head>
4 + <meta charset="UTF-8" />
5 + <title><%= day %>요일 운동 시작!</title>
6 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
7 + <!-- Font Awesome icons (free version)-->
8 + <script
9 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
10 + crossorigin="anonymous"
11 + ></script>
12 + <!-- Simple line icons-->
13 + <link
14 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
15 + rel="stylesheet"
16 + />
17 + <!-- Google fonts-->
18 + <link
19 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
20 + rel="stylesheet"
21 + type="text/css"
22 + />
23 + <!-- Core theme CSS (includes Bootstrap)-->
24 + <link rel="preconnect" href="https://fonts.googleapis.com" />
25 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
26 + <link
27 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
28 + rel="stylesheet"
29 + />
30 + <link rel="stylesheet" href="/stylesheets/styles.css" />
31 + <style>
32 + .healthLink {
33 + color: black;
34 + font-size: 18px;
35 + }
36 + .healthLink2 {
37 + font-size: 18px;
38 + }
39 +
40 + .title-fontA {
41 + font-family: 'Fuzzy Bubbles', cursive;
42 + }
43 + .title-fontB {
44 + font-family: 'Anton', sans-serif;
45 + }
46 + .day-fontB {
47 + font-family: 'Jua';
48 + }
49 +
50 + .table-title {
51 + color: pink;
52 + font-size: 20px;
53 + }
54 + .timer {
55 + font-family: 'Jua';
56 + font-size: 140px;
57 + color: darkcyan;
58 + }
59 + .healthname {
60 + font-family: 'Jua';
61 + font-size: 57px;
62 + color: darkgrey;
63 + }
64 + </style>
65 + <script src="/static/timer.js"></script>
66 + </head>
67 +
68 + <body>
69 + <div class="navbar navbar-expand-lg navbar-light bgtop">
70 + <div class="container text-center mx-4 my-1">
71 + <a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
72 + </div>
73 + <div class="mx-3">
74 + <a class="otherUser title-fontB" href="/otherUser">OTHER</a>
75 + </div>
76 + <div class="mx-3">
77 + <a class="otherUser title-fontB" href="/myHealth">MY</a>
78 + </div>
79 + <div class="mx-3">
80 + <a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
81 + </div>
82 + </div>
83 + <section class="container">
84 + <div>
85 + <h1 class="mt-5 text-center day-fontB"><%= day%>요일 운동 시작하세요!</h1>
86 + </div>
87 + <div class="mt-5">
88 + <table class="table text-center">
89 + <tr class="table-title">
90 + <th>운동 방법</th>
91 + <th>자극 부위</th>
92 + <th>세트</th>
93 + <th>횟수</th>
94 + <th>쉬는시간(초)</th>
95 + <th></th>
96 + <th></th>
97 + </tr>
98 + <div>
99 + <% for(let i=0; i <arr1.length ;i++) {
100 + %>
101 + <tr>
102 + <% if(arr1[i].way =="프론트 레이즈") { %>
103 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=j2Nvn8nbtXs"><%= arr1[i].way %></a></td>
104 + <% } else if(arr1[i].way == "아놀드 프레스") { %>
105 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=tsSxQ2__DQU"><%= arr1[i].way %></a></td>
106 + <% } else if(arr1[i].way == "래터럴 레이즈") { %>
107 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=geenhiHju-o"><%= arr1[i].way %></a></td>
108 + <% } else if(arr1[i].way == "리버스 펙덱 플라이") { %>
109 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=Ey8KQroKsCk"><%= arr1[i].way %></a></td>
110 + <% } else if(arr1[i].way == "인클라인 벤치프레스") { %>
111 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=11gY7Q5D5wo"><%= arr1[i].way %></a></td>
112 + <% } else if(arr1[i].way == "벤치프레스") { %>
113 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=5rRHgro9Vrg"><%= arr1[i].way %></a></td>
114 + <% } else if(arr1[i].way == "딥스") { %>
115 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=W6I5Tsuu_CE"><%= arr1[i].way %></a></td>
116 + <% } else if(arr1[i].way == "푸쉬업") { %>
117 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=2qzcGwK282Y"><%= arr1[i].way %></a></td>
118 + <% } else if(arr1[i].way == "랫풀다운") { %>
119 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=hVa5dsH3DaA"><%= arr1[i].way %></a></td>
120 + <% } else if(arr1[i].way == "시티드로우") { %>
121 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=jzf_IMgQ1Zc"><%= arr1[i].way %></a></td>
122 + <% } else if(arr1[i].way == "데드리프트") { %>
123 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=6RW8nWzbIS8"><%= arr1[i].way %></a></td>
124 + <% } else if(arr1[i].way == "바벨로우") { %>
125 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=g4X2faTd0DE"><%= arr1[i].way %></a></td>
126 + <% } else if(arr1[i].way == "풀업") { %>
127 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=LY54fY1ThOw"><%= arr1[i].way %></a></td>
128 + <% } else if(arr1[i].way == "덤벨 컬") { %>
129 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=sAq_ocpRh_I"><%= arr1[i].way %></a></td>
130 + <% } else if(arr1[i].way == "오버헤드프레스") { %>
131 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=kDbUNTX-Xts"><%= arr1[i].way %></a></td>
132 + <% } else if(arr1[i].way == "덤벨 킥백") { %>
133 + <td><a class="healthLink" href="https://youtu.be/6SS6K3lAwZ8"><%= arr1[i].way %></a></td>
134 + <% } else if(arr1[i].way == "라잉 트라이셉스 익스텐션") { %>
135 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=MVwknaifUfw"><%= arr1[i].way %></a></td>
136 + <% } else if(arr1[i].way == "레그프레스") { %>
137 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=hYwJrXpzEfs"><%= arr1[i].way %></a></td>
138 + <% } else if(arr1[i].way == "스쿼트") { %>
139 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=IOCOKjTI2Qo"><%= arr1[i].way %></a></td>
140 + <% } else if(arr1[i].way == "런지") { %>
141 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=Nx1_TkD41DE"><%= arr1[i].way %></a></td>
142 + <% } else if(arr1[i].way == "레그 익스텐션") { %>
143 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=amJyUQfDXTs"><%= arr1[i].way %></a></td>
144 + <% } else if(arr1[i].way == "레그컬") { %>
145 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=_UZDE-HH2eA"><%= arr1[i].way %></a></td>
146 + <% } else if(arr1[i].way == "플랭크") { %>
147 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=B--6YfhmBGc"><%= arr1[i].way %></a></td>
148 + <% } else if(arr1[i].way == "크런치") { %>
149 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=pq6aj0yiSrw"><%= arr1[i].way %></a></td>
150 + <% } else if(arr1[i].way == "백 익스텐션") { %>
151 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=Bw9YuQTTc58"><%= arr1[i].way %></a></td>
152 + <% } else if(arr1[i].way == "싸이클") { %>
153 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=y1e3KYo_Pas"><%= arr1[i].way %></a></td>
154 + <% } else if(arr1[i].way == "런닝머신") { %>
155 + <td><a class="healthLink" href="https://www.youtube.com/watch?v=djAJE282AyI"><%= arr1[i].way %></a></td>
156 + <% } else {%>
157 + <td class="healthLink2"><%= arr1[i].way %></td>
158 + <% } %>
159 + <td><%= arr1[i].part %></td>
160 + <td><%= arr1[i].setNumber %></td>
161 + <td><%= arr1[i].number %></td>
162 + <td id="breaktime"><%= arr1[i].breakTime %></td>
163 + <td>
164 + <button class="btn" onclick="onClick(this)" name="<%= arr1[i].way %>" value="<%= arr1[i].breakTime %>">
165 + <i class="far fa-clock"></i>
166 + </button>
167 + </td>
168 + <td>
169 + <button class="btn" onclick="location.href='edit/<%= arr1[i].way %>'"><i class="fas fa-edit"></i></button>
170 + </td>
171 + <td>
172 + <button class="btn" onclick="location.href='remove/<%= arr1[i].Id %>'"><i class="fas fa-trash-alt"></i></button>
173 + </td>
174 + </tr>
175 + <% } %>
176 + </div>
177 + </table>
178 + </div>
179 +
180 +
181 + </section>
182 + <section class="container">
183 + <div>
184 + <button class="btn btn-lg" onclick="location.href='/setup'" style="float: right;"><i class="fas fa-plus"></i> 추가</button>
185 + </div>
186 + </section>
187 + <section class="container">
188 + <div>
189 + <div>
190 + <div>
191 + </div>
192 + </div>
193 +
194 + <div>
195 +
196 + </div>
197 + </div>
198 + </section>
199 + <section class="container text-center">
200 + <div class="row">
201 + <div class="healthname mt-5" id="healthname">
202 +
203 + </div>
204 + <div class="timer mt-2" id="demo">
205 + </div>
206 + <div class="day-fontB" id="deleteBtn">
207 + </div>
208 + </div>
209 + </section>
210 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
211 + </body>
212 +</html>
1 +<!DOCTYPE html>
2 +<html lang="en">
3 + <head>
4 + <meta charset="utf-8" />
5 + <meta
6 + name="viewport"
7 + content="width=device-width, initial-scale=1, shrink-to-fit=no"
8 + />
9 + <meta name="description" content="" />
10 + <meta name="author" content="" />
11 + <title>정보 입력</title>
12 + <!-- Favicon-->
13 + <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
14 + <!-- Font Awesome icons (free version)-->
15 + <script
16 + src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
17 + crossorigin="anonymous"
18 + ></script>
19 + <!-- Simple line icons-->
20 + <link
21 + href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
22 + rel="stylesheet"
23 + />
24 + <!-- Google fonts-->
25 + <link
26 + href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
27 + rel="stylesheet"
28 + type="text/css"
29 + />
30 + <!-- Core theme CSS (includes Bootstrap)-->
31 + <link rel="preconnect" href="https://fonts.googleapis.com" />
32 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
33 + <link
34 + href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Fuzzy+Bubbles:wght@700&display=swap"
35 + rel="stylesheet"
36 + />
37 + <link rel="stylesheet" href="/stylesheets/styles.css" />
38 + <style>
39 + .title-fontA {
40 + font-family: "Fuzzy Bubbles", cursive;
41 + }
42 + </style>
43 + </head>
44 + <body id="page-top">
45 + <div class="navbar navbar-expand-lg navbar-light fixed-top">
46 + <div class="container mx-4 my-1">
47 + <a class="navbar-brand title-fontA">Health Assistant</a>
48 + </div>
49 + </div>
50 + <div class="mastheadSecond">
51 + <div class="container text-center mt-5">
52 + <h1 class="text-white">User Information</h1>
53 + <div class="row">
54 + <div class="col-lg-6 order-lg-1">
55 + <div class="p-5 mr-2 float-end">
56 + <img
57 + class="img-fluid rounded-circle"
58 + src="../stylesheets/assets/img/human.png"
59 + alt="..."
60 + />
61 + </div>
62 + </div>
63 + <div class="col-lg-6 order-lg-2">
64 + <div class="p-5 mt-3">
65 + <form action="/user" method="post" id="userForm">
66 + <div class="mt-5">
67 + <input
68 + class="form-control w-50 text-center"
69 + placeholder="키를 입력해주세요"
70 + type="text"
71 + name="height"
72 + />
73 + </div>
74 + <div class="mt-4">
75 + <input
76 + class="form-control w-50 text-center"
77 + placeholder="몸무게를 입력해주세요"
78 + type="text"
79 + name="weight"
80 + />
81 + </div>
82 + <div>
83 + <button
84 + class="btn btn-primary rounded float-start w-50 mt-4"
85 + type="submit"
86 + >
87 + 확인
88 + </button>
89 + </div>
90 + </form>
91 + </div>
92 + </div>
93 + </div>
94 + </div>
95 + </div>
96 + <!-- Bootstrap core JS-->
97 + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
98 + <!-- Core theme JS-->
99 + <script src="/static/scripts.js"></script>
100 + </body>
101 +</html>