Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MOVE] Fork and restart #8

Open
wants to merge 1 commit into
base: test
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,4 @@ node_modules/

# Firebase service account
functions/wesopt29-29f3e-firebase-adminsdk-hvgq6-57ad4127c1.json
functions/config/firebaseClient.js
functions/config/firebaseClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const cookieParser = require("cookie-parser");
const dotenv = require("dotenv");
const hpp = require("hpp");
const helmet = require("helmet");
const bodyParser = require("body-parser");

// 보안 상 깃허브에 올리면 안 되는 정보를 .env라는 파일로 관리하기 위해 사용하는 모듈
dotenv.config();
Expand Down Expand Up @@ -56,6 +57,6 @@ module.exports = functions
console.log("\n\n", "[api]", `[${req.method.toUpperCase()}]`, req.originalUrl, req.body);

// 맨 위에 선언된 express app 객체를 리턴
// 요것이 functiobns/index.js 안의 api: require("./api")에 들어가는 것.
// 요것이 functions/index.js 안의 api: require("./api")에 들어가는 것.
return app(req, res);
});
50 changes: 50 additions & 0 deletions continues/Seminar_Server/functions/api/routes/auth/googleAuth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
const functions = require('firebase-functions');
const util = require('../../../lib/util');
const statusCode = require('../../../constants/statusCode');
const responseMessage = require('../../../constants/responseMessage');
const {firebaseAuth} = require('../../../config/firebaseClient');

module.exports = async(req, res) => {
const script =
`
// 구글 인증 기능 추가
var provider = new firebaseAuth.auth.GoogleAuthProvider();

// 인증하기
firebaseAuth.auth().signInWithPopup(provider).then(function(result) {
// This gives you a Google Access Token. You can use it to access the Google API.
var token = result.credential.accessToken;
// The signed-in user info.
var user = result.user;

console.log(user) // 인증 후 어떤 데이터를 받아오는지 확인해보기 위함.
}).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// The email of the user's account used.
var email = error.email;
// The firebase.auth.AuthCredential type that was used.
var credential = error.credential;
// ...
`;

var html =
`
<!DOCTYPE html>
<html>
<head>
구글 로그인 테스트
</head>
<body>
파이어베이스 웹서버 입니다.
<script>
${script}
</script>

</body>
</html>
`;

res.send(html);
};
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ const router = express.Router();

router.post('/signup', require('./authSignupPOST'));
router.post('/login/email', require('./authLoginEmailPOST'));
router.get('/google', require('./googleAuth'));

module.exports = router;
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ router.use('/auth', require('./auth'));
router.use('/user', require('./user'));
router.use('/post', require('./post'));
router.use('/scrap', require('./scrap'));
//router.use('/kakaoAuth', require('./kakaoAuth'));
module.exports = router;
10 changes: 10 additions & 0 deletions continues/Seminar_Server/functions/api/routes/kakaoAuth/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const express = require('express');
const router = express.Router();

router.get('/', require('./kakao'));
router.post('/verifyToken', require('./verifyToken'));

module.exports = router;

/*,
* */
98 changes: 98 additions & 0 deletions continues/Seminar_Server/functions/api/routes/kakaoAuth/kakao.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
'use strict';

// import necessary modules
const request = require('request-promise');

// Firebase setup
const firebaseAdmin = require('firebase-admin');

// Kakao API request url to retrieve user profile based on access token
const requestMeUrl = 'https://kapi.kakao.com/v2/user/me?secure_resource=true';

