feat(link): 連結一律寫成 [文字](絕對網址),寫入前先驗證連得到
取消 [[頁名]] 與 [[顯示文字|頁名]] 兩種同 wiki 寫法,不再分「同存取庫」與 「跨存取庫」兩條規則。那種寫法只在自己那個 wiki 內解析,寫錯不報錯,畫面上 看起來像普通文字或死連結,巡不到也修不了。 連結寫進頁面前先過 jsc-gitea 的 link-check.sh,結束碼 0 才寫。驗證一律走 API, 不看網頁狀態碼:私有存取庫的網頁網址對未登入請求一律回 404,拿狀態碼判會把 好連結判成壞的。認證失敗回 7,與死連結的 1 分開,免得金鑰一過期就把還在的頁 整批判死。
This commit is contained in:
+18
-6
@@ -77,11 +77,21 @@
|
||||
# --- 目錄頁與內容頁分屬兩個存取庫 ---
|
||||
#
|
||||
# 內容頁 MONITOR_{HASH} 住 MONITOR 那個存取庫,目錄頁 MONITOR_CONTENTS 住 CONTENTS 那個
|
||||
# 專用存取庫,兩條解析鏈不互相退讓。所以目錄頁那一列指向內容頁的連結不能用 [[...]]:那種
|
||||
# 連結只在同一個 wiki 裡解得開,跨庫是死連結,畫面上還看不出壞掉,要用絕對網址。
|
||||
# 專用存取庫,兩條解析鏈不互相退讓。連結一律寫成 [{文字}]({絕對網址}),網址取
|
||||
# gitea.sh wiki-url 印的那一個,不自己組路徑;wiki 自己那種雙中括號寫法只在同一個 wiki 裡
|
||||
# 解得開,寫錯不會報錯,畫面上看起來像正常文字或死連結,巡不到也修不了。
|
||||
# 絕對網址要等內容頁真的寫進去才查得到(gitea.sh wiki-url 讀的是 API 回的 html_url),
|
||||
# 而 collect 跑在寫入之前,這裡查不到。所以這支只把列組好、網址留佔位,換字交給呼叫端。
|
||||
#
|
||||
# --- 連結先驗證連得到,才可以寫進頁面 ---
|
||||
#
|
||||
# 這支腳本一頁都不寫:它只組出檔案,兩次 wiki 寫入都在呼叫端。所以驗證的時機也在呼叫端——
|
||||
# 換掉佔位、拿到真網址之後,寫入之前,把要放進頁面的每一個連結交給 jsc-gitea 的
|
||||
# tools/link-check.sh,結束碼 0 才寫。有 DEAD 就不寫那一頁或那一列,把連不到的清單回報出去。
|
||||
# 驗證一律走 API,不看網頁狀態碼:私有存取庫的網頁網址對未登入請求一律回 404,拿狀態碼判會
|
||||
# 把好連結判成壞的。金鑰失效(結束碼 7)要與「連不到」(結束碼 1)分開看,兩者混用,一次金鑰
|
||||
# 過期就會把整批還在的頁判成死連結。
|
||||
#
|
||||
# --- 目錄頁的比對鍵是裸 HASH,不是那個連結 ---
|
||||
#
|
||||
# 目錄頁那一列另外留一欄裸 HASH(純文字、不帶連結),upsert 就拿那一欄當鍵。wiki-contents.sh
|
||||
@@ -111,9 +121,10 @@
|
||||
# summary_file= 「近 24 輪摘要」那一塊,表格裡先放本輪這一列,舊頁的資料列接在下面
|
||||
# summary_row_file= 只有本輪那一列,方便直接插到既有表格最上面
|
||||
# newpage_file= MONITOR_{HASH} 不存在時要建的整頁內容,三塊都已經排好
|
||||
# contents_file= MONITOR_CONTENTS 那一列的欄位值。row= 就是整列 markdown,第一欄是連結,
|
||||
# 網址的位置留 {監控頁絕對網址} 佔位,由呼叫端換掉,理由見下一段;第二欄是
|
||||
# 裸 HASH,upsert 拿那一欄當鍵,理由見再下一段
|
||||
# contents_file= MONITOR_CONTENTS 那一列的欄位值。row= 就是整列 markdown,第一欄是
|
||||
# [{頁名}]({絕對網址}) 這種連結,網址的位置留 {監控頁絕對網址} 佔位,由呼叫端
|
||||
# 換掉、驗過再寫,理由見下一段;第二欄是裸 HASH,upsert 拿那一欄當鍵,理由見
|
||||
# 再下一段
|
||||
#
|
||||
# 環境變數:
|
||||
# JSC_HOME 助理狀態檔的根目錄,預設 ~/.jsc
|
||||
@@ -715,7 +726,8 @@ compose() {
|
||||
printf 'tasks_total=%s\n' "$TASKS_TOTAL"
|
||||
printf 'tasks_failing=%s\n' "$TASKS_FAILING"
|
||||
printf 'hash=%s\n' "$HASH"
|
||||
# 第一欄是連結,網址留佔位由呼叫端換掉,理由見檔頭「目錄頁與內容頁分屬兩個存取庫」。
|
||||
# 第一欄是 [{頁名}]({絕對網址}) 這種連結,網址留佔位由呼叫端換掉、過完 link-check.sh 才寫,
|
||||
# 理由見檔頭「目錄頁與內容頁分屬兩個存取庫」與「連結先驗證連得到」。
|
||||
# 連結文字先寫死成頁名:頁名這裡就知道,只有網址要等內容頁寫成才查得到。
|
||||
# 第二欄是裸 HASH,upsert 拿它當鍵。鍵不能用第一欄那個連結:那一格含 GITEA_HOST 與頁名的
|
||||
# 網址編碼,主機位址、存取庫或編碼一變,整格文字就變了,鍵對不上就每輪多附一列。裸 HASH
|
||||
|
||||
+4
-1
@@ -438,11 +438,14 @@ print_allow_rules() {
|
||||
# 不寫心跳,外面只看得到心跳過期,看不出是權限擋的。
|
||||
# 目錄頁那一列改由 wiki-contents.sh 寫,所以它也要有自己這一條:巡檢那一輪會直接叫它,
|
||||
# 少了規則就會停在權限詢問,而那一輪沒有人可以按同意。
|
||||
# link-check.sh 同理:兩次寫入前都要先驗連結,少了這一條,驗證那一步就停在權限詢問,那一輪
|
||||
# 什麼都寫不成。它排在寫入之前,所以擋住它等於整輪報廢。
|
||||
for _s in "$CURRENT/jsc-assist/tools/schedule.sh" \
|
||||
"$CURRENT/jsc-assist/tools/patrol.sh" \
|
||||
"$CURRENT/jsc-hooks/hooks/heartbeat.sh" \
|
||||
"$CURRENT/jsc-gitea/tools/gitea.sh" \
|
||||
"$CURRENT/jsc-gitea/tools/wiki-contents.sh"; do
|
||||
"$CURRENT/jsc-gitea/tools/wiki-contents.sh" \
|
||||
"$CURRENT/jsc-gitea/tools/link-check.sh"; do
|
||||
printf 'allow_rule=Bash(%s:*)\n' "$_s"
|
||||
printf 'allow_rule=Bash(sh %s:*)\n' "$_s"
|
||||
printf 'allow_rule=Bash(bash %s:*)\n' "$_s"
|
||||
|
||||
Reference in New Issue
Block a user