임준표

HealthAssistant

node_modules/
*.vscode
*.idea
\ No newline at end of file
# [Health Assistant](http://2018102224.osschatbot.cf:23023)
Health Assistant is a Web based program for Daily exercisers.
* **시간 효율성:** 이 프로그램은 운동하는 사람에게 몇 세트가 남았는지 알려준다. 또한, 세트와 세트 사이에 유저가 설정한 쉬는 시간이 끝나면, 유저에게 쉬는 시간이 끝났음을 알리고, 다시 운동할 수 있게끔 해준다. 이를 통해 유저는 시간 효율적으로 운동할 수 있다.
* **운동 추천 기능:** 유저들의 키, 몸무게 정보를 저장하여 비슷한 체형의 유저의 운동 루틴을 추천해주거나 운동을 많이 해보지 못한 유저가 운동법을 추천받기를 원하면, 유튜브와 연동하여 운동법을 추천해 준다.
## Built with
- kakao api
- mysql DB
- 부트스트랩
- node js
## Prerequisites
```
npm install
npm install express --save
```
## Installation
- Clone repo<br>
http://khuhub.khu.ac.kr/2018102224/health_assistant.git
- MySQL 설치<br>
sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum install mysql-community-server
- 서버 자동 시작 설정<br>
sudo systemctl enable mysqld
sudo systemctl start mysqld
- 서버 실행 여부 확인<br>
sudo systemctl status mysqld
- mysql root 초기 비밀번호 확인<br>
sudo grep 'A temporary password' /var/log/mysqld.log
- mysql 접속<br>
mysql -u root -p
- DB 테이블 생성
- user_info(username, userHeight, userWeight)
- userHealth(username, day, way, part, setNumber, number, breakTime, Id)
- AWS 도메인 설정
- SSL Certificate
## Usage
1. 로그인 - kakao
2. 키와 몸무게를 입력
3. 요일별 운동 루틴 저장
4. 운동 방법에 대한 설명 (유튜브 링크)
4. 설정한 쉬는 시간 끝났을 때 팝업 알림
5. 루틴 추천 기능: 키와 몸무게가 비슷한 다른 유저들의 루틴 참고 가능
## Roadmap
- [X] DataStructures
- [X] Add back to top links
- [X] Exception Handling
- [X] Use Cookies
- [X] Encryption
## Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
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".
Don't forget to give the project a star! Thanks again!
1. Fork the Project
2. Create your Feature Branch
3. Commit your Changes
4. Push to the Branch
5. Open a Pull Request
## License
- MySQL (https://www.mysql.com/)
- Kakao API (https://developers.kakao.com/docs/latest/ko/kakaologin/common)
## Contact
- 임준표 wnsvy1997@gmail.com
const express = require("express");
const app = express();
const sslport = 23023;
const passport = require("passport");
const index = require("./routes/index");
const user = require("./routes/user");
const path = require("path");
const setup = require("./routes/setup");
const daySelect = require("./routes/daySelect");
const otherUser = require("./routes/otherUser");
const myHealth = require("./routes/myHealth");
passport.serializeUser(function (user, done) {
console.log("serialized");
done(null, user);
});
passport.deserializeUser(function (user, done) {
console.log("deserialized");
done(null, user);
});
app.use(express.json());
app.use(express.static(__dirname + "/public"));
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");
app.use(passport.initialize());
app.use("/", index);
app.use("/user", user);
app.use("/setup", setup);
app.use("/daySelect", daySelect);
app.use("/otherUser", otherUser);
app.use("/myHealth", myHealth);
app.use("/static", express.static("./js/"));
app.listen(sslport, () => {
console.log(`Example app listening at www.2018102224.osschatbot.cf:${sslport}`);
//도메인 입력
});
module.exports = app;
var target;
function addressKindChange(e) {
const shoulder = [
"아놀드 프레스",
"래터럴 레이즈",
"프론트 레이즈",
"리버스 펙덱 플라이",
];
const leg = ["레그프레스", "스쿼트", "런지", "레그 익스텐션", "레그컬"];
const arm = [
"덤벨 컬",
"오버헤드프레스",
"덤벨 킥백",
"라잉 트라이셉스 익스텐션",
];
const core = ["플랭크", "백 익스텐션", "크런치"];
const breath = ["싸이클", "런닝머신"];
const back = ["랫풀다운", "시티드로우", "바벨로우", "데드리프트", "풀업"];
const chest = ["인클라인 벤치프레스", "벤치프레스", "딥스", "푸쉬업"];
target = document.getElementById("way");
if (e.value == "어깨") var d = shoulder;
else if (e.value == "하체") var d = leg;
else if (e.value == "이삼두") var d = arm;
else if (e.value == "등") var d = back;
else if (e.value == "유산소") var d = breath;
else if (e.value == "코어") var d = core;
else if (e.value == "가슴") var d = chest;
target.options.length = 0;
for (x in d) {
var opt = document.createElement("option");
opt.value = d[x];
opt.innerHTML = d[x];
target.appendChild(opt);
}
}
function ex1() {
return target;
}
/*!
* Start Bootstrap - Stylish Portfolio v6.0.4 (https://startbootstrap.com/theme/stylish-portfolio)
* Copyright 2013-2021 Start Bootstrap
* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-stylish-portfolio/blob/master/LICENSE)
*/
window.addEventListener("DOMContentLoaded", (event) => {
const sidebarWrapper = document.getElementById("sidebar-wrapper");
let scrollToTopVisible = false;
// Closes the sidebar menu
const menuToggle = document.body.querySelector(".menu-toggle");
menuToggle.addEventListener("click", (event) => {
event.preventDefault();
sidebarWrapper.classList.toggle("active");
_toggleMenuIcon();
menuToggle.classList.toggle("active");
});
// Closes responsive menu when a scroll trigger link is clicked
var scrollTriggerList = [].slice.call(
document.querySelectorAll("#sidebar-wrapper .js-scroll-trigger")
);
scrollTriggerList.map((scrollTrigger) => {
scrollTrigger.addEventListener("click", () => {
sidebarWrapper.classList.remove("active");
menuToggle.classList.remove("active");
_toggleMenuIcon();
});
});
function _toggleMenuIcon() {
const menuToggleBars = document.body.querySelector(
".menu-toggle > .fa-bars"
);
const menuToggleTimes = document.body.querySelector(
".menu-toggle > .fa-times"
);
if (menuToggleBars) {
menuToggleBars.classList.remove("fa-bars");
menuToggleBars.classList.add("fa-times");
}
if (menuToggleTimes) {
menuToggleTimes.classList.remove("fa-times");
menuToggleTimes.classList.add("fa-bars");
}
}
// Scroll to top button appear
document.addEventListener("scroll", () => {
const scrollToTop = document.body.querySelector(".scroll-to-top");
if (document.documentElement.scrollTop > 100) {
if (!scrollToTopVisible) {
fadeIn(scrollToTop);
scrollToTopVisible = true;
}
} else {
if (scrollToTopVisible) {
fadeOut(scrollToTop);
scrollToTopVisible = false;
}
}
});
});
function fadeOut(el) {
el.style.opacity = 1;
(function fade() {
if ((el.style.opacity -= 0.1) < 0) {
el.style.display = "none";
} else {
requestAnimationFrame(fade);
}
})();
}
function fadeIn(el, display) {
el.style.opacity = 0;
el.style.display = display || "block";
(function fade() {
var val = parseFloat(el.style.opacity);
if (!((val += 0.1) > 1)) {
el.style.opacity = val;
requestAnimationFrame(fade);
}
})();
}
var x;
const onClick = (bt) => {
const onDelete = () => {
clearInterval(x);
document.getElementById("demo").innerText = "";
document.querySelector("#deleteBtn").innerText = "";
document.querySelector("#healthname").innerText = "";
};
const a = document.querySelector("#breaktime").innerText;
var time = parseInt(bt.value);
console.log(bt.name);
console.log(time);
var min = "";
var sec = "";
x = setInterval(function () {
min = parseInt(time / 60);
sec = time % 60;
document.getElementById("demo").innerHTML = min + ":" + sec + "";
time--;
if (time < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "쉬는시간 끝!";
alert("쉬는시간이 끝났습니다!");
}
}, 1000);
const del_bt = document.querySelector("#deleteBtn");
const healthname = document.querySelector("#healthname");
healthname.innerHTML = bt.name + " 쉬는시간!";
var ex = document.createElement("Button");
ex.innerHTML = "타이머 지우기";
ex.className = "btn btn-dark";
ex.onclick = onDelete;
del_bt.appendChild(ex);
};
{
"name": "abcd",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "abcd",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"axios": "^0.24.0",
"body-parser": "^1.19.0",
"ejs": "^3.1.6",
"express": "^4.17.1",
"express-mysql-session": "^2.1.7",
"express-session": "^1.17.2",
"mysql": "^2.18.1",
"passport": "^0.5.0",
"passport-kakao": "^1.0.1"
}
},
"node_modules/accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"dependencies": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"node_modules/async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
"integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
},
"node_modules/axios": {
"version": "0.24.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
"integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
"dependencies": {
"follow-redirects": "^1.14.4"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
"engines": {
"node": "*"
}
},
"node_modules/body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"dependencies": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"node_modules/content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"dependencies": {
"safe-buffer": "5.1.2"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"node_modules/ejs": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
"integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
"dependencies": {
"jake": "^10.6.1"
},
"bin": {
"ejs": "bin/cli.js"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"dependencies": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
"body-parser": "1.19.0",
"content-disposition": "0.5.3",
"content-type": "~1.0.4",
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "~1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.5",
"qs": "6.7.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.1.2",
"send": "0.17.1",
"serve-static": "1.14.1",
"setprototypeof": "1.1.1",
"statuses": "~1.5.0",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
"engines": {
"node": ">= 0.10.0"
}
},
"node_modules/express-mysql-session": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/express-mysql-session/-/express-mysql-session-2.1.7.tgz",
"integrity": "sha512-0lY8nBVo6GZdQ/Y98zsTsRnDMNJJYRh5k83rrzLf/5CKHEAJZfOnHaox1WG/W8HHTutNKMsmsiiGgL16r1PcsQ==",
"dependencies": {
"debug": "4.3.2",
"express-session": "1.17.2",
"mysql": "2.18.1",
"underscore": "1.13.1"
},
"funding": {
"type": "individual",
"url": "https://degreesofzero.com/donate.html?project=express-mysql-session"
}
},
"node_modules/express-mysql-session/node_modules/debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/express-mysql-session/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/express-session": {
"version": "1.17.2",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz",
"integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==",
"dependencies": {
"cookie": "0.4.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~2.0.0",
"on-headers": "~1.0.2",
"parseurl": "~1.3.3",
"safe-buffer": "5.2.1",
"uid-safe": "~2.1.5"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/express-session/node_modules/cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/express-session/node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/express-session/node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/filelist": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
"integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
"dependencies": {
"minimatch": "^3.0.4"
}
},
"node_modules/finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/follow-redirects": {
"version": "1.14.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
"integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"engines": {
"node": ">=4"
}
},
"node_modules/http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"dependencies": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.1",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"node_modules/ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"node_modules/jake": {
"version": "10.8.2",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
"integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
"dependencies": {
"async": "0.9.x",
"chalk": "^2.4.2",
"filelist": "^1.0.1",
"minimatch": "^3.0.4"
},
"bin": {
"jake": "bin/cli.js"
},
"engines": {
"node": "*"
}
},
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mime-db": {
"version": "1.51.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
"integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.34",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
"integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
"dependencies": {
"mime-db": "1.51.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"node_modules/mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
"dependencies": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/oauth": {
"version": "0.9.15",
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
"integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
},
"node_modules/on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"dependencies": {
"ee-first": "1.1.1"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/passport": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz",
"integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==",
"dependencies": {
"passport-strategy": "1.x.x",
"pause": "0.0.1"
},
"engines": {
"node": ">= 0.4.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/jaredhanson"
}
},
"node_modules/passport-kakao": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/passport-kakao/-/passport-kakao-1.0.1.tgz",
"integrity": "sha512-uItaYRVrTHL6iGPMnMZvPa/O1GrAdh/V6EMjOHcFlQcVroZ9wgG7BZ5PonMNJCxfHQ3L2QVNRnzhKWUzSsumbw==",
"dependencies": {
"passport-oauth2": "~1.1.2",
"pkginfo": "~0.3.0"
}
},
"node_modules/passport-oauth2": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.1.2.tgz",
"integrity": "sha1-vXFjsbYJA3GGjcTvb58uHkzEuUg=",
"dependencies": {
"oauth": "0.9.x",
"passport-strategy": "1.x.x",
"uid2": "0.0.x"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/passport-strategy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
"integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"node_modules/pause": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
"integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
},
"node_modules/pkginfo": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
"integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dependencies": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
"engines": {
"node": ">=0.6"
}
},
"node_modules/random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
"integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"dependencies": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"dependencies": {
"debug": "2.6.9",
"depd": "~1.1.2",
"destroy": "~1.0.4",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "~1.7.2",
"mime": "1.6.0",
"ms": "2.1.1",
"on-finished": "~2.3.0",
"range-parser": "~1.2.1",
"statuses": "~1.5.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/send/node_modules/ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"node_modules/serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"dependencies": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.17.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"node_modules/sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
"engines": {
"node": ">=0.6"
}
},
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
"dependencies": {
"random-bytes": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/uid2": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
"integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
},
"node_modules/underscore": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
"integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
},
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
"engines": {
"node": ">= 0.8"
}
}
},
"dependencies": {
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
}
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"requires": {
"color-convert": "^1.9.0"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
"integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
},
"axios": {
"version": "0.24.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
"integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
"requires": {
"follow-redirects": "^1.14.4"
}
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"requires": {
"safe-buffer": "5.1.2"
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"ejs": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
"integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
"requires": {
"jake": "^10.6.1"
}
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
"body-parser": "1.19.0",
"content-disposition": "0.5.3",
"content-type": "~1.0.4",
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "~1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.5",
"qs": "6.7.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.1.2",
"send": "0.17.1",
"serve-static": "1.14.1",
"setprototypeof": "1.1.1",
"statuses": "~1.5.0",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
}
},
"express-mysql-session": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/express-mysql-session/-/express-mysql-session-2.1.7.tgz",
"integrity": "sha512-0lY8nBVo6GZdQ/Y98zsTsRnDMNJJYRh5k83rrzLf/5CKHEAJZfOnHaox1WG/W8HHTutNKMsmsiiGgL16r1PcsQ==",
"requires": {
"debug": "4.3.2",
"express-session": "1.17.2",
"mysql": "2.18.1",
"underscore": "1.13.1"
},
"dependencies": {
"debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"express-session": {
"version": "1.17.2",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz",
"integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==",
"requires": {
"cookie": "0.4.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~2.0.0",
"on-headers": "~1.0.2",
"parseurl": "~1.3.3",
"safe-buffer": "5.2.1",
"uid-safe": "~2.1.5"
},
"dependencies": {
"cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
},
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
}
}
},
"filelist": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
"integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
"requires": {
"minimatch": "^3.0.4"
}
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
}
},
"follow-redirects": {
"version": "1.14.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
"integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA=="
},
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.1",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.0"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"jake": {
"version": "10.8.2",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
"integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
"requires": {
"async": "0.9.x",
"chalk": "^2.4.2",
"filelist": "^1.0.1",
"minimatch": "^3.0.4"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.51.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
"integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
},
"mime-types": {
"version": "2.1.34",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
"integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
"requires": {
"mime-db": "1.51.0"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
"requires": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
}
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"oauth": {
"version": "0.9.15",
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
"integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"requires": {
"ee-first": "1.1.1"
}
},
"on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"passport": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz",
"integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==",
"requires": {
"passport-strategy": "1.x.x",
"pause": "0.0.1"
}
},
"passport-kakao": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/passport-kakao/-/passport-kakao-1.0.1.tgz",
"integrity": "sha512-uItaYRVrTHL6iGPMnMZvPa/O1GrAdh/V6EMjOHcFlQcVroZ9wgG7BZ5PonMNJCxfHQ3L2QVNRnzhKWUzSsumbw==",
"requires": {
"passport-oauth2": "~1.1.2",
"pkginfo": "~0.3.0"
}
},
"passport-oauth2": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.1.2.tgz",
"integrity": "sha1-vXFjsbYJA3GGjcTvb58uHkzEuUg=",
"requires": {
"oauth": "0.9.x",
"passport-strategy": "1.x.x",
"uid2": "0.0.x"
}
},
"passport-strategy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
"integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"pause": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
"integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
},
"pkginfo": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
"integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
"random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
"integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
"destroy": "~1.0.4",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "~1.7.2",
"mime": "1.6.0",
"ms": "2.1.1",
"on-finished": "~2.3.0",
"range-parser": "~1.2.1",
"statuses": "~1.5.0"
},
"dependencies": {
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
}
}
},
"serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.17.1"
}
},
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"requires": {
"has-flag": "^3.0.0"
}
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
}
},
"uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
"requires": {
"random-bytes": "~1.0.0"
}
},
"uid2": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
"integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
},
"underscore": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
"integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
}
}
}
{
"name": "abcd",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.24.0",
"body-parser": "^1.19.0",
"ejs": "^3.1.6",
"express": "^4.17.1",
"express-mysql-session": "^2.1.7",
"express-session": "^1.17.2",
"mysql": "^2.18.1",
"passport": "^0.5.0",
"passport-kakao": "^1.0.1"
}
}
This diff could not be displayed because it is too large.
const express = require("express");
const router = express.Router();
const mysql = require("mysql");
router.use(express.urlencoded({ extended: false }));
const conn = {
host: "localhost",
port: "3306",
user: "root",
password: "@Binocchio66",
database: "healthassistant",
};
let testQuery;
const connection = mysql.createConnection(conn); // DB 커넥션 생성
connection.connect(); // DB접속
router.get("/", (req, res, next) => {
testQuery = `SELECT * FROM userHealth WHERE username ="${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
let myArr_mon = new Array();
let myArr_tue = new Array();
let myArr_wed = new Array();
let myArr_thu = new Array();
let myArr_fri = new Array();
let myArr_sat = new Array();
let myArr_sun = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == "월") {
myArr_mon.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
if (results[i].day == "화") {
myArr_tue.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
if (results[i].day == "수") {
myArr_wed.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
if (results[i].day == "목") {
myArr_thu.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
if (results[i].day == "금") {
myArr_fri.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
if (results[i].day == "토") {
myArr_sat.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
if (results[i].day == "일") {
myArr_sun.push(results[i]);
}
}
res.render("daySelect", {
arr_mon: myArr_mon,
arr_tue: myArr_tue,
arr_wed: myArr_wed,
arr_thu: myArr_thu,
arr_fri: myArr_fri,
arr_sat: myArr_sat,
arr_sun: myArr_sun,
});
} else {
console.log(err);
}
});
});
module.exports = router;
const express = require("express");
const router = express.Router();
const passport = require("passport");
const axios = require("axios");
const KakaoStrategy = require("passport-kakao").Strategy;
const session = require("express-session");
const mysql = require("mysql");
passport.serializeUser(function (user, done) {
// console.log("serialized");
done(null, user);
});
passport.deserializeUser(function (user, done) {
// console.log("deserialized");
done(null, user);
});
router.use(session({ secret: "anything" }));
router.use(passport.initialize());
router.use(passport.session());
passport.use(
"kakao-login",
new KakaoStrategy(
{
clientID: "359a37c3d9b0bec98aab1f2882447b24",
callbackURL: "/auth/kakao/callback",
clientSecret: "XvRp0bV6dZ8aj9f7ApYCT0ZoeDEL9cGi",
},
async (accessToken, refreshToken, profile, done) => {
console.log(accessToken);
console.log(profile);
return done(null, {
//req.user가 되는 부분
user_id: profile._json.id,
nickname: profile._json.properties.nickname,
});
}
)
);
router.get("/", (req, res) => {
res.render("index", {
title: "안녕하세요",
});
});
router.get("/auth/kakao", passport.authenticate("kakao-login"));
router.get(
"/auth/kakao/callback",
passport.authenticate("kakao-login", {
failureRedirect: "/failure",
}),
(req, res) => {
res.redirect("/user");
}
);
router.get("/auth/logout/kakao", function (req, res) {
req.logout();
res.redirect("/");
});
module.exports = router;
const express = require("express");
const router = express.Router();
const mysql = require("mysql");
router.use(express.urlencoded({ extended: false }));
const conn = {
host: "localhost",
port: "3306",
user: "root",
password: "@Binocchio66",
database: "healthassistant",
};
let testQuery;
const connection = mysql.createConnection(conn); // DB 커넥션 생성
connection.connect(); // DB접속
router.get("/", (req, res) => {
testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
connection.query(testQuery, (err, results, field) => {
if (err) {
console.log(err);
} else {
console.log(results);
res.render("myHealth", {
arr1: results,
});
}
});
});
module.exports = router;
const express = require("express");
const router = express.Router();
const mysql = require("mysql");
router.use(express.urlencoded({ extended: false }));
const conn = {
host: "localhost",
port: "3306",
user: "root",
password: "@Binocchio66",
database: "healthassistant",
};
let testQuery;
const connection = mysql.createConnection(conn); // DB 커넥션 생성
connection.connect(); // DB접속
router.get("/", (req, res) => {
testQuery = `SELECT * FROM user_info WHERE username="${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
const userHeight = results[0].userHeight;
const userWeight = results[0].userWeight;
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}" `;
connection.query(testQuery, (err, results, fields) => {
if (err) {
console.log(err);
} else {
res.render("otherUser", {
userlist: results,
});
}
});
}
});
});
router.get("/show/:username", (req, res) => {
const username = req.params.username;
testQuery = `SELECT * FROM userHealth WHERE username = "${username}"`;
connection.query(testQuery, (err, results, field) => {
if (err) {
console.log(err);
} else {
res.render("otherHealth", {
arr1: results,
username: username,
});
}
});
});
module.exports = router;
const express = require("express");
const router = express.Router();
const mysql = require("mysql");
const test = require("../js/examples");
const conn = {
host: "localhost",
port: "3306",
user: "root",
password: "@Binocchio66",
database: "healthassistant",
};
let day, day_eng;
let myArr, myArr2;
let cnt = 0;
const connection = mysql.createConnection(conn); // DB 커넥션 생성
connection.connect(); // DB접속
router.use(express.urlencoded({ extended: false }));
router.get("/", (req, res, next) => {
res.render("setup");
});
router.post("/", (req, res, next) => {
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}")`;
cnt++;
connection.query(testQuery, (err, results, fields) => {
//results에 배열로 db값이 저장됨.
if (err) {
console.log(err);
}
});
res.redirect("/daySelect");
});
router.get("/Monday", (req, res, next) => {
let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
day = "월";
day_eng = "Monday";
myArr = new Array();
myArr2 = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == "월") {
myArr2.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
myArr.push(results[i].day);
}
if (myArr.findIndex((e) => e === "월") !== -1) {
console.log("월요일 루틴이 있습니다.");
res.render("startHealth", {
day: "월",
arr1: myArr2,
});
} else {
console.log("월요일 루틴이 없습니다.");
res.render("setup");
}
} else {
console.log(err);
}
});
});
router.get("/Tuesday", (req, res, next) => {
let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
day = "화";
day_eng = "Tuesday";
myArr = new Array();
myArr2 = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == "화") {
myArr2.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
myArr.push(results[i].day);
}
if (myArr.findIndex((e) => e === "화") !== -1) {
console.log("화요일 루틴이 있습니다.");
res.render("startHealth", {
day: "화",
arr1: myArr2,
});
} else {
console.log("화요일 루틴이 없습니다.");
res.render("setup");
}
} else {
console.log(err);
}
});
});
router.get("/Wednesday", (req, res, next) => {
let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
day = "수";
day_eng = "Wednesday";
myArr = new Array();
myArr2 = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == "수") {
myArr2.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
myArr.push(results[i].day);
}
if (myArr.findIndex((e) => e === "수") !== -1) {
console.log("수요일 루틴이 있습니다.");
res.render("startHealth", {
day: "수",
arr1: myArr2,
});
} else {
console.log("수요일 루틴이 없습니다.");
res.render("setup");
}
} else {
console.log(err);
}
});
});
router.get("/Thursday", (req, res, next) => {
let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
day = "목";
day_eng = "Thursday";
myArr = new Array();
myArr2 = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == "목") {
myArr2.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
myArr.push(results[i].day);
}
if (myArr.findIndex((e) => e === "목") !== -1) {
console.log("목요일 루틴이 있습니다.");
res.render("startHealth", {
day: "목",
arr1: myArr2,
});
} else {
console.log("목요일 루틴이 없습니다.");
res.render("setup");
}
} else {
console.log(err);
}
});
});
router.get("/Friday", (req, res, next) => {
let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
day = "금";
day_eng = "Friday";
myArr = new Array();
myArr2 = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == "금") {
myArr2.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
myArr.push(results[i].day);
}
if (myArr.findIndex((e) => e === "금") !== -1) {
console.log("금요일 루틴이 있습니다.");
res.render("startHealth", {
day: "금",
arr1: myArr2,
});
} else {
console.log("금요일 루틴이 없습니다.");
res.render("setup");
}
} else {
console.log(err);
}
});
});
router.get("/Saturday", (req, res, next) => {
let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
day = "토";
day_eng = "Saturday";
myArr = new Array();
myArr2 = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == "토") {
myArr2.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
myArr.push(results[i].day);
}
if (myArr.findIndex((e) => e === "토") !== -1) {
console.log("토요일 루틴이 있습니다.");
res.render("startHealth", {
day: "토",
arr1: myArr2,
});
} else {
console.log("토요일 루틴이 없습니다.");
res.render("setup");
}
} else {
console.log(err);
}
});
});
router.get("/Sunday", (req, res, next) => {
let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
day = "일";
day_eng = "Sunday";
myArr = new Array();
myArr2 = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == "일") {
myArr2.push(results[i]);
}
}
for (let i = 0; i < results.length; i++) {
myArr.push(results[i].day);
}
if (myArr.findIndex((e) => e === "일") !== -1) {
console.log("일요일 루틴이 있습니다.");
res.render("startHealth", {
day: "일",
arr1: myArr2,
});
} else {
console.log("일요일 루틴이 없습니다.");
res.render("setup");
}
} else {
console.log(err);
}
});
});
router.get("/remove/:Id", (req, res, next) => {
let testQuery = `SELECT * FROM userHealth WHERE username = "${req.user.nickname}"`;
const Id = req.params.Id;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
myArr = new Array();
for (let i = 0; i < results.length; i++) {
if (results[i].day == day) {
myArr.push(results[i]);
}
}
testQuery = `DELETE FROM userHealth WHERE id = ${Id}`;
connection.query(testQuery, (err, results, fields) => {
if (!err) {
res.send(
`<script>alert("삭제 완료!"); location.href='/setup/${day_eng}';</script>`
);
} else {
console.log(err);
}
});
} else {
console.log(err);
}
});
});
router.get("/edit/:Id", (req, res, next) => {
res.render("editHealth", {
day: day,
arr1: myArr2,
Id: req.params.Id,
});
});
router.post("/edit/:Id", (req, res, next) => {
const Id = req.params.Id;
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}"`;
connection.query(testQuery, (err, results, field) => {
if (!err) {
console.log("수정완료!");
res.redirect(`/setup/${day_eng}`);
} else {
console.log(err);
}
});
});
module.exports = router;
const express = require("express");
const router = express.Router();
const mysql = require("mysql");
const conn = {
host: "localhost",
port: "3306",
user: "root",
password: "@Binocchio66",
database: "healthassistant",
};
const connection = mysql.createConnection(conn); // DB 커넥션 생성
connection.connect(); // DB접속
router.use(express.urlencoded({ extended: false }));
router.get("/", (req, res, next) => {
console.log("로그인 성공!");
let testQuery = `SELECT * FROM user_info WHERE username="${req.user.nickname}"`;
connection.query(testQuery, (err, results, fields) => {
if (results.length == 0) {
res.render("user", {
title: "정보 입력",
});
} else {
console.log("정보가 있는 유저입니다.");
res.redirect("/daySelect");
}
});
});
router.post("/", (req, res) => {
const height = req.body.height;
const weight = req.body.weight;
let testQuery = `INSERT INTO user_info (username, userHeight, userWeight) values ("${req.user.nickname}", ${height}, ${weight})`;
// let testQuery = `INSERT INTO 'user_info' ('username', 'userHeight)`;
connection.query(testQuery, (err, results, fields) => {
if (err) {
console.log(err);
}
});
res.redirect("/daySelect");
// res.redirect("/");
});
module.exports = router;
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Setup</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel="stylesheet"
/>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
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"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.title-fontA {
font-family: 'Fuzzy Bubbles', cursive;
}
.title-fontB {
font-family: 'Anton', sans-serif;
}
.day-fontA {
font-family: 'Gowun Dodum', sans-serif;
font-size: 35px;
color: black;
}
</style>
</head>
<body>
<div class="navbar navbar-expand-lg navbar-light bgtop">
<div class="container text-center mx-4 my-1">
<a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/otherUser">OTHER</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/myHealth">MY</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
</div>
</div>
<div class="container">
<div class="row row-cols-1 row-cols-md-4 g-4 mt-4">
<div class="col">
<a href="/setup/Monday">
<div class="card" style="width: 75%">
<div class="card-body">
<h5 class="card-title text-center day-fontA">월요일</h5>
<p class="card-text">
<% if(arr_mon.length ==0) { %>
<p>월요일 운동이 없습니다! </p>
<% } else { %>
<ul>
<li><%= arr_mon[0].way %></li>
</ul>
<% } %>
</p>
</div>
</div>
</a>
</div>
<div class="col">
<a href="/setup/Tuesday">
<div class="card" style="width: 75%">
<div class="card-body">
<h5 class="card-title text-center day-fontA">화요일</h5>
<p class="card-text">
<% if(arr_tue.length ==0) { %>
<p>화요일 운동이 없습니다!</p>
<% } else { %>
<ul>
<li><%= arr_tue[0].way %></li>
</ul>
<% } %>
</p>
</div>
</div>
</a>
</div>
<div class="col">
<a href="/setup/Wednesday">
<div class="card" style="width: 75%">
<div class="card-body">
<h5 class="card-title text-center day-fontA">수요일</h5>
<p class="card-text">
<% if(arr_wed.length ==0) { %>
<p>수요일 운동이 없습니다!</p>
<% } else { %>
<ul>
<li><%= arr_wed[0].way %></li>
</ul>
<% } %>
</ul>
</p>
</div>
</div>
</a>
</div>
<div class="col">
<a href="/setup/Thursday">
<div class="card" style="width: 75%">
<div class="card-body">
<h5 class="card-title text-center day-fontA">목요일</h5>
<p class="card-text">
<% if(arr_thu.length ==0) { %>
<p>목요일 운동이 없습니다!</p>
<% } else { %>
<ul>
<li><%= arr_thu[0].way %></li>
</ul>
<% } %>
</p>
</div>
</div>
</a>
</div>
<div class="col">
<a href="/setup/Friday">
<div class="card mt-5" style="width: 75%">
<div class="card-body">
<h5 class="card-title text-center day-fontA">금요일</h5>
<p class="card-text">
<% if(arr_fri.length ==0) { %>
<p>금요일 운동이 없습니다!</p>
<% } else { %>
<ul>
<li><%= arr_fri[0].way %></li>
</ul>
<% } %>
</p>
</div>
</div>
</a>
</div>
<div class="col">
<a href="/setup/Saturday">
<div class="card mt-5" style="width: 75%">
<div class="card-body">
<h5 class="card-title text-center day-fontA">토요일</h5>
<p class="card-text">
<% if(arr_sat.length ==0) { %>
<p>토요일 운동이 없습니다!</p>
<% } else { %>
<ul>
<li><%= arr_sat[0].way %></li>
</ul>
<% } %>
</p>
</div>
</div>
</a>
</div>
<div class="col">
<a href="setup/Sunday">
<div class="card mt-5" style="width: 75%">
<div class="card-body">
<h5 class="card-title text-center day-fontA">일요일</h5>
<p class="card-text">
<% if(arr_sun.length ==0) { %>
<p>일요일 운동이 없습니다!</p>
<% } else { %>
<ul>
<li><%= arr_sun[0].way %></li>
</ul>
<% } %>
</p>
</div>
</div>
</a>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="/static/scripts.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title><%= day %>요일 운동 시작!</title>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<!-- Core theme CSS (includes Bootstrap)-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Anton&family=Jua&family=Fuzzy+Bubbles:wght@700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.title-fontA {
font-family: 'Fuzzy Bubbles', cursive;
}
.title-fontB {
font-family: 'Anton', sans-serif;
}
.day-fontB {
font-family: 'Jua';
}
</style>
</head>
<body>
<div class="navbar navbar-expand-lg navbar-light bgtop">
<div class="container text-center mx-4 my-1">
<a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/otherUser">OTHER</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/myHealth">MY</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
</div>
</div>
<section class="container">
<div>
<h1 class="day-fontB mt-5 text-center"><%= day%>요일 운동 수정</h1>
</div>
<div class="mt-5">
<table class="table text-center">
<tr>
<th>운동 방법</th>
<th>자극 부위</th>
<th>세트</th>
<th>횟수</th>
<th>쉬는시간(초)</th>
<th></th>
<th></th>
</tr>
<% for(let i=0; i <arr1.length ;i++) {
%>
<% if(arr1[i].way == Id) { %>
<tr>
<form method="POST" action="" id="editForm">
<td><input class="w-40" type="text" name="way" /></td>
<td><input class="w-40" type="text" name="part" /></td>
<td><input class="w-40" type="text" name="setNumber" /></td>
<td><input class="w-40" type="text" name="number" /></td>
<td><input class="w-40" type="text" name="breakTime" /></td>
<td><button class="btn" type="submit"><i class="far fa-check-circle"></i></button></td>
<td></td>
</form>
</tr>
<% } else {%>
<div>
<tr>
<td><%= arr1[i].way %></td>
<td><%= arr1[i].part %></td>
<td><%= arr1[i].setNumber %></td>
<td><%= arr1[i].number %></td>
<td><%= arr1[i].breakTime %></td>
<td></td>
<td></td>
</tr>
</div>
<% }} %>
</table>
</div>
</section>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="/static/scripts.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Health Assistant</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel="stylesheet"
/>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Fuzzy+Bubbles:wght@700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.title-fontA {
font-family: "Fuzzy Bubbles", cursive;
}
</style>
</head>
<body id="page-top">
<nav id="sidebar-wrapper">
<ul class="sidebar-nav">
<li class="sidebar-brand"><a href="#page-top">Health Assistant</a></li>
<li class="sidebar-nav-item"><a href="#page-top">Home</a></li>
<li class="sidebar-nav-item"><a href="#about">About</a></li>
<li class="sidebar-nav-item"><a href="#features">Services</a></li>
</ul>
</nav>
<div class="navbar navbar-expand-lg navbar-light fixed-top">
<a class="menu-toggle rounded" href="#"><i class="fas fa-bars"></i></a>
<div class="container mx-4 my-1">
<a class="navbar-brand title-fontA" href="#page-top"
>Health Assistant</a
>
</div>
</div>
<!-- Header-->
<header class="masthead d-flex align-items-center">
<div class="container px-4 px-lg-5 text-center">
<h1 class="mb-1">Health Assitant</h1>
<h3 class="mb-5"><em>헬스 관리 쉽게하자!</em></h3>
<a class="btn btn-dark btn-xl" href="/auth/kakao">카카오로 시작하기</a>
</div>
</header>
<section class="content-section bg-light" id="about">
<div class="container px-4 px-lg-5 text-center">
<div class="row gx-4 gx-lg-5 justify-content-center">
<div class="col-lg-4">
<h2 class="mb-3">Programmers</h2>
<p class="lead mb-5">2018102224 임준표</p>
</div>
<div class="col-lg-4">
<h2 class="mb-3">Introduction</h2>
<p class="lead mb-5">
Health Assistant is a Web based program for Daily exercisers.
</p>
</div>
<div class="col-lg-5 mt-1">
<a class="btn btn-dark btn-xl" href="#features">Features</a>
</div>
</div>
</div>
</section>
<section
class="content-section bg-primary text-white text-center"
id="features"
>
<div class="container px-4 px-lg-5">
<div class="content-section-heading">
<h3 class="text-secondary mb-0 title-fontA">Health Assistant</h3>
<h2 class="mb-5">Features</h2>
</div>
<div class="row gx-4 gx-lg-5">
<div class="col-lg-4 col-md-6 mb-5 mb-lg-0">
<span class="service-icon rounded-circle mx-auto mb-3">
<i class="fas fa-cogs"></i>
</span>
<h4><strong>효율성</strong></h4>
<p class="text-faded mb-0">
요일별 부위와 운동을 정리해 <br />효율적으로 볼 수 있습니다!
</p>
</div>
<div class="col-lg-4 col-md-0 mb-0 mb-lg-0">
<span class="service-icon rounded-circle mx-auto mb-3">
<div>
<i class="fas fa-clock"></i>
</div>
</span>
<h4><strong>시간관리</strong></h4>
<p class="text-faded mb-0">
타이머를 통해 쉬는시간을 <br />확실하게 알 수 있습니다!
</p>
</div>
<div class="col-lg-4 col-md-0 mb-0 mb-md-0">
<span class="service-icon rounded-circle mx-auto mb-3">
<i class="far fa-user-circle"></i>
</span>
<h4><strong>루틴추천</strong></h4>
<p class="text-faded mb-0">
나와 비슷한 체형인 <br />다른사람의 루틴을 볼 수 있습니다!
</p>
</div>
</div>
</div>
</section>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="/static/scripts.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>내 운동 목록</title>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<!-- Core theme CSS (includes Bootstrap)-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.title-fontA {
font-family: 'Fuzzy Bubbles', cursive;
}
.title-fontB {
font-family: 'Anton', sans-serif;
}
.day-fontB {
font-family: 'Jua';
}
.table-title {
color: pink;
font-size: 20px;
}
</style>
</head>
<body>
<div class="navbar navbar-expand-lg navbar-light bgtop">
<div class="container text-center mx-4 my-1">
<a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/otherUser">OTHER</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/myHealth">MY</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
</div>
</div>
<section class="container">
<div>
<h1 class="mt-5 text-center day-fontB">내 운동 목록</h1>
</div>
<div class="mt-5">
<table class="table text-center">
<tr class="table-title">
<th>운동 방법</th>
<th>자극 부위</th>
<th>세트</th>
<th>횟수</th>
<th>쉬는시간(초)</th>
</tr>
<div>
<% for(let i=0; i <arr1.length ;i++) {
%>
<tr>
<td><%= arr1[i].way %></td>
<td><%= arr1[i].part %></td>
<td><%= arr1[i].setNumber %></td>
<td><%= arr1[i].number %></td>
<td><%= arr1[i].breakTime %></td>
</tr>
<% } %>
</div>
</table>
</div>
<div>
<button class="btn btn-lg" onclick="location.href='/setup'" style="float: right;"><i class="fas fa-plus"></i> 추가</button>
</div>
</section>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>내 운동 목록</title>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<!-- Core theme CSS (includes Bootstrap)-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.title-fontA {
font-family: 'Fuzzy Bubbles', cursive;
}
.title-fontB {
font-family: 'Anton', sans-serif;
}
.table-title {
color: pink;
font-size: 20px;
}
.otheruser {
font-family: 'Jua', sans-serif;
}
</style>
</head>
<body>
<div class="navbar navbar-expand-lg navbar-light bgtop">
<div class="container text-center mx-4 my-1">
<a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/otherUser">OTHER</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/myHealth">MY</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
</div>
</div>
<section class="container">
<div>
<h1 class="otheruser mt-5 text-center"><%= username[0] %>**의 운동 목록</h1>
</div>
<% if(arr1.length == 0) { %>
<h2 class="text-center mt-5"><%= username[0] %>**님의 운동목록이 없습니다!</h2>
<% } else { %>
<div class="mt-5">
<table class="table text-center">
<tr class="table-title">
<th>운동 방법</th>
<th>자극 부위</th>
<th>세트</th>
<th>횟수</th>
<th>쉬는시간(초)</th>
</tr>
<div>
<% for(let i=0; i <arr1.length ;i++) {
%>
<tr>
<td><%= arr1[i].way %></td>
<td><%= arr1[i].part %></td>
<td><%= arr1[i].setNumber %></td>
<td><%= arr1[i].number %></td>
<td><%= arr1[i].breakTime %></td>
</tr>
<% } %>
</div>
<% } %>
</table>
</div>
</section>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel="stylesheet"
/>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.title-fontA {
font-family: 'Fuzzy Bubbles', cursive;
}
.title-fontB {
font-family: 'Anton', sans-serif;
}
.noneuser {
font-family: 'Jua', sans-serif;
}
</style>
</head>
<body>
<div class="navbar navbar-expand-lg navbar-light bgtop">
<div class="container text-center mx-4 my-1">
<a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/otherUser">OTHER</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/myHealth">MY</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
</div>
</div>
<div class="container">
<% if(userlist.length ==0) { %>
<div class="mt-5 text-center noneuser">
<h1>비슷한 체형의 사용자가 없습니다!</h1>
</div>
<% } else { %>
<div class="row row-cols-1 row-cols-md-4 g-4 mt-4">
<% for(let i =0; i <userlist.length; i++) { %>
<div class="col">
<a href="/otherUser/show/<%= userlist[i].username %>">
<div class="card" style="width: 75%">
<div class="card-body">
<h5 class="card-title text-center">
<%= userlist[i].username[0] %>**
</h5>
<p class="card-text"></p>
<p><%= userlist[i].userHeight %></p>
<p><%= userlist[i].userWeight %></p>
</div>
</div>
</a>
</div>
<% }} %>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Setup</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel="stylesheet"
/>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.title-fontA {
font-family: "Fuzzy Bubbles", cursive;
}
.title-fontB {
font-family: "Anton", sans-serif;
}
.day-fontB {
font-family: "Jua", sans-serif;
}
</style>
<script src="/static/examples.js"></script>
</head>
<body id="page-top">
<div class="navbar navbar-expand-lg navbar-light bgtop">
<div class="container text-center mx-4 my-1">
<a class="navbar-brand title-fontA" href="/daySelect"
>Health Assistant</a
>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/otherUser">OTHER</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/myHealth">MY</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
</div>
</div>
<section class="container">
<div>
<h1 class="mt-5 text-center day-fontB">운동 추가!</h1>
</div>
<div class="mt-5" style="float: none; margin: 100 auto">
<form
class="w-50"
style="float: none; margin: 0 auto"
method="POST"
action="/setup"
>
<div class="mb-3 row">
<label for="staticEmail" class="col-sm-2 col-form-label"
>요일</label
>
<div class="col-sm-10">
<select class="form-select" name="day">
<option>선택해주세요</option>
<option value="월"></option>
<option value="화"></option>
<option value="수"></option>
<option value="목"></option>
<option value="금"></option>
<option value="토"></option>
<option value="일"></option>
</select>
</div>
</div>
<div class="mb-4 row">
<label for="staticEmail" class="col-sm-2 col-form-label">
운동 부위
</label>
<div class="col-sm-10">
<select
class="form-select"
name="part"
id="part"
onchange="addressKindChange(this)"
>
<option>선택해주세요</option>
<option value="어깨">어깨</option>
<option value="하체">하체</option>
<option value="이삼두">이두 삼두</option>
<option value="코어">코어</option>
<option value="유산소">유산소</option>
<option value="등"></option>
<option value="가슴">가슴</option>
<!-- <option value="d">이두</option> -->
<!-- <option value="e">삼두</option>
<option value="f">하체</option>
<option value="g">코어</option> -->
</select>
</div>
</div>
<div class="mb-4 row">
<label for="staticEmail" class="col-sm-2 col-form-label">
운동 방법
</label>
<div class="col-sm-10">
<select class="form-select" id="way" name="way">
<option>선택해주세요</option>
</select>
</div>
</div>
<div class="mb-4 row">
<label for="staticEmail" class="col-sm-2 col-form-label">
세트 수
</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="setNumber" />
</div>
</div>
<div class="mb-4 row">
<label for="staticEmail" class="col-sm-2 col-form-label">
횟수
</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="number" />
</div>
</div>
<div class="mb-4 row">
<label for="staticEmail" class="col-sm-2 col-form-label">
쉬는 시간(초)
</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="breakTime" />
</div>
</div>
<div class="mt-3 text-center">
<button type="submit" class="btn btn-lg">
<i class="fas fa-save"></i>
</button>
</div>
</form>
</div>
</section>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="/static/scripts.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title><%= day %>요일 운동 시작!</title>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<!-- Core theme CSS (includes Bootstrap)-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Jua&family=Anton&family=Fuzzy+Bubbles:wght@700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.healthLink {
color: black;
font-size: 18px;
}
.healthLink2 {
font-size: 18px;
}
.title-fontA {
font-family: 'Fuzzy Bubbles', cursive;
}
.title-fontB {
font-family: 'Anton', sans-serif;
}
.day-fontB {
font-family: 'Jua';
}
.table-title {
color: pink;
font-size: 20px;
}
.timer {
font-family: 'Jua';
font-size: 140px;
color: darkcyan;
}
.healthname {
font-family: 'Jua';
font-size: 57px;
color: darkgrey;
}
</style>
<script src="/static/timer.js"></script>
</head>
<body>
<div class="navbar navbar-expand-lg navbar-light bgtop">
<div class="container text-center mx-4 my-1">
<a class="navbar-brand title-fontA" href="/daySelect">Health Assistant</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/otherUser">OTHER</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/myHealth">MY</a>
</div>
<div class="mx-3">
<a class="otherUser title-fontB" href="/auth/logout/kakao">LOGOUT</a>
</div>
</div>
<section class="container">
<div>
<h1 class="mt-5 text-center day-fontB"><%= day%>요일 운동 시작하세요!</h1>
</div>
<div class="mt-5">
<table class="table text-center">
<tr class="table-title">
<th>운동 방법</th>
<th>자극 부위</th>
<th>세트</th>
<th>횟수</th>
<th>쉬는시간(초)</th>
<th></th>
<th></th>
</tr>
<div>
<% for(let i=0; i <arr1.length ;i++) {
%>
<tr>
<% if(arr1[i].way =="프론트 레이즈") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=j2Nvn8nbtXs"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "아놀드 프레스") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=tsSxQ2__DQU"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "래터럴 레이즈") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=geenhiHju-o"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "리버스 펙덱 플라이") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=Ey8KQroKsCk"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "인클라인 벤치프레스") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=11gY7Q5D5wo"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "벤치프레스") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=5rRHgro9Vrg"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "딥스") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=W6I5Tsuu_CE"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "푸쉬업") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=2qzcGwK282Y"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "랫풀다운") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=hVa5dsH3DaA"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "시티드로우") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=jzf_IMgQ1Zc"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "데드리프트") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=6RW8nWzbIS8"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "바벨로우") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=g4X2faTd0DE"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "풀업") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=LY54fY1ThOw"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "덤벨 컬") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=sAq_ocpRh_I"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "오버헤드프레스") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=kDbUNTX-Xts"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "덤벨 킥백") { %>
<td><a class="healthLink" href="https://youtu.be/6SS6K3lAwZ8"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "라잉 트라이셉스 익스텐션") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=MVwknaifUfw"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "레그프레스") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=hYwJrXpzEfs"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "스쿼트") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=IOCOKjTI2Qo"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "런지") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=Nx1_TkD41DE"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "레그 익스텐션") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=amJyUQfDXTs"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "레그컬") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=_UZDE-HH2eA"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "플랭크") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=B--6YfhmBGc"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "크런치") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=pq6aj0yiSrw"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "백 익스텐션") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=Bw9YuQTTc58"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "싸이클") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=y1e3KYo_Pas"><%= arr1[i].way %></a></td>
<% } else if(arr1[i].way == "런닝머신") { %>
<td><a class="healthLink" href="https://www.youtube.com/watch?v=djAJE282AyI"><%= arr1[i].way %></a></td>
<% } else {%>
<td class="healthLink2"><%= arr1[i].way %></td>
<% } %>
<td><%= arr1[i].part %></td>
<td><%= arr1[i].setNumber %></td>
<td><%= arr1[i].number %></td>
<td id="breaktime"><%= arr1[i].breakTime %></td>
<td>
<button class="btn" onclick="onClick(this)" name="<%= arr1[i].way %>" value="<%= arr1[i].breakTime %>">
<i class="far fa-clock"></i>
</button>
</td>
<td>
<button class="btn" onclick="location.href='edit/<%= arr1[i].way %>'"><i class="fas fa-edit"></i></button>
</td>
<td>
<button class="btn" onclick="location.href='remove/<%= arr1[i].Id %>'"><i class="fas fa-trash-alt"></i></button>
</td>
</tr>
<% } %>
</div>
</table>
</div>
</section>
<section class="container">
<div>
<button class="btn btn-lg" onclick="location.href='/setup'" style="float: right;"><i class="fas fa-plus"></i> 추가</button>
</div>
</section>
<section class="container">
<div>
<div>
<div>
</div>
</div>
<div>
</div>
</div>
</section>
<section class="container text-center">
<div class="row">
<div class="healthname mt-5" id="healthname">
</div>
<div class="timer mt-2" id="demo">
</div>
<div class="day-fontB" id="deleteBtn">
</div>
</div>
</section>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<meta name="description" content="" />
<meta name="author" content="" />
<title>정보 입력</title>
<!-- Favicon-->
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Font Awesome icons (free version)-->
<script
src="https://use.fontawesome.com/releases/v5.15.4/js/all.js"
crossorigin="anonymous"
></script>
<!-- Simple line icons-->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.5.5/css/simple-line-icons.min.css"
rel="stylesheet"
/>
<!-- Google fonts-->
<link
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic"
rel="stylesheet"
type="text/css"
/>
<!-- Core theme CSS (includes Bootstrap)-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Corinthia:wght@700&family=Fuzzy+Bubbles:wght@700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/stylesheets/styles.css" />
<style>
.title-fontA {
font-family: "Fuzzy Bubbles", cursive;
}
</style>
</head>
<body id="page-top">
<div class="navbar navbar-expand-lg navbar-light fixed-top">
<div class="container mx-4 my-1">
<a class="navbar-brand title-fontA">Health Assistant</a>
</div>
</div>
<div class="mastheadSecond">
<div class="container text-center mt-5">
<h1 class="text-white">User Information</h1>
<div class="row">
<div class="col-lg-6 order-lg-1">
<div class="p-5 mr-2 float-end">
<img
class="img-fluid rounded-circle"
src="../stylesheets/assets/img/human.png"
alt="..."
/>
</div>
</div>
<div class="col-lg-6 order-lg-2">
<div class="p-5 mt-3">
<form action="/user" method="post" id="userForm">
<div class="mt-5">
<input
class="form-control w-50 text-center"
placeholder="키를 입력해주세요"
type="text"
name="height"
/>
</div>
<div class="mt-4">
<input
class="form-control w-50 text-center"
placeholder="몸무게를 입력해주세요"
type="text"
name="weight"
/>
</div>
<div>
<button
class="btn btn-primary rounded float-start w-50 mt-4"
type="submit"
>
확인
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Bootstrap core JS-->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<!-- Core theme JS-->
<script src="/static/scripts.js"></script>
</body>
</html>