36 lines
2.1 KiB
JavaScript
36 lines
2.1 KiB
JavaScript
import {createHmac} from "node:crypto";
|
|
import {readFileSync} from "node:fs";
|
|
|
|
const baseUrl = "https://f-n8.ru";
|
|
const [keyId, secret] = readFileSync("/root/ghost-admin-api-key", "utf8").trim().split(":");
|
|
const encode = (value) => Buffer.from(JSON.stringify(value)).toString("base64url");
|
|
const now = Math.floor(Date.now() / 1000);
|
|
const unsigned = `${encode({alg: "HS256", typ: "JWT", kid: keyId})}.${encode({iat: now, exp: now + 300, aud: "/admin/"})}`;
|
|
const token = `${unsigned}.${createHmac("sha256", Buffer.from(secret, "hex")).update(unsigned).digest("base64url")}`;
|
|
const headers = {Authorization: `Ghost ${token}`, "Content-Type": "application/json"};
|
|
|
|
const oldText = "Мы собираем материалы производителей и профильных магазинов, проверяем их релевантность и приводим к единому удобному формату.";
|
|
const newText = "Ежедневно мы собираем новости снаряжения с сотен источников, отбираем лучшее и публикуем в одном месте!";
|
|
|
|
const response = await fetch(`${baseUrl}/ghost/api/admin/pages/slug/about/?formats=html`, {headers});
|
|
if (!response.ok) throw new Error(`Ghost page read failed: ${response.status} ${await response.text()}`);
|
|
const page = (await response.json()).pages[0];
|
|
const html = String(page.html || "");
|
|
if (!html.includes(oldText) && !String(page.custom_excerpt || "").includes(oldText)) {
|
|
throw new Error("Expected about text was not found");
|
|
}
|
|
const update = {
|
|
id: page.id,
|
|
updated_at: page.updated_at,
|
|
html: html.replaceAll(oldText, newText),
|
|
custom_excerpt: String(page.custom_excerpt || "").replaceAll(oldText, newText),
|
|
};
|
|
const saved = await fetch(`${baseUrl}/ghost/api/admin/pages/${page.id}/?source=html`, {
|
|
method: "PUT",
|
|
headers,
|
|
body: JSON.stringify({pages: [update]}),
|
|
});
|
|
if (!saved.ok) throw new Error(`Ghost page update failed: ${saved.status} ${await saved.text()}`);
|
|
const result = (await saved.json()).pages[0];
|
|
console.log(JSON.stringify({id: result.id, slug: result.slug, updated_at: result.updated_at}));
|