231 lines
8.8 KiB
JavaScript
231 lines
8.8 KiB
JavaScript
exports.id = 9971;
|
|
exports.ids = [9971];
|
|
exports.modules = {
|
|
|
|
/***/ 6069:
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
// @ts-check
|
|
/**
|
|
* ==============================================================================
|
|
* Imports
|
|
* ==============================================================================
|
|
*/
|
|
const fs = __webpack_require__(7147);
|
|
const { hashPassword , } = __webpack_require__(5382);
|
|
const serverError = __webpack_require__(2163);
|
|
const httpsRequest = __webpack_require__(722);
|
|
const DB_HANDLER = __webpack_require__(2224);
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
/**
|
|
*
|
|
* @typedef {object} GithubUserPayload
|
|
* @property {string} login - Full name merged eg. "JohnDoe"
|
|
* @property {number} id - github user id
|
|
* @property {string} node_id - Some other id
|
|
* @property {string} avatar_url - profile picture
|
|
* @property {string} gravatar_id - some other id
|
|
* @property {string} url - Github user URL
|
|
* @property {string} html_url - User html URL - whatever that means
|
|
* @property {string} followers_url - Followers URL
|
|
* @property {string} following_url - Following URL
|
|
* @property {string} gists_url - Gists URL
|
|
* @property {string} starred_url - Starred URL
|
|
* @property {string} subscriptions_url - Subscriptions URL
|
|
* @property {string} organizations_url - Organizations URL
|
|
* @property {string} repos_url - Repositories URL
|
|
* @property {string} received_events_url - Received Events URL
|
|
* @property {string} type - Common value => "User"
|
|
* @property {boolean} site_admin - Is site admin or not? Boolean
|
|
* @property {string} name - More like "username"
|
|
* @property {string} company - User company
|
|
* @property {string} blog - User blog URL
|
|
* @property {string} location - User Location
|
|
* @property {string} email - User Email
|
|
* @property {string} hireable - Is user hireable
|
|
* @property {string} bio - User bio
|
|
* @property {string} twitter_username - User twitter username
|
|
* @property {number} public_repos - Number of public repositories
|
|
* @property {number} public_gists - Number of public gists
|
|
* @property {number} followers - Number of followers
|
|
* @property {number} following - Number of following
|
|
* @property {string} created_at - Date created
|
|
* @property {string} updated_at - Date updated
|
|
*/ /**
|
|
* Login/signup a github user
|
|
* ==============================================================================
|
|
* @async
|
|
*
|
|
* @param {Object} params - foundUser if any
|
|
* @param {string} params.code - github auth token
|
|
* @param {string} params.clientId - github client Id
|
|
* @param {string} params.clientSecret - github client Secret
|
|
*
|
|
* @returns {Promise<GithubUserPayload|null|undefined>}
|
|
*/ module.exports = async function githubLogin({ code , clientId , clientSecret }) {
|
|
/** @type {GithubUserPayload | undefined} */ let gitHubUser;
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
try {
|
|
/**
|
|
* Create new user folder and file
|
|
*
|
|
* @description Create new user folder and file
|
|
*/ // const response = await fetch(`https://github.com/login/oauth/access_token?client_id=${process.env.DSQL_GITHUB_ID}`);
|
|
const response = await httpsRequest({
|
|
method: "POST",
|
|
hostname: "github.com",
|
|
path: `/login/oauth/access_token?client_id=${clientId}&client_secret=${clientSecret}&code=${code}`,
|
|
headers: {
|
|
Accept: "application/json",
|
|
"User-Agent": "*"
|
|
},
|
|
scheme: "https"
|
|
});
|
|
// `https://github.com/login/oauth/access_token?client_id=${process.env.DSQL_GITHUB_ID}&client_secret=${process.env.DSQL_GITHUB_SECRET}&code=${code}`,
|
|
// body: JSON.stringify({
|
|
// client_id: process.env.DSQL_GITHUB_ID,
|
|
// client_secret: process.env.DSQL_GITHUB_SECRET,
|
|
// code: code,
|
|
// }),
|
|
const accessTokenObject = JSON.parse(response);
|
|
if (!accessTokenObject?.access_token) {
|
|
return gitHubUser;
|
|
}
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
const userDataResponse = await httpsRequest({
|
|
method: "GET",
|
|
hostname: "api.github.com",
|
|
path: "/user",
|
|
headers: {
|
|
Authorization: `Bearer ${accessTokenObject.access_token}`,
|
|
"User-Agent": "*"
|
|
},
|
|
scheme: "https"
|
|
});
|
|
gitHubUser = JSON.parse(userDataResponse);
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
if (!gitHubUser?.email && gitHubUser) {
|
|
const existingGithubUser = await DB_HANDLER(`SELECT email FROM users WHERE social_login='1' AND social_platform='github' AND social_id='${gitHubUser.id}'`);
|
|
if (existingGithubUser && existingGithubUser[0]) {
|
|
gitHubUser.email = existingGithubUser[0].email;
|
|
}
|
|
}
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
} catch (/** @type {any} */ error) {
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
console.log("ERROR in githubLogin.js backend function =>", error.message);
|
|
// serverError({
|
|
// component: "/api/social-login/github-auth/catch-error",
|
|
// message: error.message,
|
|
// user: user,
|
|
// });
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
}
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
return gitHubUser;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5382:
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
// @ts-check
|
|
const { createHmac } = __webpack_require__(6113);
|
|
//
|
|
/**
|
|
* # Password Hash function
|
|
* @param {string} password
|
|
* @returns
|
|
*/ function hashPassword(password) {
|
|
const hmac = createHmac("sha512", process.env.DSQL_ENCRYPTION_PASSWORD || "");
|
|
hmac.update(password);
|
|
let hashed = hmac.digest("base64");
|
|
return hashed;
|
|
}
|
|
exports.hashPassword = hashPassword; // export const comparePasswords = async (password) => {
|
|
// const hmac = createHmac("sha512", process.env.DSQL_ENCRYPTION_PASSWORD);
|
|
// hmac.update(password);
|
|
// let hashed = hmac.digest("base64");
|
|
// let dbPass = await global.DB_HANDLER(`SELECT * FROM users WHERE password = '${hashed}'`);
|
|
// console.log(dbPass);
|
|
// return dbPass;
|
|
// };
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2127:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
// @ts-check
|
|
/**
|
|
* Convert Camel Joined Text to Camel Spaced Text
|
|
* ==============================================================================
|
|
* @description this function takes a camel cased text without spaces, and returns
|
|
* a camel-case-spaced text
|
|
*
|
|
* @param {string} text - text string without spaces
|
|
*
|
|
* @returns {string | null}
|
|
*/
|
|
module.exports = function camelJoinedtoCamelSpace(text) {
|
|
if (!text?.match(/./)) {
|
|
return "";
|
|
}
|
|
if (text?.match(/ /)) {
|
|
return text;
|
|
}
|
|
if (text) {
|
|
let textArray = text.split("");
|
|
let capIndexes = [];
|
|
for(let i = 0; i < textArray.length; i++){
|
|
const char = textArray[i];
|
|
if (i === 0) continue;
|
|
if (char.match(/[A-Z]/)) {
|
|
capIndexes.push(i);
|
|
}
|
|
}
|
|
let textChunks = [
|
|
`${textArray[0].toUpperCase()}${text.substring(1, capIndexes[0])}`,
|
|
];
|
|
for(let j = 0; j < capIndexes.length; j++){
|
|
const capIndex = capIndexes[j];
|
|
if (capIndex === 0) continue;
|
|
const startIndex = capIndex + 1;
|
|
const endIndex = capIndexes[j + 1];
|
|
textChunks.push(`${textArray[capIndex].toUpperCase()}${text.substring(startIndex, endIndex)}`);
|
|
}
|
|
return textChunks.join(" ");
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
|
|
/***/ })
|
|
|
|
};
|
|
; |