Mukho

Trimming

This diff could not be displayed because it is too large.
......@@ -61,17 +61,16 @@ create table board(
>UPDATE board SET idx = @COUNT:=@COUNT+1;
---
### 최종 수정: 2021-11-24 04:54<br>
### 최종 수정: 2021-11-25 14:00<br>
### 수정 내용:
0. 채팅기능에 버그가 있는 것 같음-피드백 바람(undefined님이 나가셨습니다. -> 콘솔에 계속 출력됨) // socket.io의 express-session 호환 문제로 후순위 개발로 미룸
1. 로그에 IP 추가
2. 로그에 시간 추가
3. 시간 실시간 반영
4. 게시글 수정 및 삭제 세션+권한 연동/DB수정
5. 버그 수정
6. 게시글 조회수 구현
7. 프로필 수정 세션 연동
8. 프로필 사진 추가
9. 프로필 검색 추가
10. 프로필 비주얼 업데이트
11. etc
\ No newline at end of file
0. 채팅기능에 버그가 있는 것 같음(undefined님이 나가셨습니다. -> 콘솔에 계속 출력됨) // socket.io의 express-session 호환 문제로 후순위 개발로 미룸
1. 로그에 시간/IP 추가
2. 시간 실시간 반영
3. 게시글 수정 및 삭제 세션+권한 연동/DB수정
4. 버그 수정
5. 게시글 조회수 구현
6. 프로필 수정 세션 연동
7. 프로필 사진 추가
8. 프로필 검색 추가
9. 프로필 비주얼 업데이트
10. 코드 다듬음
\ No newline at end of file
......
......@@ -73,53 +73,64 @@ router.get('/', function(req, res){
}else{
var profilepic = "../assets/img/noneprofilepic.png";
}
console.log(profilepic)
console.log(logString+req.user.ID+'('+nickname+') 유저가 프로필을 보고있습니다.('+ip+')')
res.render('profile.ejs', {'ID':id, 'nickname':nickname, 'profnickname': nickname, 'type': type, 'profilemsg': profilemsg, 'profilepic':profilepic})
})
}
catch{
console.log(logString+'익명 유저의 프로필 접근 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
if(!id){
console.log(logString+'익명 유저의 프로필 접근 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
}
});
router.post('/', function(req,res){
var searNick;
searNick = req.body.search;
var ip = requestIp.getClientIp(req);
try{
var id = req.user.ID;
var searNick;
searNick = req.body.search;
var sql = 'select * from userdb where nickname="'+req.body.search+'"';
var sql = 'select * from userdb where nickname="'+req.body.search+'"';
myinfo.query(sql, function(err,rows) {
if (err) console.error("err : " + err);
if (rows.length != 0){
var id = req.user.ID;
var nickname = req.user.nickname;
var type = rows[0].type;
var profilemsg = rows[0].profilemsg;
var profnickname = rows[0].nickname;
if(rows[0].profilepic){
var profilepic = "../assets/img/"+rows[0].profilepic;
}else{
var profilepic = "../assets/img/noneprofilepic.png";
myinfo.query(sql, function(err,rows) {
if (err) console.error("err : " + err);
if (rows.length != 0){
var id = req.user.ID;
var nickname = req.user.nickname;
var type = rows[0].type;
var profilemsg = rows[0].profilemsg;
var profnickname = rows[0].nickname;
if(rows[0].profilepic){
var profilepic = "../assets/img/"+rows[0].profilepic;
}else{
var profilepic = "../assets/img/noneprofilepic.png";
}
console.log(type)
console.log(logString+req.user.ID+'('+nickname+') 유저가 프로필 열람 중입니다.('+ip+')')
res.render('other_profile.ejs', {'ID':id, 'nickname': nickname, 'type':type, 'profilemsg': profilemsg, 'message':'', 'profnickname': profnickname, 'profilepic':profilepic});
}
console.log(type)
console.log(logString+req.user.ID+'('+nickname+') 유저가 프로필 열람 중입니다.('+ip+')')
res.render('other_profile.ejs', {'ID':id, 'nickname': nickname, 'type':type, 'profilemsg': profilemsg, 'message':'', 'profnickname': profnickname, 'profilepic':profilepic});
}
else {
var id = req.user.ID;
var nickname = req.user.nickname;
var profnickname = req.body.profnickname;
var type = req.body.type;
var profilemsg = req.body.profilemsg
var profilepic = req.body.profilepic
else {
var id = req.user.ID;
var nickname = req.user.nickname;
var profnickname = req.body.profnickname;
var type = req.body.type;
var profilemsg = req.body.profilemsg
var profilepic = req.body.profilepic
res.render('other_profile.ejs', {'ID':id, 'nickname': nickname, 'profnickname': profnickname, 'type': type, 'profilemsg': profilemsg, 'message':'해당 유저를 찾을 수 없습니다', 'profilepic':profilepic})
console.log(logString+req.user.ID+'('+nickname+') 유저가 프로필 검색에 실패했습니다.(시도 닉네임: req.body.search // '+ip+')')
res.render('other_profile.ejs', {'ID':id, 'nickname': nickname, 'profnickname': profnickname, 'type': type, 'profilemsg': profilemsg, 'message':'해당 유저를 찾을 수 없습니다', 'profilepic':profilepic})
}
})
}
catch{
if(!id){
console.log(logString+'익명 유저의 프로필 검색 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
})
}
})
router.get('/update', function(req,res){
......@@ -153,71 +164,102 @@ router.get('/update', function(req,res){
router.post('/update', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user.ID;
var profilemsg = req.body.profilemsg;
var nickname = req.body.nickname;
var type = req.body.type;
var datas = [profilemsg, nickname, type, id]
// 기존 type과 profile만 추출하기 위한 쿼리
var oldType;
var oldProfilemsg;
var subsql = 'select * from userdb where ID="'+id+'"';
myinfo.query(subsql, function(err, result){
if(err) console.error(err)
oldType = result[0].type;
oldProfilemsg = result[0].profilemsg;
})
// 닉네임 중복 거르기
var sql_ = 'select * from userdb where nickname="'+nickname+'"';
myinfo.query(sql_, function(err, result){
if(err) console.error(err)
// 변경하려는 닉네임이 중복이 아닌 경우 or 닉네임 변경이 없는 수정
if(!result.length || (result.length && req.user.ID == result[0].ID)){
// 운영자인 경우 타입을 변경시키지 않고 고정
if(oldType == '운영자'){
type = '운영자'
datas[2] = '운영자';
try{
var id = req.user.ID;
var profilemsg = req.body.profilemsg;
var nickname = req.body.nickname;
var type = req.body.type;
var datas = [profilemsg, nickname, type, id]
// 기존 type과 profile만 추출하기 위한 쿼리
var oldType;
var oldProfilemsg;
var subsql = 'select * from userdb where ID="'+id+'"';
myinfo.query(subsql, function(err, result){
if(err) console.error(err)
oldType = result[0].type;
oldProfilemsg = result[0].profilemsg;
})
// 닉네임 중복 거르기
var sql_ = 'select * from userdb where nickname="'+nickname+'"';
myinfo.query(sql_, function(err, result){
if(err) console.error(err)
// 변경하려는 닉네임이 중복이 아닌 경우 or 닉네임 변경이 없는 수정
if(!result.length || (result.length && req.user.ID == result[0].ID)){
// 운영자인 경우 타입을 변경시키지 않고 고정
if(oldType == '운영자'){
type = '운영자'
datas[2] = '운영자';
}
var sql = "update userdb set profilemsg =?, nickname=?, type=? where id =?"
myinfo.query(sql,datas,function(err,result){
if(err) console.error(err)
console.log(logString+req.user.ID+'('+req.session.passport.user.nickname+') 유저가 프로필을 수정했습니다.('+ip+')')
console.log(" ▷ 변경전: "+id+"("+req.user.nickname+") "+oldType+" // "+oldProfilemsg)
req.session.passport.user.nickname = nickname;
console.log(" ▶ 변경후: "+id+"("+nickname+") "+type+" // "+profilemsg)
res.redirect('/profile');
})
}
var sql = "update userdb set profilemsg =?, nickname=?, type=? where id =?"
myinfo.query(sql,datas,function(err,result){
if(err) console.error(err)
console.log(logString+req.user.ID+'('+req.session.passport.user.nickname+') 유저가 프로필을 수정했습니다.('+ip+')')
console.log(" ▷ 변경전: "+id+"("+req.user.nickname+") "+oldType+" // "+oldProfilemsg)
req.session.passport.user.nickname = nickname;
console.log(" ▶ 변경후: "+id+"("+nickname+") "+type+" // "+profilemsg)
res.redirect('/profile');
})
}
else{ // 다른 유저의 닉네임과 중복되는 경우
console.log(logString+id+" 유저가 중복된 닉네임으로 변경을 시도했습니다.(시도한 닉네임: "+req.body.nickname+" // ("+ip+')')
res.render('profmsgedit.ejs', {nickname: req.session.passport.user.nickname, profilemsg: oldProfilemsg, message : '중복된 닉네임입니다.'})
else{ // 다른 유저의 닉네임과 중복되는 경우
console.log(logString+id+" 유저가 중복된 닉네임으로 변경을 시도했습니다.(시도한 닉네임: "+req.body.nickname+" // ("+ip+')')
res.render('profmsgedit.ejs', {nickname: req.session.passport.user.nickname, profilemsg: oldProfilemsg, message : '중복된 닉네임입니다.'})
}
})
}
catch{
if(!id){
console.log(logString+'익명 유저의 프로필 수정 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
})
}
})
router.get('/upload', function(req,res){
res.render('uploadprof.ejs')
var ip = requestIp.getClientIp(req);
try{
var id = req.user.ID;
if(id) res.render('uploadprof.ejs')
}
catch{
if(!id){
console.log(logString+'익명 유저의 프로필 사진 업로드 접근 시도를 거부했습니다.('+ip+')')
res.send("<script>alert('로그인이 필요합니다.');opener.location.href='/login';window.close();</script>");
}
}
})
router.post('/upload', upload.single('userfile'), function(req,res){
var id = req.user.ID;
var ip = requestIp.getClientIp(req);
var profilepic = req.file.filename;
console.log(profilepic)
var datas = [profilepic, id]
try{
var id = req.user.ID;
var ip = requestIp.getClientIp(req);
var profilepic = req.file.filename;
var datas = [profilepic, id]
var sql = "update userdb set profilepic =? where id =?"
var picName = profilepic.substr(15)
var sql = "update userdb set profilepic =? where id =?"
myinfo.query(sql,datas,function(err,result){
if(err) console.error(err)
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저가 프로필 사진을 업로드했습니다.('+ip+')')
res.send('업로드 성공!: '+req.file);
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저가 프로필 사진을 업로드했습니다.(파일명: '+picName+' // '+ip+')')
res.send("<script>alert('업로드가 완료되었습니다.');window.close();</script>");
})
}
catch{
if(!id){
console.log(logString+'익명 유저의 프로필 사진 업로드 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else{
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저가 파일 업로드 없이 업로드를 시도했습니다.('+ip+')')
res.send("<script>alert('파일을 업로드 해주세요.');history.back();</script>");
}
}
})
......@@ -230,7 +272,6 @@ function popup(){
function enterkey() {
if (window.event.keyCode == 13) {
// 엔터키가 눌렸을 때 실행할 내용
send();
}
......
......@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>파일 업로드</title>
<title>묵호 - 프로필 사진 업로드</title>
</head>
<body>
<form action = 'upload' method = 'post' enctype="multipart/form-data">
......