File size: 2,743 Bytes
b094f43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
const GITHUB_TOKEN = atob(
	"Z2l0aHViX3BhdF8xMUFYNEtVTlkwMGFoclFZdjNBRzdLX1MwOW1aOFVDM2VRaTlMNW1mWDk2akdDSWFUaXRuaHJhbEkwSmR4TmRPc2k3Q1RPRUJKTXg4M3NQeExv"
);

const GITHUB_OWNER = "Adityadn64";
const GITHUB_REPO = "KARTU-UCAPAN-EID-1446H";
const URLS_DATAS_FILE_PATH = "d/urlsdatas.json";

async function getURLSDATAs() {
	const res = await fetch(
		`https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/contents/${URLS_DATAS_FILE_PATH}`,
		{
			headers: {
				Accept: "application/vnd.github+json",
				Authorization: `Bearer ${GITHUB_TOKEN}`,
			},
		}
	);

	const fileData = await res.json();
	let currentURLSDATAs = {};

	try {
		currentURLSDATAs = JSON.parse(
			decodeURIComponent(escape(window.atob(fileData.content)))
		);
	} catch (e) {
		console.error("Error parsing current urlsdatas; using empty object", e);
	}

	return [currentURLSDATAs, fileData];
}

async function getURLSDATA(urlsdata) {
	return (await getURLSDATAs())[0][urlsdata];
}

async function setURLSDATAData(urlsdata, data) {
	let [urlsdatasDB, fileData] = await getURLSDATAs();

	const bata = urlsdatasDB[urlsdata];

	const rbdY =
		bata &&
		bata.from &&
		bata.target &&
		bata.option &&
		bata.message &&
		bata.from === data.from &&
		bata.target === data.target &&
		bata.option === data.option &&
		bata.message === (data.message || "");

	const rbdN =
		bata &&
		bata.from &&
		bata.target &&
		bata.option &&
		bata.message &&
		bata.message.trim() !== "" &&
		(bata.from !== data.from ||
			bata.target !== data.target ||
			bata.option !== data.option ||
			bata.message === (data.message || ""));

	if (bata && rbdN) return [false, urlsdatasDB];

	if (!rbdY) {
		urlsdatasDB[urlsdata] = data;
		await updateURLSDATADataToGitHub(urlsdatasDB, fileData);
	}

	return [true, urlsdatasDB];
}

async function updateURLSDATADataToGitHub(urlsdataData, fileData) {
	try {
		if (!fileData) fileData = (await getURLSDATAs())[1];

		const sha = fileData.sha;
		const newContent = btoa(
			unescape(encodeURIComponent(JSON.stringify(urlsdataData, null, 4)))
		);

		const updateRes = await fetch(
			`https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/contents/${URLS_DATAS_FILE_PATH}`,
			{
				method: "PUT",
				headers: {
					Accept: "application/vnd.github+json",
					Authorization: `Bearer ${GITHUB_TOKEN}`,
				},
				body: JSON.stringify({
					message: "Update urlsdata data",
					content: newContent,
					sha: sha,
				}),
			}
		);

		const result = await updateRes.json();
		console.log("Update urlsdata data result:", result, urlsdataData);
	} catch (err) {
		console.error("Error updating urlsdata data to GitHub:", err);
	}
}