JaeHyeok Song

implement of sharing BOJ to kakao

This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
1 import { makeStyles } from '@material-ui/core/styles'; 1 import { makeStyles } from '@material-ui/core/styles';
2 import TextField from '@material-ui/core/TextField'; 2 import TextField from '@material-ui/core/TextField';
3 import React from 'react'; 3 import React from 'react';
4 -import path from 'path'; 4 +import getRecommend from "../../scripts/getRecommend";
5 -require("dotenv").config({
6 - path : path.join(__dirname,'/jaksimsamil-server/.env')
7 -});
8 -console.log(process.env.KAKAO_JS_KEY);
9 -
10 -const useStyles = makeStyles((theme) => ({
11 - root: {
12 - '& > *': {
13 - margin: theme.spacing(1),
14 - },
15 - },
16 - button: {
17 - margin: theme.spacing(1),
18 - },
19 -}));
20 5
21 const KakaoLoginBtn = () => { 6 const KakaoLoginBtn = () => {
22 - const classes = useStyles(); 7 + const KakaoLogin = function () {
23 - const kakaoLogin = function() {
24 window.Kakao.Auth.login({ 8 window.Kakao.Auth.login({
25 - success:function(auth) { 9 + success: getRecommend,
26 - console.log(auth); 10 + fail: function (err) {
27 - }, 11 + console.log("login failed", err);
28 - fail:function(err) {
29 - console.log(err);
30 } 12 }
31 }) 13 })
32 } 14 }
33 return ( 15 return (
34 <div> 16 <div>
35 - <button onClick={kakaoLogin}>KakaoLogin</button> 17 + <button onClick={KakaoLogin}
18 + a id="custom-login-btn" href="javascript:loginWithKakao()">
19 + <img
20 + src="//k.kakaocdn.net/14/dn/btqCn0WEmI3/nijroPfbpCa4at5EIsjyf0/o.jpg"
21 + width="140"
22 + />
23 + </button>
36 </div> 24 </div>
37 ); 25 );
38 }; 26 };
......
...@@ -9,3 +9,8 @@ export const register = ({ username, password }) => ...@@ -9,3 +9,8 @@ export const register = ({ username, password }) =>
9 export const check = () => client.get('api/auth/check'); 9 export const check = () => client.get('api/auth/check');
10 10
11 export const logout = () => client.post('/api/auth/logout'); 11 export const logout = () => client.post('/api/auth/logout');
12 +
13 +export const kakaotoken = (kakaotoken) =>
14 + client.post('api/auth/kakaotoken', {
15 + kakaotoken: kakaotoken
16 + });
......
1 +function getRecommend(auth) {
2 + console.log("login success", auth);
3 + const host = 'http://localhost:23023';
4 + const url = host+"/api/profile/recommend";
5 + const data = { username: 'test' };
6 + window.fetch(url, {
7 + method: "POST",
8 + body: JSON.stringify(data),
9 + headers: {
10 + 'Content-Type': 'application/json'
11 + }
12 + })
13 + .then(res => {
14 + console.log(res);
15 + return res.json();
16 + })
17 + .then(shareToKakao);
18 +}
19 +
20 +function shareToKakao({problem_number, problem_title, solved_date}) {
21 + console.log('getting ready to share...');
22 + const boj_link = "https://acmicpc.net/problem/" + problem_number.toString();
23 + window.Kakao.Link.sendDefault({
24 + objectType: 'text',
25 + text: `오늘의 추천문제는 ${problem_title}`,
26 + link: {
27 + mobileWebUrl: boj_link,
28 + webUrl: boj_link,
29 + }
30 + });
31 +}
32 +
33 +export {
34 + getRecommend as default
35 +};
...\ No newline at end of file ...\ No newline at end of file
1 const Router = require("koa-router"); 1 const Router = require("koa-router");
2 const auth = new Router(); 2 const auth = new Router();
3 const authCtrl = require("./auth.ctrl"); 3 const authCtrl = require("./auth.ctrl");
4 +const kakaoAuth = require("./kakaoAuth");
5 +
4 auth.post("/login", authCtrl.login); 6 auth.post("/login", authCtrl.login);
5 auth.post("/logout", authCtrl.logout); 7 auth.post("/logout", authCtrl.logout);
6 auth.post("/register", authCtrl.register); 8 auth.post("/register", authCtrl.register);
7 auth.get("/check", authCtrl.check); 9 auth.get("/check", authCtrl.check);
8 10
11 +auth.post("/kakaotoken", kakaoAuth.kakaotoken);
12 +
9 module.exports = auth; 13 module.exports = auth;
......
1 +const request = require('request');
2 +const querystring = require('querystring');
3 +
4 +
5 +exports.kakaotoken = async (ctx) => {
6 + const token = ctx.request.body;
7 +
8 + 'http://kapi.kakao.com/v2/api/talk/memo/default/send'
9 +
10 + console.log(ctx);
11 + console.log("token setted", token);
12 + let template_objectObj = {
13 + object_type: "text",
14 + text: "hi", link: {
15 + web_url: "https://developers.kakao.com",
16 + }
17 + };
18 +
19 + let template_objectStr = JSON.stringify(template_objectObj);
20 + console.log(template_objectStr);
21 + let options = {
22 + url: "http://kapi.kakao.com/v2/api/talk/memo/default/send",
23 + method: "POST",
24 + headers: {
25 + "Authorization": "Bearer ".concat(token),
26 + "Content-Type": "application/x-www-form-urlencoded"
27 + }, form: {
28 + template_object: template_objectStr
29 + }
30 + };
31 + request.post(options, (err, res, body) => {
32 + if (err != null) {
33 + console.log(err);
34 + }
35 + });
36 +};
...\ No newline at end of file ...\ No newline at end of file
...@@ -118,14 +118,16 @@ POST /api/proflie/recommend ...@@ -118,14 +118,16 @@ POST /api/proflie/recommend
118 */ 118 */
119 exports.recommend = async (ctx) => { 119 exports.recommend = async (ctx) => {
120 const { username } = ctx.request.body; 120 const { username } = ctx.request.body;
121 -
122 if (!username) { 121 if (!username) {
122 + console.log('no given username');
123 ctx.status = 401; 123 ctx.status = 401;
124 return; 124 return;
125 } 125 }
126 try { 126 try {
127 + console.log('finding username:', username);
127 const profile = await Profile.findByUsername(username); 128 const profile = await Profile.findByUsername(username);
128 if (!profile) { 129 if (!profile) {
130 + console.log('no profile');
129 ctx.status = 401; 131 ctx.status = 401;
130 return; 132 return;
131 } 133 }
...@@ -137,5 +139,7 @@ exports.recommend = async (ctx) => { ...@@ -137,5 +139,7 @@ exports.recommend = async (ctx) => {
137 //데이터가 비었을 떄 예외처리 필요 139 //데이터가 비었을 떄 예외처리 필요
138 } catch (e) { 140 } catch (e) {
139 ctx.throw(500, e); 141 ctx.throw(500, e);
142 + } finally {
143 + console.log('successfully sent user recommendation')
140 } 144 }
141 }; 145 };
......