Toggle navigation
Toggle navigation
This project
Loading...
Sign in
2020-2_open_source_sw_development_Han
/
Jaksimsamil
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
redbean096@khu.ac.kr
2020-12-09 08:05:38 +0000
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
0a3b0715e3a8ae7b15ed401518919a6455400cfb
0a3b0715
1 parent
d0a68894
Implement Line channel and hide Secret key with domain
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
98 additions
and
191 deletions
jaksimsamil-server/index.js
jaksimsamil-server/src/api/line/app.js
jaksimsamil-server/src/api/line/line.ctrl.js
jaksimsamil-server/index.js
View file @
0a3b071
const
Koa
=
require
(
"koa"
);
const
Router
=
require
(
"koa-router"
);
const
bodyParser
=
require
(
"koa-bodyparser"
);
const
mongoose
=
require
(
"mongoose"
);
const
fs
=
require
(
"fs"
);
const
path
=
require
(
'path'
);
const
HTTPS
=
require
(
'https'
);
const
morgan
=
require
(
"koa-morgan"
);
const
jwtMiddleware
=
require
(
"./src/lib/jwtMiddleware"
);
const
api
=
require
(
"./src/api"
);
const
cors
=
require
(
'@koa/cors'
);
// for fix CORS Error
require
(
"dotenv"
).
config
();
const
app
=
new
Koa
();
...
...
@@ -19,7 +26,8 @@ app.use(cors());
app
.
use
(
bodyParser
());
app
.
use
(
jwtMiddleware
);
app
.
use
(
morgan
(
"combined"
,
{
stream
:
accessLogStream
}));
const
{
SERVER_PORT
,
MONGO_URL
}
=
process
.
env
;
const
{
SERVER_PORT
,
MONGO_URL
,
SSLPORT
,
DOMAIN
}
=
process
.
env
;
router
.
use
(
"/api"
,
api
.
routes
());
app
.
use
(
router
.
routes
()).
use
(
router
.
allowedMethods
());
...
...
@@ -40,3 +48,18 @@ mongoose
app
.
listen
(
SERVER_PORT
,
()
=>
{
console
.
log
(
"Server is running on port"
,
process
.
env
.
SERVER_PORT
);
});
try
{
const
option
=
{
ca
:
fs
.
readFileSync
(
'/etc/letsencrypt/live/'
+
DOMAIN
+
'/fullchain.pem'
),
key
:
fs
.
readFileSync
(
path
.
resolve
(
process
.
cwd
(),
'/etc/letsencrypt/live/'
+
DOMAIN
+
'/privkey.pem'
),
'utf8'
).
toString
(),
cert
:
fs
.
readFileSync
(
path
.
resolve
(
process
.
cwd
(),
'/etc/letsencrypt/live/'
+
DOMAIN
+
'/cert.pem'
),
'utf8'
).
toString
(),
};
HTTPS
.
createServer
(
option
,
app
.
callback
()).
listen
(
SSLPORT
,
()
=>
{
console
.
log
(
`[HTTPS] Server is started on port
${
SSLPORT
}
`
);
});
}
catch
(
error
)
{
console
.
log
(
'[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'
);
console
.
log
(
error
);
}
...
...
jaksimsamil-server/src/api/line/app.js
deleted
100644 → 0
View file @
d0a6889
// const lineCtrl = require("./line.ctrl");
// var Koa = require('koa');
// const request = require('request');
// const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
// const TOKEN = 'iaoVQEV5adLHh7MbW8bZvHKoULoKZUD6B0bXD2l0srO+yXyXKRe4HBLvWQwrkKQx2fwdsz1O/qVpVh9eucUf9GxRb8w2dSaaWCXd9FTqDLP5Yu9xovneGprYlU/0VKSAVw1iphi9BfJWfjIjwWY2pAdB04t89/1O/w1cDnyilFU=';
// const fs = require('fs');
// const path = require('path');
// const HTTPS = require('https');
// const domain = "www.ossjaksimsamil.ml"
// const sslport = 23023;
// const bodyParser = require('body-parser');
// var app = new Koa();
// app.use(bodyParser.json());
// let username; //username 저장
// app.post('/hook', function (req, res) {
// var eventObj = req.body.events[0];
// //var source = eventObj.source;
// //var message = eventObj.message;
// // request log
// console.log('======================', new Date() ,'======================');
// console.log('[request]', req.body);
// console.log('[request source] ', eventObj.source);
// console.log('[request message]', eventObj.message);
// if((eventObj.message.text == '문제추천')&&(username != undefined)){
// console.log("문제를 추천합니다.");
// recommendData = lineCtrl.lineRecommend(username);
// recommendBJ(eventObj.replyToken, recommendData);
// } else {
// let isExist = lineCtrl.findID(eventObj.message.text);
// if (isExist == true)
// username = eventObj.message.text;
// else{
// request.post(
// {
// url: TARGET_URL,
// headers: {
// 'Authorization': `Bearer ${TOKEN}`
// },
// json: {
// "replyToken":replyToken,
// "messages":[
// {
// "type":"text",
// "text": "작심삼일 혹은 백준 사이트의 ID값이 올바르지 않습니다. 다시 입력해주세요."
// }
// ]
// }
// },(body) => {
// console.log(body)
// });
// }
// recommendBJ(eventObj.replyToken, eventObj.message.text);
// }
// res.sendStatus(200);
// },
// function recommendBJ(replyToken, message) {
// var recommendProblem = "오늘의 추천문제는 " + message.problem_title + "입니다.";
// var problemURL = "https://www.boj.kr/" + recommendData.problem_number;
// request.post(
// {
// url: TARGET_URL,
// headers: {
// 'Authorization': `Bearer ${TOKEN}`
// },
// json: {
// "replyToken":replyToken,
// "messages":[
// {
// "type":"text",
// "text": recommendProblem
// },
// {
// "type":"text",
// "text": problemURL
// }
// ]
// }
// },(body) => {
// console.log(body)
// });
// res.sendStatus(200);
// });
// try {
// const option = {
// ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'),
// key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(),
// cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(),
// };
// HTTPS.createServer(option, app).listen(sslport, () => {
// console.log(`[HTTPS] Server is started on port ${sslport}`);
// });
// } catch (error) {
// console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
// console.log(error);
// }
\ No newline at end of file
jaksimsamil-server/src/api/line/line.ctrl.js
View file @
0a3b071
const
request
=
require
(
'request'
);
const
TARGET_URL
=
'https://api.line.me/v2/bot/message/reply'
const
TOKEN
=
'iaoVQEV5adLHh7MbW8bZvHKoULoKZUD6B0bXD2l0srO+yXyXKRe4HBLvWQwrkKQx2fwdsz1O/qVpVh9eucUf9GxRb8w2dSaaWCXd9FTqDLP5Yu9xovneGprYlU/0VKSAVw1iphi9BfJWfjIjwWY2pAdB04t89/1O/w1cDnyilFU='
;
const
fs
=
require
(
'fs'
);
const
path
=
require
(
'path'
);
const
HTTPS
=
require
(
'https'
);
const
domain
=
"www.ossjaksimsamil.ml"
const
sslport
=
23023
;
require
(
"dotenv"
).
config
();
const
TOKEN
=
process
.
env
.
LINE_CHANNEL_KEY
;
const
Profile
=
require
(
"../../models/profile"
);
const
problem_set
=
require
(
"../../data/problem_set"
);
const
compareBJ
=
require
(
"../../util/compareBJ"
);
const
user
=
require
(
'../user'
);
let
username
=
""
;
exports
.
linestart
=
function
(
req
,
res
)
{
var
eventObj
=
req
.
body
.
events
[
0
];
//var source = eventObj.source;
//var message = eventObj.message;
exports
.
linestart
=
async
(
ctx
)
=>
{
var
eventObj
=
ctx
.
request
.
body
.
events
[
0
];
// request log
console
.
log
(
'======================'
,
new
Date
()
,
'======================'
);
console
.
log
(
'[request]'
,
req
.
body
);
console
.
log
(
'[request]'
,
ctx
.
request
.
body
);
console
.
log
(
'[request source] '
,
eventObj
.
source
);
console
.
log
(
'[request message]'
,
eventObj
.
message
);
console
.
log
(
'[username]'
,
username
);
if
(
username
==
""
)
{
username
=
eventObj
.
message
.
text
;
}
if
(
!
isExist
(
username
))
{
username
=
""
;
const
result
=
await
isExist
(
username
);
if
(
!
result
)
{
username
=
""
;
request
.
post
(
{
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"replyToken"
:
eventObj
.
replyToken
,
"messages"
:[
{
"type"
:
"text"
,
"text"
:
"작심삼일 혹은 백준 사이트의 ID값이 올바르지 않습니다. 다시 입력해주세요."
}
]
}
},(
body
)
=>
{
console
.
log
(
body
)
});
}
else
{
request
.
post
({
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"replyToken"
:
eventObj
.
replyToken
,
"messages"
:[
{
"type"
:
"text"
,
"text"
:
eventObj
.
message
.
text
+
" : 정상 등록 되었습니다."
}
]
}
},(
body
)
=>
{
console
.
log
(
body
)
});
}
};
if
(
eventObj
.
message
.
text
==
"reset ID"
)
{
username
=
""
;
request
.
post
(
{
url
:
TARGET_URL
,
...
...
@@ -39,11 +77,11 @@ exports.linestart = function(req,res) {
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"replyToken"
:
replyToken
,
"replyToken"
:
eventObj
.
replyToken
,
"messages"
:[
{
"type"
:
"text"
,
"text"
:
"작심삼일 혹은 백준 사이트의 ID
값이 올바르지 않습니다. 다시 입력해주세요
."
"text"
:
"작심삼일 혹은 백준 사이트의 ID
가 초기화 되었습니다
."
}
]
}
...
...
@@ -51,49 +89,20 @@ exports.linestart = function(req,res) {
console
.
log
(
body
)
});
}
if
(
eventObj
.
message
.
text
==
"문제"
)
{
console
.
log
(
"문제를 추천합니다."
);
recommendData
=
lineRecommend
(
username
);
let
recommendData
=
await
lineRecommend
(
username
);
recommendBJ
(
eventObj
.
replyToken
,
recommendData
);
console
.
log
(
recommendData
);
}
// if((eventObj.message.text == '문제추천')&&(username != undefined)){
// console.log("문제를 추천합니다.");
// recommendData = lineRecommend(username);
// recommendBJ(eventObj.replyToken, recommendData);
// } else {
// let isExist = lineCtrl.findID(eventObj.message.text);
// if (isExist == true)
// username = eventObj.message.text;
// else{
// request.post(
// {
// url: TARGET_URL,
// headers: {
// 'Authorization': `Bearer ${TOKEN}`
// },
// json: {
// "replyToken":replyToken,
// "messages":[
// {
// "type":"text",
// "text": "작심삼일 혹은 백준 사이트의 ID값이 올바르지 않습니다. 다시 입력해주세요."
// }
// ]
// }
// },(body) => {
// console.log(body)
// });
// }
// recommendBJ(eventObj.replyToken, eventObj.message.text);
// }
res
.
sendStatus
(
200
);
}
function
recommendBJ
(
replyToken
,
message
)
{
var
recommendProblem
=
"오늘의 추천문제는 "
+
message
.
problem_title
+
"입니다."
;
function
recommendBJ
(
replyToken
,
recommendData
)
{
var
recommendProblem
=
"오늘의 추천문제는 "
+
recommendData
.
problem_title
+
"입니다."
;
var
problemURL
=
"https://www.boj.kr/"
+
recommendData
.
problem_number
;
request
.
post
(
{
...
...
@@ -117,45 +126,22 @@ function recommendBJ(replyToken, message) {
},(
body
)
=>
{
console
.
log
(
body
)
});
res
.
sendStatus
(
200
);
}
try
{
const
option
=
{
ca
:
fs
.
readFileSync
(
'/etc/letsencrypt/live/'
+
domain
+
'/fullchain.pem'
),
key
:
fs
.
readFileSync
(
path
.
resolve
(
process
.
cwd
(),
'/etc/letsencrypt/live/'
+
domain
+
'/privkey.pem'
),
'utf8'
).
toString
(),
cert
:
fs
.
readFileSync
(
path
.
resolve
(
process
.
cwd
(),
'/etc/letsencrypt/live/'
+
domain
+
'/cert.pem'
),
'utf8'
).
toString
(),
};
HTTPS
.
createServer
(
option
,
app
).
listen
(
sslport
,
()
=>
{
console
.
log
(
`[HTTPS] Server is started on port
${
sslport
}
`
);
});
}
catch
(
error
)
{
console
.
log
(
'[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'
);
console
.
log
(
error
);
}
/*
POST api/notify/slack/recommend
{
username: "username"
}
*/
function
lineRecommend
(
username
)
{
async
function
lineRecommend
(
username
)
{
const
profile
=
await
Profile
.
findByUsername
(
username
);
if
(
!
profile
)
{
console
.
log
(
"401"
);
return
;
}
let
unsolved_data
=
compareBJ
.
compareBJ
(
const
unsolved_data
=
await
compareBJ
.
compareBJ
(
profile
.
getBJdata
(),
problem_set
.
problem_set
);
let
recommendData
=
compareBJ
.
randomItem
(
unsolved_data
);
const
recommendData
=
await
compareBJ
.
randomItem
(
unsolved_data
);
if
(
!
recommendData
)
{
console
.
log
(
"402"
);
...
...
@@ -166,9 +152,12 @@ function lineRecommend(username) {
};
function
isExist
(
username
)
{
async
function
isExist
(
username
)
{
const
profile
=
await
Profile
.
findByUsername
(
username
);
if
(
!
profile
)
{
return
false
;
}
else
return
true
;
}
\ No newline at end of file
}
return
true
;
}
...
...
Please
register
or
login
to post a comment