updates
This commit is contained in:
@@ -1,36 +1,36 @@
|
||||
// @ts-check
|
||||
|
||||
/**
|
||||
* Login with Github Function
|
||||
* ===============================================================================
|
||||
* @description This function uses github api to login a user with datasquirel
|
||||
*
|
||||
* @async
|
||||
*
|
||||
* @param {object} params - Single object passed
|
||||
* @param {string} params.clientId - Github app client ID: {@link https://datasquirel.com/docs}
|
||||
* @param {string} params.redirectUrl - Github Redirect URL as listed in your oauth app settings: {@link https://datasquirel.com/docs}
|
||||
* @param {function(boolean): void} [params.setLoading] - React setState Function: sets whether the google login button is ready or not
|
||||
* @param {string[]} [params.scopes] - Scopes to be requested from the user
|
||||
*
|
||||
* @returns {void} - Return
|
||||
*/
|
||||
module.exports = function getAccessToken({ clientId, redirectUrl, setLoading, scopes }) {
|
||||
/**
|
||||
* == Initialize
|
||||
*
|
||||
* @description Initialize
|
||||
*/
|
||||
if (setLoading) setLoading(true);
|
||||
|
||||
const scopeString = scopes ? scopes.join("%20") : "read:user";
|
||||
const fetchUrl = `https://github.com/login/oauth/authorize?client_id=${clientId}&scope=${scopeString}&redirect_uri=${redirectUrl}`;
|
||||
window.location.assign(fetchUrl);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
};
|
||||
// @ts-check
|
||||
|
||||
/**
|
||||
* Login with Github Function
|
||||
* ===============================================================================
|
||||
* @description This function uses github api to login a user with datasquirel
|
||||
*
|
||||
* @async
|
||||
*
|
||||
* @param {object} params - Single object passed
|
||||
* @param {string} params.clientId - Github app client ID: {@link https://datasquirel.com/docs}
|
||||
* @param {string} params.redirectUrl - Github Redirect URL as listed in your oauth app settings: {@link https://datasquirel.com/docs}
|
||||
* @param {function(boolean): void} [params.setLoading] - React setState Function: sets whether the google login button is ready or not
|
||||
* @param {string[]} [params.scopes] - Scopes to be requested from the user
|
||||
*
|
||||
* @returns {void} - Return
|
||||
*/
|
||||
module.exports = function getAccessToken({ clientId, redirectUrl, setLoading, scopes }) {
|
||||
/**
|
||||
* == Initialize
|
||||
*
|
||||
* @description Initialize
|
||||
*/
|
||||
if (setLoading) setLoading(true);
|
||||
|
||||
const scopeString = scopes ? scopes.join("%20") : "read:user";
|
||||
const fetchUrl = `https://github.com/login/oauth/authorize?client_id=${clientId}&scope=${scopeString}&redirect_uri=${redirectUrl}`;
|
||||
window.location.assign(fetchUrl);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
};
|
||||
|
||||
@@ -1,113 +1,113 @@
|
||||
/**
|
||||
* Type Definitions
|
||||
* ===============================================================================
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {object} GoogleIdentityPromptNotification
|
||||
* @property {function(): string} getMomentType - Notification moment type
|
||||
* @property {function(): string} getDismissedReason - Notification get Dismissed Reason
|
||||
* @property {function(): string} getNotDisplayedReason - Notification get Not Displayed Reason
|
||||
* @property {function(): string} getSkippedReason - Notification get Skipped Reason
|
||||
* @property {function(): boolean} isDismissedMoment - Notification is Dismissed Moment
|
||||
* @property {function(): boolean} isDisplayMoment - Notification is Display Moment
|
||||
* @property {function(): boolean} isDisplayed - Notification is Displayed
|
||||
* @property {function(): boolean} isNotDisplayed - Notification is Not Displayed
|
||||
* @property {function(): boolean} isSkippedMoment - Notification is Skipped Moment
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Login with Google Function
|
||||
* ===============================================================================
|
||||
* @description This function uses google identity api to login a user with datasquirel
|
||||
*
|
||||
* @async
|
||||
*
|
||||
* @param {object} params - Single object passed
|
||||
* @param {string} params.clientId - Google app client ID: {@link https://datasquirel.com/docs}
|
||||
* @param {HTMLElement} params.element - HTML Element to display google login button
|
||||
* @param {boolean} params.triggerPrompt - Whether to trigger Google signing popup or not: {@link https://datasquirel.com/docs}
|
||||
* @param {function(): void} [params.readyStateDispatch] - React setState Function: sets whether the google login button is ready or not
|
||||
*
|
||||
* @returns {Promise<boolean>} - Return
|
||||
*/
|
||||
module.exports = async function getAccessToken({ clientId, element, triggerPrompt, readyStateDispatch }) {
|
||||
/**
|
||||
* == Initialize
|
||||
*
|
||||
* @description Initialize
|
||||
*/
|
||||
const googleScript = document.createElement("script");
|
||||
googleScript.src = "https://accounts.google.com/gsi/client";
|
||||
googleScript.className = "social-script-tag";
|
||||
|
||||
document.body.appendChild(googleScript);
|
||||
|
||||
const response = await new Promise((resolve, reject) => {
|
||||
googleScript.onload = function (e) {
|
||||
if (google) {
|
||||
if (readyStateDispatch) readyStateDispatch(true);
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
if (element) {
|
||||
/**
|
||||
* Handle google credentials response
|
||||
* ========================================================
|
||||
* @param {object} response - Google response with credentials
|
||||
* @param {string} response.credential - Google access token
|
||||
*/
|
||||
function handleCredentialResponse(response) {
|
||||
resolve(response.credential);
|
||||
}
|
||||
|
||||
google.accounts.id.initialize({
|
||||
client_id: clientId,
|
||||
callback: handleCredentialResponse,
|
||||
});
|
||||
|
||||
google.accounts.id.renderButton(element, {
|
||||
theme: "outline",
|
||||
size: "large",
|
||||
logo_alignment: "center",
|
||||
});
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
if (triggerPrompt) {
|
||||
google.accounts.id.prompt(
|
||||
/**
|
||||
* Google prompt notification callback
|
||||
* ========================================================
|
||||
* @param {GoogleIdentityPromptNotification} notification - Notification object
|
||||
*/
|
||||
(notification) => {
|
||||
notification.isDisplayed();
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return response;
|
||||
};
|
||||
/**
|
||||
* Type Definitions
|
||||
* ===============================================================================
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {object} GoogleIdentityPromptNotification
|
||||
* @property {function(): string} getMomentType - Notification moment type
|
||||
* @property {function(): string} getDismissedReason - Notification get Dismissed Reason
|
||||
* @property {function(): string} getNotDisplayedReason - Notification get Not Displayed Reason
|
||||
* @property {function(): string} getSkippedReason - Notification get Skipped Reason
|
||||
* @property {function(): boolean} isDismissedMoment - Notification is Dismissed Moment
|
||||
* @property {function(): boolean} isDisplayMoment - Notification is Display Moment
|
||||
* @property {function(): boolean} isDisplayed - Notification is Displayed
|
||||
* @property {function(): boolean} isNotDisplayed - Notification is Not Displayed
|
||||
* @property {function(): boolean} isSkippedMoment - Notification is Skipped Moment
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Login with Google Function
|
||||
* ===============================================================================
|
||||
* @description This function uses google identity api to login a user with datasquirel
|
||||
*
|
||||
* @async
|
||||
*
|
||||
* @param {object} params - Single object passed
|
||||
* @param {string} params.clientId - Google app client ID: {@link https://datasquirel.com/docs}
|
||||
* @param {HTMLElement} params.element - HTML Element to display google login button
|
||||
* @param {boolean} params.triggerPrompt - Whether to trigger Google signing popup or not: {@link https://datasquirel.com/docs}
|
||||
* @param {function(): void} [params.readyStateDispatch] - React setState Function: sets whether the google login button is ready or not
|
||||
*
|
||||
* @returns {Promise<boolean>} - Return
|
||||
*/
|
||||
module.exports = async function getAccessToken({ clientId, element, triggerPrompt, readyStateDispatch }) {
|
||||
/**
|
||||
* == Initialize
|
||||
*
|
||||
* @description Initialize
|
||||
*/
|
||||
const googleScript = document.createElement("script");
|
||||
googleScript.src = "https://accounts.google.com/gsi/client";
|
||||
googleScript.className = "social-script-tag";
|
||||
|
||||
document.body.appendChild(googleScript);
|
||||
|
||||
const response = await new Promise((resolve, reject) => {
|
||||
googleScript.onload = function (e) {
|
||||
if (google) {
|
||||
if (readyStateDispatch) readyStateDispatch(true);
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
if (element) {
|
||||
/**
|
||||
* Handle google credentials response
|
||||
* ========================================================
|
||||
* @param {object} response - Google response with credentials
|
||||
* @param {string} response.credential - Google access token
|
||||
*/
|
||||
function handleCredentialResponse(response) {
|
||||
resolve(response.credential);
|
||||
}
|
||||
|
||||
google.accounts.id.initialize({
|
||||
client_id: clientId,
|
||||
callback: handleCredentialResponse,
|
||||
});
|
||||
|
||||
google.accounts.id.renderButton(element, {
|
||||
theme: "outline",
|
||||
size: "large",
|
||||
logo_alignment: "center",
|
||||
});
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
if (triggerPrompt) {
|
||||
google.accounts.id.prompt(
|
||||
/**
|
||||
* Google prompt notification callback
|
||||
* ========================================================
|
||||
* @param {GoogleIdentityPromptNotification} notification - Notification object
|
||||
*/
|
||||
(notification) => {
|
||||
notification.isDisplayed();
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return response;
|
||||
};
|
||||
|
||||
+146
-146
@@ -1,146 +1,146 @@
|
||||
/**
|
||||
* Type Definitions
|
||||
* ===============================================================================
|
||||
*/
|
||||
|
||||
const parseClientCookies = require("../utils/parseClientCookies");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Login with Google Function
|
||||
* ===============================================================================
|
||||
* @description This function uses google identity api to login a user with datasquirel
|
||||
*
|
||||
* @async
|
||||
*
|
||||
* @param {object|null} params - Single object passed
|
||||
* @param {string|null} params.googleClientId - Google client Id if applicable
|
||||
*
|
||||
* @requires localStorageUser - a "user" JSON string stored in local storage with all
|
||||
* the necessary user data gotten from the server
|
||||
*
|
||||
* @returns {Promise<boolean>} - Return
|
||||
*/
|
||||
module.exports = async function logout(params) {
|
||||
/**
|
||||
* == Initialize
|
||||
*
|
||||
* @description Initialize
|
||||
*/
|
||||
const localUser = localStorage.getItem("user");
|
||||
let targetUser;
|
||||
|
||||
try {
|
||||
targetUser = JSON.parse(localUser);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
if (!targetUser) {
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
const cookies = parseClientCookies();
|
||||
const socialId = cookies?.datasquirel_social_id && typeof cookies.datasquirel_social_id == "string" && !cookies.datasquirel_social_id.match(/^null$/i) ? cookies.datasquirel_social_id : null;
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
localStorage.setItem("user", "{}");
|
||||
localStorage.removeItem("csrf");
|
||||
|
||||
document.cookie = `datasquirel_social_id=null;samesite=strict;path=/`;
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
const response = await new Promise((resolve, reject) => {
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if (socialId && !socialId?.match(/^null$/i)) {
|
||||
const googleClientId = params?.googleClientId;
|
||||
|
||||
if (googleClientId) {
|
||||
const googleScript = document.createElement("script");
|
||||
googleScript.src = "https://accounts.google.com/gsi/client";
|
||||
googleScript.className = "social-script-tag";
|
||||
|
||||
document.body.appendChild(googleScript);
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
googleScript.onload = function (e) {
|
||||
if (google) {
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
google.accounts.id.initialize({
|
||||
client_id: googleClientId,
|
||||
});
|
||||
|
||||
google.accounts.id.revoke(socialId, (done) => {
|
||||
console.log(done.error);
|
||||
|
||||
resolve(true);
|
||||
});
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
}
|
||||
};
|
||||
} else {
|
||||
resolve(true);
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
} else {
|
||||
resolve(true);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
});
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return response;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
};
|
||||
/**
|
||||
* Type Definitions
|
||||
* ===============================================================================
|
||||
*/
|
||||
|
||||
const parseClientCookies = require("../utils/parseClientCookies");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Login with Google Function
|
||||
* ===============================================================================
|
||||
* @description This function uses google identity api to login a user with datasquirel
|
||||
*
|
||||
* @async
|
||||
*
|
||||
* @param {object|null} params - Single object passed
|
||||
* @param {string|null} params.googleClientId - Google client Id if applicable
|
||||
*
|
||||
* @requires localStorageUser - a "user" JSON string stored in local storage with all
|
||||
* the necessary user data gotten from the server
|
||||
*
|
||||
* @returns {Promise<boolean>} - Return
|
||||
*/
|
||||
module.exports = async function logout(params) {
|
||||
/**
|
||||
* == Initialize
|
||||
*
|
||||
* @description Initialize
|
||||
*/
|
||||
const localUser = localStorage.getItem("user");
|
||||
let targetUser;
|
||||
|
||||
try {
|
||||
targetUser = JSON.parse(localUser);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
if (!targetUser) {
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
const cookies = parseClientCookies();
|
||||
const socialId = cookies?.datasquirel_social_id && typeof cookies.datasquirel_social_id == "string" && !cookies.datasquirel_social_id.match(/^null$/i) ? cookies.datasquirel_social_id : null;
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
localStorage.setItem("user", "{}");
|
||||
localStorage.removeItem("csrf");
|
||||
|
||||
document.cookie = `datasquirel_social_id=null;samesite=strict;path=/`;
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
const response = await new Promise((resolve, reject) => {
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if (socialId && !socialId?.match(/^null$/i)) {
|
||||
const googleClientId = params?.googleClientId;
|
||||
|
||||
if (googleClientId) {
|
||||
const googleScript = document.createElement("script");
|
||||
googleScript.src = "https://accounts.google.com/gsi/client";
|
||||
googleScript.className = "social-script-tag";
|
||||
|
||||
document.body.appendChild(googleScript);
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
googleScript.onload = function (e) {
|
||||
if (google) {
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
google.accounts.id.initialize({
|
||||
client_id: googleClientId,
|
||||
});
|
||||
|
||||
google.accounts.id.revoke(socialId, (done) => {
|
||||
console.log(done.error);
|
||||
|
||||
resolve(true);
|
||||
});
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
}
|
||||
};
|
||||
} else {
|
||||
resolve(true);
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
} else {
|
||||
resolve(true);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
});
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return response;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user