Adityadn's picture
Upload 7 files
4a97c42 verified
raw
history blame
6.76 kB
var products = [];
var fileData = "";
const GITHUB_TOKEN = atob(
"Z2l0aHViX3BhdF8xMUFYNEtVTlkwY05lbWNpZHVrWDYxXzczTzV2bTh2Wk5uMzlpQm0wb1BXRmd5dUx2a0VKSGluZ0dZeURPV0JFWTJXMk9YTFFINVRLT2xpU2ts"
);
console.log(
GITHUB_TOKEN ===
"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"
);
const GITHUB_OWNER = "Adityadn64";
const GITHUB_REPO = "FINAL-PROJECT---ACQ20RC";
const USERS_FILE_PATH = "database/users.json";
const PRODUCTS_FILE_PATH = "database/products.json";
async function getUsers() {
const res = await fetch(
`https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/contents/${USERS_FILE_PATH}`,
{
headers: {
Accept: "application/vnd.github+json",
Authorization: `Bearer ${GITHUB_TOKEN}`,
},
}
);
fileData = await res.json();
let currentUsers = {};
try {
currentUsers = JSON.parse(atob(fileData.content));
} catch (e) {
console.error("Error parsing current users; using empty object", e);
}
return currentUsers;
}
async function getUserData() {
const storedDataStr = localStorage.getItem("userData");
if (!storedDataStr) return null;
const storedData = JSON.parse(storedDataStr);
const usersDB = await getUsers();
let userData =
storedData.uid && usersDB && usersDB[storedData.uid]
? usersDB[storedData.uid]
: storedData;
// Ensure uid is set
if (storedData.uid) {
userData.uid = storedData.uid;
}
return userData;
}
async function getCarts() {
const userData = await getUserData();
let localCart = [];
const cartStr = localStorage.getItem("cart");
if (cartStr) {
try {
localCart = JSON.parse(cartStr);
if (!Array.isArray(localCart)) {
localCart = [];
}
} catch (e) {
console.error(
"Error parsing local cart data; using empty array",
e
);
localCart = [];
}
}
let cartData;
if (userData && userData.cart && Array.isArray(userData.cart)) {
cartData = userData.cart;
} else {
cartData = localCart;
}
return cartData;
}
function convertImageToBase64(imageUrl) {
return new Promise((resolve, reject) => {
fetch(imageUrl)
.then(res => res.blob())
.then(blob => {
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = () => resolve(reader.result);
reader.onerror = error => reject(error);
})
.catch(err => reject(err));
});
}
async function uploadFileToGitHub(filePath, base64Data) {
try {
const fileRes = await fetch(
`https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/contents/${filePath}`,
{
method: "PUT",
headers: {
Accept: "application/vnd.github+json",
Authorization: `Bearer ${GITHUB_TOKEN}`,
},
body: JSON.stringify({
message: "Upload user photo",
content: base64Data.split(",")[1], // Hanya ambil data Base64 tanpa prefix
}),
}
);
const result = await fileRes.json();
return result;
} catch (err) {
console.error("Error uploading file to GitHub:", err);
return null;
}
}
async function updateUserDataToGitHub(userData) {
try {
let currentUsers = await getUsers();
const isNotValidUID = !userData.uid || userData.uid === undefined;
if (isNotValidUID) {
localStorage.clear();
window.location.href =
`/profile.html?redirect=${urlNow}` +
(message ? `&message=${message}` : "");
}
if (!userData.photo_profile.includes("github")) {
const photoFilePath = `assets/users/photo_profile/${userData.uid}.jpg`;
let photoBase64 = userData.photo_profile;
if (!photoBase64.startsWith("data:image/")) {
photoBase64 = await convertImageToBase64(userData.photo_profile);
}
const photoUploadRes = await uploadFileToGitHub(photoFilePath, photoBase64);
if (photoUploadRes) {
userData.photo_profile = `https://raw.githubusercontent.com/${GITHUB_OWNER}/${GITHUB_REPO}/main/${photoFilePath}`;
}
}
currentUsers[userData.uid] = {
name: userData.name ? userData.name : "",
email: userData.email ? userData.email : "",
phone: userData.phone ? userData.phone : "",
address: userData.address ? userData.address : "",
photo_profile: userData.photo_profile ? userData.photo_profile : "",
cart: userData.cart ? userData.cart : [],
transactions: userData.transactions ? userData.transactions : {},
};
const newContent = btoa(JSON.stringify(currentUsers, null, 4));
const updateRes = await fetch(
`https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/contents/${USERS_FILE_PATH}`,
{
method: "PUT",
headers: {
Accept: "application/vnd.github+json",
Authorization: `Bearer ${GITHUB_TOKEN}`,
},
body: JSON.stringify({
message: "Update user data via login Google",
content: newContent,
sha: fileData.sha,
}),
}
);
const result = await updateRes.json();
console.log("Update user data result:", result, currentUsers);
} catch (err) {
console.error("Error updating user data to GitHub:", err);
}
}
async function fetchProductsData() {
const response = await fetch(
`https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/contents/${PRODUCTS_FILE_PATH}`,
{
headers: {
Accept: "application/vnd.github.v3+json",
Authorization: `Bearer ${GITHUB_TOKEN}`,
},
}
);
const data = await response.json();
const fileContent = atob(data.content);
products = JSON.parse(fileContent);
return products;
}
document.addEventListener("DOMContentLoaded", async function () {
AOS.init();
products = await fetchProductsData();
});