Showing
15 changed files
with
230 additions
and
69 deletions
This diff is collapsed. Click to expand it.
| ... | @@ -9,10 +9,12 @@ | ... | @@ -9,10 +9,12 @@ |
| 9 | "axios": "^0.27.2", | 9 | "axios": "^0.27.2", |
| 10 | "body-parser": "^1.20.0", | 10 | "body-parser": "^1.20.0", |
| 11 | "cors": "^2.8.5", | 11 | "cors": "^2.8.5", |
| 12 | + "crypto-js": "^4.1.1", | ||
| 12 | "express": "^4.18.1", | 13 | "express": "^4.18.1", |
| 13 | "fs": "^0.0.1-security", | 14 | "fs": "^0.0.1-security", |
| 14 | "localforage": "^1.10.0", | 15 | "localforage": "^1.10.0", |
| 15 | "mysql": "^2.18.1", | 16 | "mysql": "^2.18.1", |
| 17 | + "mysql2": "^2.3.3", | ||
| 16 | "puppeteer": "^14.1.1", | 18 | "puppeteer": "^14.1.1", |
| 17 | "react": "^18.1.0", | 19 | "react": "^18.1.0", |
| 18 | "react-dom": "^18.1.0", | 20 | "react-dom": "^18.1.0", | ... | ... |
| 1 | const express = require("express"); | 1 | const express = require("express"); |
| 2 | -const mysql = require("mysql"); | 2 | +const mysql = require("mysql2/promise"); |
| 3 | const fs = require("fs"); | 3 | const fs = require("fs"); |
| 4 | const router = express.Router(); | 4 | const router = express.Router(); |
| 5 | 5 | ||
| 6 | -const [id, pw] = fs | 6 | +async function route() { |
| 7 | - .readFileSync("server/libs/sql.pvdata", "utf8") | 7 | + const [id, pw] = fs |
| 8 | - .split("\r\n"); | 8 | + .readFileSync("server/libs/sql.pvdata", "utf8") |
| 9 | - | 9 | + .split("\r\n"); |
| 10 | -const connection = mysql.createConnection({ | 10 | + const connection = await mysql.createConnection({ |
| 11 | - host: "localhost", | 11 | + host: "localhost", |
| 12 | - user: id, | 12 | + user: id, |
| 13 | - password: pw, | 13 | + password: pw, |
| 14 | - database: "mydb", | 14 | + database: "db", |
| 15 | -}); | ||
| 16 | - | ||
| 17 | -router.get("/", (req, res) => { | ||
| 18 | - res.send("DB Root"); | ||
| 19 | -}); | ||
| 20 | - | ||
| 21 | -router.get("/mytable", (req, res) => { | ||
| 22 | - connection.query("SELECT * from mytable", (error, rows) => { | ||
| 23 | - if (error) throw error; | ||
| 24 | - console.log(rows); | ||
| 25 | - res.send(rows); | ||
| 26 | }); | 15 | }); |
| 27 | -}); | 16 | + |
| 17 | + // (userID, date) => schedules | ||
| 18 | + router.get("/schedules_date", async (req, res) => { | ||
| 19 | + console.log("/db/schedules_date"); | ||
| 20 | + try { | ||
| 21 | + const queryString = ` | ||
| 22 | + SELECT sc.label, sc.type, sc.description, sc.url, sc.detail, sbj.name, us.color | ||
| 23 | + FROM schedules_date sc | ||
| 24 | + INNER JOIN \`user-subject\` us | ||
| 25 | + ON sc.userID = us.userID | ||
| 26 | + AND sc.subjectID = us.subjectID | ||
| 27 | + AND us.status = 1 | ||
| 28 | + INNER JOIN subjects sbj | ||
| 29 | + ON sc.subjectID = sbj.ID | ||
| 30 | + WHERE sc.date = "${req.query.date}" | ||
| 31 | + AND sc.userID = ${req.query.userID} | ||
| 32 | + AND sc.status = 1`; | ||
| 33 | + const [results] = await connection.query(queryString); | ||
| 34 | + res.send(results); | ||
| 35 | + } catch (e) { | ||
| 36 | + console.log(e); | ||
| 37 | + res.end(); | ||
| 38 | + } | ||
| 39 | + }); | ||
| 40 | + | ||
| 41 | + // (ID) => null | name //unused | ||
| 42 | + router.get("/subjects", async (req, res) => { | ||
| 43 | + console.log("/db/subjects"); | ||
| 44 | + try { | ||
| 45 | + const queryString = ` | ||
| 46 | + SELECT name FROM subjects sbj | ||
| 47 | + WHERE sbj.ID = ${req.query.ID}`; | ||
| 48 | + const [results] = await connection.query(queryString); | ||
| 49 | + res.send(results.length && results[0].name); | ||
| 50 | + } catch (e) { | ||
| 51 | + console.log(e); | ||
| 52 | + res.end(); | ||
| 53 | + } | ||
| 54 | + }); | ||
| 55 | + | ||
| 56 | + // (loginID) => null | ID(str) | ||
| 57 | + router.get("/users", async (req, res) => { | ||
| 58 | + console.log("/db/users"); | ||
| 59 | + try { | ||
| 60 | + const queryString = ` | ||
| 61 | + SELECT ID FROM users us | ||
| 62 | + WHERE us.loginID = '${req.query.loginID}'`; | ||
| 63 | + const [results] = await connection.query(queryString); | ||
| 64 | + res.send(results.length ? results[0].ID.toString() : null); | ||
| 65 | + } catch (e) { | ||
| 66 | + console.log(e); | ||
| 67 | + res.end(); | ||
| 68 | + } | ||
| 69 | + }); | ||
| 70 | + | ||
| 71 | + // (loginID, loginPW) => null | "correct" | ||
| 72 | + router.get("/users/check", async (req, res) => { | ||
| 73 | + console.log("/db/users/check"); | ||
| 74 | + try { | ||
| 75 | + const queryString = ` | ||
| 76 | + SELECT loginPW FROM users us | ||
| 77 | + WHERE us.loginID = '${req.query.loginID}'`; | ||
| 78 | + const [results] = await connection.query(queryString); | ||
| 79 | + res.send(results[0].loginPW === req.query.loginPW ? "correct" : null); | ||
| 80 | + } catch (e) { | ||
| 81 | + console.log(e); | ||
| 82 | + res.end(); | ||
| 83 | + } | ||
| 84 | + }); | ||
| 85 | + | ||
| 86 | + // (userID) => subjects | ||
| 87 | + router.get("/user-subject", async (req, res) => { | ||
| 88 | + console.log("/db/user-subject"); | ||
| 89 | + try { | ||
| 90 | + const queryString = ` | ||
| 91 | + SELECT subjectID, nickname, status, color FROM \`user-subject\` us | ||
| 92 | + WHERE us.userID = ${req.query.userID}`; | ||
| 93 | + const [results] = await connection.query(queryString); | ||
| 94 | + res.send(results); | ||
| 95 | + } catch (e) { | ||
| 96 | + console.log(e); | ||
| 97 | + res.end(); | ||
| 98 | + } | ||
| 99 | + }); | ||
| 100 | + | ||
| 101 | + router.get("*", (req, res) => { | ||
| 102 | + console.log("/db/*"); | ||
| 103 | + res.end(); | ||
| 104 | + }); | ||
| 105 | +} | ||
| 106 | + | ||
| 107 | +route(); | ||
| 28 | 108 | ||
| 29 | module.exports = router; | 109 | module.exports = router; | ... | ... |
| ... | @@ -15,8 +15,10 @@ app.use( | ... | @@ -15,8 +15,10 @@ app.use( |
| 15 | credentials: true, | 15 | credentials: true, |
| 16 | }) | 16 | }) |
| 17 | ); | 17 | ); |
| 18 | -app.use(bodyParser.urlencoded({ extended: false })); | 18 | +// app.use(bodyParser.urlencoded({ extended: false })); |
| 19 | -app.use(bodyParser.json()); | 19 | +// app.use(bodyParser.json()); |
| 20 | +app.use(express.json()); | ||
| 21 | +app.use(express.urlencoded({ extended: true })); | ||
| 20 | 22 | ||
| 21 | app.post("/", (req, res) => { | 23 | app.post("/", (req, res) => { |
| 22 | res.send({ body: req.body }); | 24 | res.send({ body: req.body }); | ... | ... |
| 1 | import { useContext, useEffect, useState } from "react"; | 1 | import { useContext, useEffect, useState } from "react"; |
| 2 | +import localforage from "localforage"; | ||
| 2 | 3 | ||
| 3 | import { toYMD, toYMDStr } from "../utils/Dates"; | 4 | import { toYMD, toYMDStr } from "../utils/Dates"; |
| 4 | import { scheForage } from "../utils/LocalForage"; | 5 | import { scheForage } from "../utils/LocalForage"; |
| 5 | 6 | ||
| 6 | import { CalendarStateContext } from "../pages/Calendar"; | 7 | import { CalendarStateContext } from "../pages/Calendar"; |
| 7 | import ScheduleItem from "./ScheduleItem"; | 8 | import ScheduleItem from "./ScheduleItem"; |
| 9 | +import axios from "axios"; | ||
| 8 | 10 | ||
| 9 | const GridItem = ({ targetDate }) => { | 11 | const GridItem = ({ targetDate }) => { |
| 10 | const { state } = useContext(CalendarStateContext); | 12 | const { state } = useContext(CalendarStateContext); |
| ... | @@ -14,7 +16,14 @@ const GridItem = ({ targetDate }) => { | ... | @@ -14,7 +16,14 @@ const GridItem = ({ targetDate }) => { |
| 14 | 16 | ||
| 15 | useEffect(() => { | 17 | useEffect(() => { |
| 16 | async function loadScheduleItems() { | 18 | async function loadScheduleItems() { |
| 17 | - setSchedules(await scheForage.getItem(toYMDStr(targetDate))); | 19 | + const userID = await localforage.getItem("userID"); |
| 20 | + const res = await axios.get("http://localhost:3001/db/schedules_date", { | ||
| 21 | + params: { | ||
| 22 | + userID, | ||
| 23 | + date: toYMDStr(targetDate, "-"), | ||
| 24 | + }, | ||
| 25 | + }); | ||
| 26 | + setSchedules(res.data); | ||
| 18 | } | 27 | } |
| 19 | loadScheduleItems(); | 28 | loadScheduleItems(); |
| 20 | }, [targetDate]); | 29 | }, [targetDate]); | ... | ... |
| 1 | +import localforage from "localforage"; | ||
| 1 | import { useContext } from "react"; | 2 | import { useContext } from "react"; |
| 2 | import { useNavigate } from "react-router-dom"; | 3 | import { useNavigate } from "react-router-dom"; |
| 3 | 4 | ||
| 4 | import { CalendarStateContext } from "../pages/Calendar"; | 5 | import { CalendarStateContext } from "../pages/Calendar"; |
| 5 | import "../styles/Header.css"; | 6 | import "../styles/Header.css"; |
| 6 | import { moveDate, toYMD } from "../utils/Dates"; | 7 | import { moveDate, toYMD } from "../utils/Dates"; |
| 7 | -import { dataForage } from "../utils/LocalForage"; | ||
| 8 | 8 | ||
| 9 | const Header = () => { | 9 | const Header = () => { |
| 10 | const { state, setState } = useContext(CalendarStateContext); | 10 | const { state, setState } = useContext(CalendarStateContext); |
| ... | @@ -93,7 +93,7 @@ const Header = () => { | ... | @@ -93,7 +93,7 @@ const Header = () => { |
| 93 | <button | 93 | <button |
| 94 | className="hrb_r" | 94 | className="hrb_r" |
| 95 | onClick={async () => { | 95 | onClick={async () => { |
| 96 | - await dataForage.setItem("session", ""); | 96 | + await localforage.setItem("session", null); |
| 97 | navigate("/"); | 97 | navigate("/"); |
| 98 | }} | 98 | }} |
| 99 | > | 99 | > | ... | ... |
| ... | @@ -5,14 +5,17 @@ import zoomSymbol from "../assets/zoom.png"; | ... | @@ -5,14 +5,17 @@ import zoomSymbol from "../assets/zoom.png"; |
| 5 | import ecampusSymbol from "../assets/e-Campus.png"; | 5 | import ecampusSymbol from "../assets/e-Campus.png"; |
| 6 | 6 | ||
| 7 | const ScheduleItem = ({ schedule }) => { | 7 | const ScheduleItem = ({ schedule }) => { |
| 8 | - const { subCode, type, category, label, start, end } = schedule; | 8 | + const { |
| 9 | - const { subsObj } = useContext(CalendarStateContext); | 9 | + name: subjectName, |
| 10 | - const subject = subsObj[subCode]; | 10 | + color: subjectColor, |
| 11 | - if (!subject) { | 11 | + type, |
| 12 | - console.log("can't find " + subCode); | 12 | + label, |
| 13 | - return; | 13 | + description, |
| 14 | - } | 14 | + url, |
| 15 | - if (!subject.selected) return; | 15 | + detail, |
| 16 | + startTime = null, | ||
| 17 | + endTime = null, | ||
| 18 | + } = schedule; | ||
| 16 | 19 | ||
| 17 | const selectSymbol = () => { | 20 | const selectSymbol = () => { |
| 18 | let symbol; | 21 | let symbol; |
| ... | @@ -20,7 +23,7 @@ const ScheduleItem = ({ schedule }) => { | ... | @@ -20,7 +23,7 @@ const ScheduleItem = ({ schedule }) => { |
| 20 | case "zoom": | 23 | case "zoom": |
| 21 | symbol = zoomSymbol; | 24 | symbol = zoomSymbol; |
| 22 | break; | 25 | break; |
| 23 | - case "ecampus": | 26 | + case "assignment": |
| 24 | symbol = ecampusSymbol; | 27 | symbol = ecampusSymbol; |
| 25 | break; | 28 | break; |
| 26 | default: | 29 | default: |
| ... | @@ -29,11 +32,15 @@ const ScheduleItem = ({ schedule }) => { | ... | @@ -29,11 +32,15 @@ const ScheduleItem = ({ schedule }) => { |
| 29 | }; | 32 | }; |
| 30 | 33 | ||
| 31 | return ( | 34 | return ( |
| 32 | - <div className="ScheduleItem" style={{ borderColor: subject.color }}> | 35 | + <div className="ScheduleItem" style={{ borderColor: subjectColor }}> |
| 33 | <img className="s_symbol" src={selectSymbol()} alt="404" /> | 36 | <img className="s_symbol" src={selectSymbol()} alt="404" /> |
| 34 | - {start && <span className="s_start">{start[0] + ":" + start[1]}</span>} | 37 | + {startTime && ( |
| 35 | - {end && <span className="s_end">{end[0] + ":" + end[1]}</span>} | 38 | + <span className="s_start">{startTime[0] + ":" + startTime[1]}</span> |
| 36 | - <span className="s_category">{category}</span> | 39 | + )} |
| 40 | + {endTime && ( | ||
| 41 | + <span className="s_end">{endTime[0] + ":" + endTime[1]}</span> | ||
| 42 | + )} | ||
| 43 | + {/* <span className="s_category">{subjectName}</span> */} | ||
| 37 | <span className="s_slabel">{label}</span> | 44 | <span className="s_slabel">{label}</span> |
| 38 | </div> | 45 | </div> |
| 39 | ); | 46 | ); | ... | ... |
| 1 | import React, { useEffect, useReducer, useState } from "react"; | 1 | import React, { useEffect, useReducer, useState } from "react"; |
| 2 | import { useNavigate, Route, Routes } from "react-router-dom"; | 2 | import { useNavigate, Route, Routes } from "react-router-dom"; |
| 3 | 3 | ||
| 4 | -import { initTempSubjects } from "../utils/Test"; | 4 | +import { subForage } from "../utils/LocalForage"; |
| 5 | -import { dataForage, subForage } from "../utils/LocalForage"; | ||
| 6 | 5 | ||
| 7 | import Month from "../components/Month"; | 6 | import Month from "../components/Month"; |
| 8 | import Header from "../components/Header"; | 7 | import Header from "../components/Header"; |
| 9 | import Side from "../components/Side"; | 8 | import Side from "../components/Side"; |
| 9 | +import localforage from "localforage"; | ||
| 10 | +import axios from "axios"; | ||
| 10 | 11 | ||
| 11 | export const CalendarStateContext = React.createContext(); | 12 | export const CalendarStateContext = React.createContext(); |
| 12 | 13 | ||
| ... | @@ -36,12 +37,17 @@ const Calendar = () => { | ... | @@ -36,12 +37,17 @@ const Calendar = () => { |
| 36 | const navigate = useNavigate(); | 37 | const navigate = useNavigate(); |
| 37 | useEffect(() => { | 38 | useEffect(() => { |
| 38 | async function onMount() { | 39 | async function onMount() { |
| 39 | - if (!(await dataForage.getItem("session"))) return navigate("/login"); | 40 | + if (!(await localforage.getItem("session"))) return navigate("/login"); |
| 40 | - | 41 | + // get user's subjects |
| 41 | - if (!(await dataForage.getItem("Subjects"))) await initTempSubjects(); | 42 | + const userID = await localforage.getItem("userID"); |
| 43 | + const subjects = await axios.get( | ||
| 44 | + "http://localhost:3001/db/user-subject", | ||
| 45 | + { params: { userID } } | ||
| 46 | + ).data; | ||
| 47 | + console.log(subjects); | ||
| 42 | let tsubsObj = {}; | 48 | let tsubsObj = {}; |
| 43 | - for (const code of await dataForage.getItem("Subjects")) { | 49 | + for (const sub of subjects) { |
| 44 | - tsubsObj[code] = await subForage.getItem(code); | 50 | + tsubsObj[sub.subjectID] = sub; |
| 45 | } | 51 | } |
| 46 | dispatch({ type: "INIT", subsObj: tsubsObj }); | 52 | dispatch({ type: "INIT", subsObj: tsubsObj }); |
| 47 | } | 53 | } | ... | ... |
| 1 | +import localforage from "localforage"; | ||
| 1 | import { useEffect } from "react"; | 2 | import { useEffect } from "react"; |
| 2 | import { useNavigate } from "react-router-dom"; | 3 | import { useNavigate } from "react-router-dom"; |
| 3 | 4 | ||
| 4 | -import { dataForage } from "../utils/LocalForage"; | ||
| 5 | - | ||
| 6 | const Home = () => { | 5 | const Home = () => { |
| 7 | console.log("visit Home"); | 6 | console.log("visit Home"); |
| 8 | 7 | ||
| ... | @@ -10,7 +9,7 @@ const Home = () => { | ... | @@ -10,7 +9,7 @@ const Home = () => { |
| 10 | useEffect(() => { | 9 | useEffect(() => { |
| 11 | async function where() { | 10 | async function where() { |
| 12 | let destination; | 11 | let destination; |
| 13 | - if (await dataForage.getItem("session")) { | 12 | + if (await localforage.getItem("session")) { |
| 14 | destination = "/calendar/month"; | 13 | destination = "/calendar/month"; |
| 15 | } else { | 14 | } else { |
| 16 | destination = "/login"; | 15 | destination = "/login"; | ... | ... |
| 1 | import { useEffect, useState } from "react"; | 1 | import { useEffect, useState } from "react"; |
| 2 | import { useNavigate } from "react-router-dom"; | 2 | import { useNavigate } from "react-router-dom"; |
| 3 | +import localforage from "localforage"; | ||
| 3 | 4 | ||
| 4 | -import { dataForage } from "../utils/LocalForage"; | ||
| 5 | import "../styles/Login.css"; | 5 | import "../styles/Login.css"; |
| 6 | import axios from "axios"; | 6 | import axios from "axios"; |
| 7 | +import cryptoJs from "crypto-js"; | ||
| 7 | 8 | ||
| 8 | const Login = () => { | 9 | const Login = () => { |
| 9 | console.log("visit Login"); | 10 | console.log("visit Login"); |
| 10 | const [state, setState] = useState({ | 11 | const [state, setState] = useState({ |
| 11 | id: "", | 12 | id: "", |
| 12 | pw: "", | 13 | pw: "", |
| 14 | + btn: "Login", | ||
| 13 | }); | 15 | }); |
| 14 | 16 | ||
| 15 | const handleChangeState = (e) => { | 17 | const handleChangeState = (e) => { |
| ... | @@ -21,21 +23,57 @@ const Login = () => { | ... | @@ -21,21 +23,57 @@ const Login = () => { |
| 21 | 23 | ||
| 22 | const navigate = useNavigate(); | 24 | const navigate = useNavigate(); |
| 23 | const login = async () => { | 25 | const login = async () => { |
| 24 | - const res = await axios.post("http://localhost:3001/login/", { | 26 | + setState({ ...state, btn: "Login..." }); |
| 25 | - id: state.id, | 27 | + const { data: userDBID } = await axios.get( |
| 26 | - pw: state.pw, | 28 | + "http://localhost:3001/db/users", |
| 27 | - }); | 29 | + { |
| 30 | + params: { | ||
| 31 | + loginID: state.id, | ||
| 32 | + }, | ||
| 33 | + } | ||
| 34 | + ); | ||
| 28 | 35 | ||
| 29 | - if (res.data === "login failed") alert("ID/PW를 확인해주세요"); | 36 | + if (userDBID) { |
| 30 | - else { | 37 | + //pass crawling |
| 31 | - await dataForage.setItem("session", true); | 38 | + const hashpw = cryptoJs.SHA256(state.pw).toString(); |
| 32 | - navigate("/"); | 39 | + const { data: isCorrectPW } = await axios.get( |
| 40 | + "http://localhost:3001/db/users/check", | ||
| 41 | + { | ||
| 42 | + params: { loginID: state.id, loginPW: hashpw }, | ||
| 43 | + } | ||
| 44 | + ); | ||
| 45 | + if (isCorrectPW) await localforage.setItem("userID", Number(userDBID)); | ||
| 46 | + else { | ||
| 47 | + setState({ ...state, btn: "Login" }); | ||
| 48 | + alert("ID/PW를 확인해주세요"); | ||
| 49 | + return; | ||
| 50 | + } | ||
| 51 | + } else { | ||
| 52 | + //crawling | ||
| 53 | + const { data: loginResult } = await axios.post( | ||
| 54 | + "http://localhost:3001/login/", | ||
| 55 | + { | ||
| 56 | + id: state.id, | ||
| 57 | + pw: state.pw, | ||
| 58 | + } | ||
| 59 | + ); | ||
| 60 | + if (loginResult === "login failed") { | ||
| 61 | + setState({ ...state, btn: "Login" }); | ||
| 62 | + alert("ID/PW를 확인해주세요"); | ||
| 63 | + return; | ||
| 64 | + } | ||
| 65 | + // + else (성공시) localforage에 userID추가 | ||
| 33 | } | 66 | } |
| 67 | + // + localforage에 id pw 추가 | ||
| 68 | + await localforage.setItem("id", state.id); | ||
| 69 | + await localforage.setItem("pw", state.pw); | ||
| 70 | + await localforage.setItem("session", true); | ||
| 71 | + navigate("/"); | ||
| 34 | }; | 72 | }; |
| 35 | 73 | ||
| 36 | useEffect(() => { | 74 | useEffect(() => { |
| 37 | async function ifAlreadyLogined() { | 75 | async function ifAlreadyLogined() { |
| 38 | - if (await dataForage.getItem("session")) navigate("/"); | 76 | + if (await localforage.getItem("session")) navigate("/"); |
| 39 | } | 77 | } |
| 40 | ifAlreadyLogined(); | 78 | ifAlreadyLogined(); |
| 41 | }, [navigate]); | 79 | }, [navigate]); |
| ... | @@ -61,7 +99,7 @@ const Login = () => { | ... | @@ -61,7 +99,7 @@ const Login = () => { |
| 61 | type="password" | 99 | type="password" |
| 62 | /> | 100 | /> |
| 63 | </div> | 101 | </div> |
| 64 | - <button onClick={login}>Login</button> | 102 | + <button onClick={login}>{state.btn}</button> |
| 65 | </div> | 103 | </div> |
| 66 | ); | 104 | ); |
| 67 | }; | 105 | }; | ... | ... |
| 1 | +import localforage from "localforage"; | ||
| 1 | import { Navigate, useNavigate } from "react-router-dom"; | 2 | import { Navigate, useNavigate } from "react-router-dom"; |
| 2 | 3 | ||
| 3 | import "../styles/Settings.css"; | 4 | import "../styles/Settings.css"; |
| 4 | -import { dataForage } from "../utils/LocalForage"; | ||
| 5 | 5 | ||
| 6 | const Settings = () => { | 6 | const Settings = () => { |
| 7 | console.log("visit Settings"); | 7 | console.log("visit Settings"); |
| 8 | 8 | ||
| 9 | - const session = dataForage.getItem("session"); | 9 | + const session = localforage.getItem("session"); |
| 10 | 10 | ||
| 11 | const navigate = useNavigate(); | 11 | const navigate = useNavigate(); |
| 12 | 12 | ... | ... |
| ... | @@ -6,12 +6,12 @@ function toYMD(dateObj) { | ... | @@ -6,12 +6,12 @@ function toYMD(dateObj) { |
| 6 | return { year, month, date }; | 6 | return { year, month, date }; |
| 7 | } | 7 | } |
| 8 | 8 | ||
| 9 | -function toYMDStr(dateObj) { | 9 | +function toYMDStr(dateObj, joint) { |
| 10 | return [ | 10 | return [ |
| 11 | dateObj.getFullYear(), | 11 | dateObj.getFullYear(), |
| 12 | dateObj.getMonth() + 1, | 12 | dateObj.getMonth() + 1, |
| 13 | dateObj.getDate(), | 13 | dateObj.getDate(), |
| 14 | - ].join("/"); | 14 | + ].join(joint); |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | function toSunday(dateObj) { | 17 | function toSunday(dateObj) { | ... | ... |
src/utils/Encrypt.js
0 → 100644
| 1 | +const CryptoJS = require("crypto-js"); | ||
| 2 | + | ||
| 3 | +function createHashed(str) { | ||
| 4 | + var hash = CryptoJS.SHA256(str); | ||
| 5 | + console.log("암호화된 값 : " + hash); | ||
| 6 | + | ||
| 7 | + // base64 | ||
| 8 | + // var key = CryptoJS.enc.Utf8.parse(str); | ||
| 9 | + // var base64 = CryptoJS.enc.Base64.stringify(key); //encoded | ||
| 10 | + // var decrypt = CryptoJS.enc.Base64.parse(base64); | ||
| 11 | + // var hashData = decrypt.toString(CryptoJS.enc.Utf8); //decoded | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +createHashed("Happy2468!"); | ||
| 15 | + | ||
| 16 | +module.exports = createHashed; |
| ... | @@ -19,9 +19,9 @@ async function initTempSubjects() { | ... | @@ -19,9 +19,9 @@ async function initTempSubjects() { |
| 19 | }, | 19 | }, |
| 20 | ]; | 20 | ]; |
| 21 | 21 | ||
| 22 | - await scheForage.setItem(toYMDStr(new Date("2022-5-20")), tempsch); | 22 | + await scheForage.setItem(toYMDStr(new Date("2022-5-20"), "/"), tempsch); |
| 23 | - await scheForage.setItem(toYMDStr(new Date("2022-5-27")), tempsch); | 23 | + await scheForage.setItem(toYMDStr(new Date("2022-5-27"), "/"), tempsch); |
| 24 | - await scheForage.setItem(toYMDStr(new Date("2022-6-3")), tempsch); | 24 | + await scheForage.setItem(toYMDStr(new Date("2022-6-3"), "/"), tempsch); |
| 25 | 25 | ||
| 26 | let tcolors = [ | 26 | let tcolors = [ |
| 27 | "red", | 27 | "red", | ... | ... |
-
Please register or login to post a comment