GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。 NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは 別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
113 lines
5.3 KiB
JavaScript
113 lines
5.3 KiB
JavaScript
// Archive配下の全ページにhidden=trueを設定する使い捨てスクリプト。
|
||
const fs = require("fs");
|
||
const path = require("path");
|
||
|
||
const envPath = path.join(__dirname, "..", ".env");
|
||
for (const line of fs.readFileSync(envPath, "utf8").split("\n")) {
|
||
const m = line.match(/^([A-Z_]+)=(.*)$/);
|
||
if (m) process.env[m[1]] = m[2].replace(/^"|"$/g, "");
|
||
}
|
||
|
||
const XWIKI_BASE_URL = process.env.XWIKI_BASE_URL;
|
||
const AUTH = "Basic " + Buffer.from(`${process.env.XWIKI_ADMIN_USER}:${process.env.XWIKI_ADMIN_PASSWORD}`).toString("base64");
|
||
const WIKI_ID = "nexthd";
|
||
|
||
const pages = [
|
||
"Archive.FIT■FIT-PHP.WebHome",
|
||
"Archive.FIT■FIT-PHP.アーキトレンド.FCコンシェルジュ登録",
|
||
"Archive.FIT■FIT-PHP.アーキトレンド.WebHome",
|
||
"Archive.FIT■FIT-PHP.アーキトレンド.アーキトレンド",
|
||
"Archive.FIT■FIT-PHP.アーキトレンド.アーキトレンドマスタ更新",
|
||
"Archive.FIT■デザインセンター.WebHome",
|
||
"Archive.FIT■デザインセンター.デザインセンター",
|
||
"Archive.ネクスト■ウェルホーム八王子.WebHome",
|
||
"Archive.ネクスト■ウェルホーム八王子.ウェルホーム八王子",
|
||
"Archive.ネクスト■ウェルホーム八王子.テスト",
|
||
"Archive.ネクスト■ウェルホーム横浜.WebHome",
|
||
"Archive.ネクスト■ウェルホーム横浜.ウェルホーム横浜",
|
||
"Archive.ネクスト■ウェルホーム立川.WebHome",
|
||
"Archive.ネクスト■ウェルホーム立川.WELLHOMES立川",
|
||
"Archive.ネクスト■ネクストハウス厚木.WebHome",
|
||
"Archive.ネクスト■ネクストハウス厚木.ネクストハウス厚木",
|
||
"Archive.ネクスト■ネクストハウス相模原.WebHome",
|
||
"Archive.ネクスト■ネクストハウス相模原.ネクストハウス相模原",
|
||
"Archive.ネクスト■ネクストハウス立川.WebHome",
|
||
"Archive.ネクスト■ネクストハウス立川.モデルハウス名",
|
||
"Archive.ネクスト■東京特販課.東京特販課",
|
||
"Archive.ネクスト■東京特販課.WebHome",
|
||
"Archive.ネクストイノベーション株式会社.WebHome",
|
||
"Archive.ネクストイノベーション株式会社.東京住宅営業部",
|
||
"Archive.ネクストイノベーション株式会社.不動産事業部.WebHome",
|
||
"Archive.ネクストイノベーション株式会社.不動産事業部.東京不動産(センチュリー21).WebHome",
|
||
"Archive.ネクストイノベーション株式会社.不動産事業部.東京不動産(センチュリー21).イオンハウジング相模原",
|
||
"Archive.ネクストイノベーション株式会社.不動産事業部.東京不動産(センチュリー21).東京不動産(センチュリー21)",
|
||
"Archive.ネクストイノベーション株式会社.住宅営業部.WebHome",
|
||
"Archive.ネクストイノベーション株式会社.住宅営業部.WELLHOMESブランド_西東京_.WebHome",
|
||
"Archive.ネクストイノベーション株式会社.住宅営業部.WELLHOMESブランド_西東京_.業務フロー(WELLHOMES[西東京])",
|
||
"Archive.愛知■アクティエ大府第1.WebHome",
|
||
"Archive.愛知■アクティエ大府第1.actie大府第一",
|
||
"Archive.業務改善プロジェクトページ.WebHome",
|
||
"Archive.業務改善プロジェクトページ.野木試作中.2021年6月14日 議事録",
|
||
"Archive.業務改善プロジェクトページ.野木試作中.WebHome",
|
||
"Archive.業務改善プロジェクトページ.野木試作中.テスト",
|
||
"Archive.業務改善プロジェクトページ.野木試作中.nexthouse厚木",
|
||
];
|
||
|
||
function fullNameToUrlPath(fullName) {
|
||
const parts = fullName.split(".");
|
||
const pageName = parts.pop();
|
||
const spacesPart = parts.map((s) => `spaces/${encodeURIComponent(s)}`).join("/");
|
||
return `/rest/wikis/${WIKI_ID}/${spacesPart}/pages/${encodeURIComponent(pageName)}`;
|
||
}
|
||
|
||
function escapeXml(s) {
|
||
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
||
}
|
||
|
||
async function main() {
|
||
let ok = 0;
|
||
let fail = 0;
|
||
for (const fullName of pages) {
|
||
const urlPath = fullNameToUrlPath(fullName);
|
||
const getRes = await fetch(`${XWIKI_BASE_URL}${urlPath}`, {
|
||
headers: { Authorization: AUTH, Accept: "application/json" },
|
||
});
|
||
if (!getRes.ok) {
|
||
console.warn(` ! GET失敗(${getRes.status}): ${fullName}`);
|
||
fail++;
|
||
continue;
|
||
}
|
||
const data = await getRes.json();
|
||
if (data.hidden === true) {
|
||
console.log(` - 既にhidden: ${fullName}`);
|
||
ok++;
|
||
continue;
|
||
}
|
||
const xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||
<page xmlns="http://www.xwiki.org">
|
||
<title>${escapeXml(data.title)}</title>
|
||
<syntax>${escapeXml(data.syntax)}</syntax>
|
||
<hidden>true</hidden>
|
||
<content>${escapeXml(data.content)}</content>
|
||
</page>`;
|
||
const putRes = await fetch(`${XWIKI_BASE_URL}${urlPath}`, {
|
||
method: "PUT",
|
||
headers: { Authorization: AUTH, "Content-Type": "application/xml; charset=UTF-8" },
|
||
body: xml,
|
||
});
|
||
if (putRes.status === 200 || putRes.status === 202 || putRes.status === 201) {
|
||
console.log(` - hidden設定: ${fullName} (${putRes.status})`);
|
||
ok++;
|
||
} else {
|
||
console.warn(` ! PUT失敗(${putRes.status}): ${fullName}`);
|
||
fail++;
|
||
}
|
||
}
|
||
console.log(`完了: ${ok}件成功, ${fail}件失敗`);
|
||
}
|
||
|
||
main().catch((e) => {
|
||
console.error(e);
|
||
process.exit(1);
|
||
});
|