module.exports = (req, res) => {

/**
* requestMe - Returns user profile from Kakao API
*
* @param {String} kakaoAccessToken Access token retrieved by Kakao Login API
* @return {Promise<Response>} User profile response in a promise
*/
function requestMe(kakaoAccessToken) {
console.log('Requesting user profile from Kakao API server.');
return request({
method: 'GET',
headers: {'Authorization': 'Bearer ' + kakaoAccessToken},
url: requestMeUrl,
});
};


/**
* updateOrCreateUser - Update Firebase user with the give email, create if
* none exists.
*
* @param {String} userId user id per app
* @param {String} email user's email address
* @param {String} displayName user
* @param {String} photoURL profile photo url
* @return {Promise<UserRecord>} Firebase user record in a promise
*/
function updateOrCreateUser(userId, email, displayName, photoURL) {
console.log('updating or creating a firebase user');
const updateParams = {
provider: 'KAKAO',
displayName: displayName,
};
if (displayName) {
updateParams['displayName'] = displayName;
} else {
updateParams['displayName'] = email;
}
if (photoURL) {
updateParams['photoURL'] = photoURL;
}
console.log(updateParams);
return firebaseAdmin.auth().updateUser(userId, updateParams)
.catch((error) => {
if (error.code === 'auth/user-not-found') {
updateParams['uid'] = userId;
if (email) {
updateParams['email'] = email;
}
return firebaseAdmin.auth().createUser(updateParams);
}
throw error;
});
};


/**
* createFirebaseToken - returns Firebase token using Firebase Admin SDK
*
* @param {String} kakaoAccessToken access token from Kakao Login API
* @return {Promise<String>} Firebase token in a promise
*/
function createFirebaseToken(kakaoAccessToken) {
return requestMe(kakaoAccessToken).then((response) => {
const body = JSON.parse(response);
console.log(body);
const userId = `kakao:${body.id}`;
if (!userId) {
return response.status(404)
.send({message: 'There was no user with the given access token.'});
}
let nickname = null;
let profileImage = null;
if (body.properties) {
nickname = body.properties.nickname;
profileImage = body.properties.profile_image;
}
return updateOrCreateUser(userId, body.kaccount_email, nickname,
profileImage);
}).then((userRecord) => {
const userId = userRecord.uid;
console.log(`creating a custom firebase token based on uid ${userId}`);
return firebaseAdmin.auth().createCustomToken(userId, {provider: 'KAKAO'});
});
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const kakao = require('./kakao');

module.exports = async(req, res) => {

const token = req.body.token;
if (!token) return res.status(400).send({error: 'There is no token.'})
.send({message: 'Access token is a required parameter.'});

console.log(`Verifying Kakao token: ${token}`);

kakao.createFirebaseToken(token).then((firebaseToken) => {
console.log(`Returning firebase token to user: ${firebaseToken}`);
res.send({firebase_token: firebaseToken});
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ module.exports = async (req, res) => {
client = await db.connect(req);

// 빌려온 connection을 사용해 우리가 db/[파일].js에서 미리 정의한 SQL 쿼리문을 날려줍니다.
const post = await postDB.getPostByID(client, postId);
const post = await postDB.getPostById(client, postId);

if (!post) return res.status(statusCode.NOT_FOUND).send(util.fail(statusCode.NOT_FOUND, responseMessage.NO_POST));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,25 @@ const responseMessage = require('../../../constants/responseMessage');
const ogs = require('open-graph-scraper');

module.exports = async(req, res) => {

const {link} = req.body;
try {
const data = await ogs({ url : link });
const response = {
ogTitle: data.result.ogTitle,
ogDescription: data.result.ogDescription,
ogImage: data.result.ogImage,
ogUrl: data.result.ogUrl,
let response;
if (!data.result.ogImage) {
response = {
ogTitle: data.result.ogTitle,
ogDescription: data.result.ogDescription,
ogImage: '',
ogUrl: data.result.ogUrl,
}
}
else {
response = {
ogTitle: data.result.ogTitle,
ogDescription: data.result.ogDescription,
ogImage: data.result.ogImage,
ogUrl: data.result.ogUrl,
}
}
console.log(data.result)
res.status(statusCode.OK).send(util.success(statusCode.OK, responseMessage.READ_ONE_POST_SUCCESS, response));
Expand Down
Loading