Mukho

Add date and time in Log

......@@ -37,6 +37,16 @@ app.use("/js", express.static(__dirname + "/js"));
app.use("/chat", express.static(__dirname+ "/chat"));
app.set('view engine', 'ejs')
// 로그용
var today = new Date();
var year = today.getFullYear();
var month = ('0' + (today.getMonth()+1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var hour = ('0' + today.getHours()).slice(-2);
var minute = ('0' + today.getMinutes()).slice(-2);
var second = ('0' + today.getSeconds()).slice(-2);
var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
app.use(session({
secret: 'keyboard cat',
resave: false,
......@@ -83,5 +93,5 @@ io.sockets.on('connection', function(socket) {
})
server.listen(PORT, function(){
console.log("서버를 구동합니다.(Port: "+PORT+")");
console.log(logString+"서버가 시작되었습니다.(Port: "+PORT+")");
});
\ No newline at end of file
......
......@@ -55,7 +55,7 @@ SET @COUNT = 0;
UPDATE board SET idx = @COUNT:=@COUNT+1;
입력<h2><br><br>
최종 수정: 2021-11-20 12:32<br>
최종 수정: 2021-11-20 01:30<br>
최종 수정 내용:
<h2>★★필수입력★★<h2>
alter table board drop passwd;
......@@ -63,7 +63,7 @@ alter table board add ID varchar(20) not null;
alter table board change name nickname;
alter table board modify nickname varchar(20);
게시글 수정 및 삭제 세션+권한 연동/DB수정, 버그 수정, 게시글 조회수 구현, 프로필 수정 세션 연동<br>
로그 보강, 게시글 수정 및 삭제 세션+권한 연동/DB수정, 버그 수정, 게시글 조회수 구현, 프로필 수정 세션 연동<br>
수정 내용: about/사이트 git 링크 추가, 프로필 추가, 메뉴바/하단 추가, 게시판에 기본 서식 추가, 로그인시에만 게시판 관련 경로에 접근가능하게 함, 사용자 로그 생성, 경로 지정 수정, 제목 추가, userDB, 회원가입에 nickname요소 추가, 세션에 ID + 닉네임 전달기능 추가, 게시판의 글쓰기 및 글 열람 기능 추가.
<!-- http://khuhub.khu.ac.kr/2017104034/Singer-Composer -->
\ No newline at end of file
......
......@@ -3,13 +3,26 @@ var app = express()
var router = express.Router();
var path = require('path') // 상대경로
// 로그용
var today = new Date();
var year = today.getFullYear();
var month = ('0' + (today.getMonth()+1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var hour = ('0' + today.getHours()).slice(-2);
var minute = ('0' + today.getMinutes()).slice(-2);
var second = ('0' + today.getSeconds()).slice(-2);
var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
// main page는 login이 된 상태(세션정보가 있을때만) 접근이 가능하게 하자 -> info에 구현해놓음.
router.get('/', function(req, res){
var id = req.user;
if(!id) res.sendFile(path.join(__dirname, "../../public/about.html"))
if(!id){
console.log(logString+'익명의 유저가 about 페이지에서 작업 중입니다.')
res.sendFile(path.join(__dirname, "../../public/about.html"))
}
if(id){
var nickname = req.user.nickname;
console.log(req.user.ID+'('+nickname+') 유저가 about 페이지에서 작업 중입니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 about 페이지에서 작업 중입니다.')
res.render('about.ejs', {'ID': id, 'nickname': nickname});
}
});
......
......@@ -8,9 +8,22 @@ var path = require('path') // 상대경로
var mysql_odbc = require('../../db/db_board')();
var board = mysql_odbc.init();
// 로그용
var today = new Date();
var year = today.getFullYear();
var month = ('0' + (today.getMonth()+1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var hour = ('0' + today.getHours()).slice(-2);
var minute = ('0' + today.getMinutes()).slice(-2);
var second = ('0' + today.getSeconds()).slice(-2);
var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
router.get('/list/:page', function(req, res, next) {
var id = req.user;
if(!id) res.redirect('/board/list/1')
if(!id){
console.log(logString+'익명 유저의 게시판 접근을 거부했습니다.')
res.redirect('/board/list/1')
}
else{
var page = req.params.page;
var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
......@@ -19,7 +32,7 @@ router.get('/list/:page', function(req, res, next) {
if (err) console.error("err : " + err);
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(req.user.ID+'('+nickname+') 유저가 게시판을 보고 있습니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 게시판을 보고 있습니다.')
res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '게시판 리스트', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
})
}
......@@ -27,17 +40,23 @@ router.get('/list/:page', function(req, res, next) {
router.get('/list', function(req,res,next){
var id = req.user;
if(!id) res.sendFile(path.join(__dirname, "../../public/login.html"))
if(!id){
console.log(logString+'익명 유저의 게시판 접근을 거부했습니다.')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/1')
})
router.get('/write', function(req,res,next){
var id = req.user;
if(!id) res.sendFile(path.join(__dirname, "../../public/login.html"))
if(!id){
console.log(logString+'익명 유저의 글쓰기 시도를 거부했습니다.')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(req.user.ID+'('+nickname+') 유저가 게시글 작성 중입니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 게시글 작성 중입니다.')
res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"게시판 글 쓰기"})
}
})
......@@ -63,7 +82,7 @@ router.post('/write', function(req,res,next){
if(!idx_) // 글이 없으면 NULL
idx_ = 1;
console.log(req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.')
res.redirect('/board/read/'+idx_);
});
})
......@@ -76,7 +95,10 @@ router.get('/read/:idx', function(req,res,next){
if(err) console.error(err)
var id = req.user;
if(!id) res.redirect('/board/list')
if(!id){
console.log(logString+'익명 유저의 '+idx+'번 게시물 접근을 거부했습니다.')
res.redirect('/login')
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
......@@ -87,7 +109,7 @@ router.get('/read/:idx', function(req,res,next){
if(err) console.error(err)
})
console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 보고 있습니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 보고있습니다.')
res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"글 상세", row:row[0]})
}
})
......@@ -104,12 +126,13 @@ router.post('/update', function(req,res,next){
board.query(sql,datas,function(err,result){
if(err) console.error(err)
if(result.affectedRows==0){
console.log(logString+req.user.ID+'('+nickname+') 유저의 '+idx+'번 게시글 수정을 거부했습니다.(권한없음)')
res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 수정했습니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 수정했습니다.')
res.redirect('/board/read/'+idx)
}
})
......@@ -138,10 +161,12 @@ router.post('/delete', function(req,res,next){
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/';</script>");
console.log("[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음)')
res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
}
})
......@@ -150,7 +175,7 @@ router.post('/delete', function(req,res,next){
var id = req.user.ID;
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/';</script>");
console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
}
})
})
......
......@@ -6,6 +6,16 @@ var mysql = require('mysql')
var passport = require('passport')
var LocalStrategy = require('passport-local').Strategy
// 로그용
var today = new Date();
var year = today.getFullYear();
var month = ('0' + (today.getMonth()+1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var hour = ('0' + today.getHours()).slice(-2);
var minute = ('0' + today.getMinutes()).slice(-2);
var second = ('0' + today.getSeconds()).slice(-2);
var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
// database setting
var connection = mysql.createConnection({
host: 'localhost',
......@@ -20,17 +30,18 @@ router.get('/', function(req, res){
var msg;
var errMsg = req.flash('error')
if(errMsg) msg = errMsg;
console.log(logString+'익명의 유저가 로그인 중입니다.')
res.render('login.ejs', {'message' : msg});
})
passport.serializeUser(function(user, done){
console.log('passport session save: '+ user.ID + '(' + user.nickname + ')')
console.log(logString+'passport session save: '+ user.ID + '(' + user.nickname + ')')
done(null, user)
});
passport.deserializeUser(function(user, done){
var ID = user.ID;
var nickname = user.nickname;
console.log('passport session get ID: '+ ID + '(' + nickname + ')')
// console.log('passport session get ID: '+ ID + '(' + nickname + ')')
done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할
})
......@@ -44,16 +55,16 @@ passport.use('local-login', new LocalStrategy({
if(rows.length){ // database에 입력한 ID값이 있는가?
if(password == rows[0].password){ // 비밀번호와 확인이 같은가?
console.log("알림: "+ ID +"(" + rows[0].nickname + ") 유저 로그인")
console.log(logString+"로그인 알림: "+ ID +"(" + rows[0].nickname + ")")
return done(null, {'ID' : ID, 'nickname' : rows[0].nickname});
}
else{
console.log("알림: 잘못된 비밀번호입니다.(시도된 아이디: "+ID+")")
console.log(logString+"로그인 알림: 잘못된 비밀번호입니다.(시도된 아이디: "+ID+")")
return done(null, false, {message : '잘못된 비밀번호입니다.'})
}
}
else{
console.log("알림: ID를 찾을 수 없습니다.(시도된 아이디: "+ID+")")
console.log(logString+"로그인 알림: ID를 찾을 수 없습니다.(시도된 아이디: "+ID+")")
return done(null, false, {message : 'ID를 찾을 수 없습니다.'})
}
})
......
......@@ -3,11 +3,24 @@ var app = express()
var router = express.Router();
var path = require('path')
// 로그용
var today = new Date();
var year = today.getFullYear();
var month = ('0' + (today.getMonth()+1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var hour = ('0' + today.getHours()).slice(-2);
var minute = ('0' + today.getMinutes()).slice(-2);
var second = ('0' + today.getSeconds()).slice(-2);
var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
router.get('/', function(req, res){
var id = req.user;
if(!id) res.redirect('/main')
if(!id){
console.log(logString+"익명 유저의 로그아웃 시도를 거부했습니다.")
res.redirect('/main')
}
else{
console.log(req.user.ID+"("+req.user.nickname+") 유저가 로그아웃합니다.")
console.log(logString+req.user.ID+"("+req.user.nickname+") 유저가 로그아웃합니다.")
req.logout();
req.session.save(function(){
res.redirect('/');
......
......@@ -3,13 +3,26 @@ var app = express()
var router = express.Router();
var path = require('path') // 상대경로
// 로그용
var today = new Date();
var year = today.getFullYear();
var month = ('0' + (today.getMonth()+1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var hour = ('0' + today.getHours()).slice(-2);
var minute = ('0' + today.getMinutes()).slice(-2);
var second = ('0' + today.getSeconds()).slice(-2);
var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
// main page는 login이 된 상태(세션정보가 있을때만) 접근이 가능하게 하자 -> info에 구현해놓음.
router.get('/', function(req, res){
var id = req.user;
if(!id) res.sendFile(path.join(__dirname, "../../public/main.html"))
if(!id){
console.log(logString+'익명의 유저가 작업 중입니다.')
res.sendFile(path.join(__dirname, "../../public/main.html"))
}
if(id){
var nickname = req.user.nickname;
console.log(req.user.ID+'('+nickname+') 유저가 작업 중입니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 작업 중입니다.')
res.render('main.ejs', {'ID': id, 'nickname': nickname});
}
});
......
......@@ -7,14 +7,24 @@ var myinfo = mysql_odbc.init();
var passport = require('passport')
var LocalStrategy = require('passport-local').Strategy
// 로그용
var today = new Date();
var year = today.getFullYear();
var month = ('0' + (today.getMonth()+1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var hour = ('0' + today.getHours()).slice(-2);
var minute = ('0' + today.getMinutes()).slice(-2);
var second = ('0' + today.getSeconds()).slice(-2);
var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
passport.serializeUser(function(user, done){
console.log('passport session save: '+ user.ID + '(' + user.nickname + ')')
console.log(logString+'passport session resave: '+ user.ID + '(' + user.nickname + ')')
done(null, user)
});
passport.deserializeUser(function(user, done){
var ID = user.ID;
var nickname = user.nickname;
console.log('passport session get ID: '+ ID + '(' + nickname + ')')
// console.log('passport session get ID: '+ ID + '(' + nickname + ')')
done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할
})
......@@ -22,7 +32,10 @@ passport.deserializeUser(function(user, done){
router.get('/', function(req, res){
try{
var id = req.session.passport.user.ID;
if(!id) res.redirect('/login')
if(!id){
console.log(logString+'익명 유저의 프로필 접근 시도를 거부했습니다.')
res.redirect('/login')
}
var sql = "select profilemsg, type from userdb where id =?";
......@@ -31,11 +44,12 @@ router.get('/', function(req, res){
var nickname = req.user.nickname;
var type = rows[0].type;
var profilemsg = rows[0].profilemsg;
console.log(req.user.ID+'('+nickname+') 유저가 프로필을 보고있습니다.')
console.log(logString+req.user.ID+'('+nickname+') 유저가 프로필을 보고있습니다.')
res.render('profile.ejs', {'ID':id, 'nickname': nickname, 'type': type, 'profilemsg': profilemsg})
})
}
catch{
console.log(logString+'익명 유저의 프로필 접근 시도를 거부했습니다.')
res.redirect('/login')
}
......@@ -44,7 +58,10 @@ router.get('/', function(req, res){
router.get('/update', function(req,res){
try{
var id = req.user.ID;
if(!id) res.redirect('/login')
if(!id){
console.log(logString+'익명 유저의 프로필 수정 시도를 거부했습니다.')
res.redirect('/login')
}
var sql = 'select profilemsg from userdb where id ="'+req.user.ID+'"';
......@@ -54,11 +71,15 @@ router.get('/update', function(req,res){
var nickname = req.user.nickname;
var type = req.user.type;
var profilemsg = rows[0].profilemsg;
console.log(logString+req.user.ID+'('+nickname+') 유저가 프로필 수정 중입니다.')
res.render('profmsgedit.ejs', {'ID':id, 'nickname': nickname, 'type':type, 'profilemsg': profilemsg, 'message':''});
})
}
catch{
if(!id) res.redirect('/login')
if(!id){
console.log(logString+'익명 유저의 프로필 수정 시도를 거부했습니다.')
res.redirect('/login')
}
}
})
......@@ -91,15 +112,15 @@ router.post('/update', function(req,res,next){
myinfo.query(sql,datas,function(err,result){
if(err) console.error(err)
console.log(req.user.ID+'('+req.session.passport.user.nickname+') 유저가 프로필을 수정했습니다.')
console.log(" 변경전: "+id+"("+req.user.nickname+") "+oldType+" // "+oldProfilemsg)
console.log(logString+req.user.ID+'('+req.session.passport.user.nickname+') 유저가 프로필을 수정했습니다.')
console.log(" 변경전: "+id+"("+req.user.nickname+") "+oldType+" // "+oldProfilemsg)
req.session.passport.user.nickname = nickname;
console.log(" 변경후: "+id+"("+nickname+") "+type+" // "+profilemsg)
console.log(" 변경후: "+id+"("+nickname+") "+type+" // "+profilemsg)
res.redirect('/profile');
})
}
else{ // 다른 유저의 닉네임과 중복되는 경우
console.log(id+" 유저가 중복된 닉네임으로 변경을 시도했습니다.(시도한 닉네임: "+req.body.nickname+")")
console.log(logString+id+" 유저가 중복된 닉네임으로 변경을 시도했습니다.(시도한 닉네임: "+req.body.nickname+")")
res.render('profmsgedit.ejs', {nickname: req.session.passport.user.nickname, profilemsg: oldProfilemsg, message : '중복된 닉네임입니다.'})
}
})
......
......@@ -6,6 +6,16 @@ var mysql = require('mysql')
var passport = require('passport')
var LocalStrategy = require('passport-local').Strategy
// 로그용
var today = new Date();
var year = today.getFullYear();
var month = ('0' + (today.getMonth()+1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var hour = ('0' + today.getHours()).slice(-2);
var minute = ('0' + today.getMinutes()).slice(-2);
var second = ('0' + today.getSeconds()).slice(-2);
var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
// database setting
var connection = mysql.createConnection({
host: 'localhost',
......@@ -20,17 +30,18 @@ router.get('/', function(req, res){
var msg;
var errMsg = req.flash('error')
if(errMsg) msg = errMsg;
console.log(logString+'익명의 유저가 회원가입 중입니다.')
res.render('register.ejs', {'message' : msg});
})
passport.serializeUser(function(user, done){
console.log('passport session save: '+ user.ID + '(' + user.nickname + ')')
console.log(logString+'passport session save: '+ user.ID + '(' + user.nickname + ')')
done(null, user)
});
passport.deserializeUser(function(user, done){
var ID = user.ID;
var nickname = user.nickname;
console.log('passport session get ID: '+ ID + '(' + nickname + ')')
// console.log('passport session get ID: '+ ID + '(' + nickname + ')')
done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할
})
......@@ -46,26 +57,26 @@ passport.use('local-join', new LocalStrategy({
if(err) return done(err);
if(rows.length){ // database에 입력한 ID값이 있는가?
console.log("알림: 중복된 ID입니다.("+ID+")")
console.log(logString+"회원가입 알림: 중복된 ID입니다.("+ID+")")
return done(null, false, {message : '중복된 ID입니다.'})
}
else{
if(password != req.body.pw_com){ // 비밀번호와 확인이 같지 않은가?
console.log("알림: 비밀번호가 일치하지 않습니다.(시도 중인 아이디: "+ID+")")
console.log(logString+"회원가입 알림: 비밀번호가 일치하지 않습니다.(시도 중인 아이디: "+ID+")")
return done(null, false, {message : '비밀번호가 일치하지 않습니다.'})
}
else{
var subqry = connection.query('select * from userDB where nickname=?', [req.body.nickname], function(err, rows_){
if(err) return done(err);
if(rows_.length){
console.log("알림: 중복된 닉네임입니다.("+req.body.nickname+")")
console.log(logString+"회원가입 알림: 중복된 닉네임입니다.("+req.body.nickname+")")
return done(null, false, {message : '중복된 닉네임입니다.'})
}
else{
var sql = {ID: ID, password: password, type:req.body.type, nickname:req.body.nickname};
var query = connection.query('insert into userDB set ?', sql, function(err, rows){
if(err) throw err
console.log("알림: 사용자가 추가되었습니다.(" + ID +", " + req.body.nickname + ")")
console.log(logString+"회원가입 알림: 사용자가 추가되었습니다.(" + ID +", " + req.body.nickname + ")")
return done(null, {'ID' : ID, 'nickname' : req.body.nickname});
})
}
......