Featured image of post 重新打理網站的記事

重新打理網站的記事

一周前在收到`Namesilo`的域名過期提醒後,也是久違的想起来打理一下域名相关的事务。

前置

一周前在收到Namesilo的域名過期提醒後,也是久違的想起来打理一下域名相关的事务。

域名轉出

Namesilo那邊續費需要 6 刀,價格以外的另一方面是因為他們升級的管理界面也並不友好,由於曆史原因,他們的用戶系統非常混亂,甚至於我忘記賬戶名無法登陸管理賬號時,居然發現他們家的自助找回系統是個半成品,最後還是得上傳購買域名的賬單資料讓客服幫助我。經過一陣比價後,選擇轉入到更加廉價的Porkbun,並且其也支持支付寶付款,有更完善的後台,還是粉色的。

遷移博客

在之前,我的博客是直接Hugo發佈後手動git push到我的Github主倉庫,然後讓cloudflare 代理Github Page,雖然也能用,但還是麻煩很多,最主要還是因為倉庫不能設為私密,每次commit都有種被關注感。一開始是想到我以前的白嫖辦法,drv.tw + googledrive + jsdelivr 圖床 ,無奈時過境遷,這家台灣網站已經不再支持域名綁定,以及網盤連結也變得卡頓無比,好像是沒人維護了。後來發現了cloudflare 是可以免費部署頁面的,也提供了Hugo和域名綁定支持,不僅不用手動push靜態文件可以自己構建,還省的我去做圖床鏈接了,直接零成本遷移。

編輯器續杯

這些搞定了想要寫點東西的時候,發現我上週剛裝的Typora還有兩天過期了…… 這怎麼辦呢?哦對,貌似上個月還在郵箱翻到關於它的NodeHook程序的issues來著,但是忘記怎麼用了,等我構建好後卻發現我用的最新版 Typaro(1.10.8)已經不適用了,但是我又不想再裝一個舊版本,咋辦嘞?

好吧,雖然用不了但是好歹是可以免費試用的,貌似試用和購買版也沒什麼區別,翻了翻Typora的目錄結構,一翻嘗試後,發現修改系統時間聯網狀態也能進入試用模式並重新計時了,那麼應該是有地方存了註冊時間的,後面也是發現了只要手動修改兩個地方的配置裡把註冊日期為當天就可以一直白嫖 15 天免費了。

我也是順手寫了個 WIN 服務來自動更新配置 感興趣的話可以看看: typora-keeptrying , 主要的代碼如下:

  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
// 註冊表地址 HKEY_CURRENT_USER\Software\Typora\IDate
// 用戶設置文件 C:\Users\UserName\AppData\Roaming\Typora\profile.data
// 呃呃 不過profile.data是進行了一次十六進制編碼的json格式文件 需要hex2str後才能修改具體內容
type Config struct {
// C:\Users\Administrator\AppData\Roaming\Typora
	ProfilePath    string `json:"profile_path"`
// C:\Typora_KeepTrying
	InstallDirPath string `json:"install_path"`
// S-1-5-21-2495842453-42734561234-229025492-1006
	SID            string `json:"security_id"`
}

var DefaultInstall = `C:\Typora_KeepTrying`
var CFG *Config = &Config{}
//....
{
config, err := readProfile(CFG.ProfilePath)
if err != nil {
    Log("解析出错...")
    Log("Parse failed...", err)
    return err
}
Log("解析Profile文件...")
Log("Parsing Profile file...")

config["_iD"] = today
//改写PreVersion 失效
//config["version"] = "9.99.9"
//禁用自动更新
config["enableAutoUpdate"] = false
//禁止发送匿名使用消息
config["send_usage_info"] = false

if err := writeProfile(CFG.ProfilePath, config); err != nil {
    Log("写入出错...")
    Log("Write failed...", err)
    restoreErr := restoreBackup(CFG.ProfilePath)
    if restoreErr != nil {
        Log("恢复失败,请手动检查 profile.data.bak")
        Log("Recovery failed, please manually check profile.data.bak")
    } else {
        Log("已成功恢复 profile.data.bak")
        Log("Successfully restored profile.data.bak")
    }
    return err
}

if err := updateRegistry(today, CFG.SID); err != nil {
    Log("写入注册表出错...")
    Log("Failed to write to registry...", err)
    return err
}
//....
}
//....
func updateRegistry(today string, sid string) error {
	regKey := fmt.Sprintf(`%s\Software\Typora`, sid)
	Log(regKey)
	//"S-1-5-21-2495842453-42734561234-229025492-1006\\Software\\Typora"
	k, _, err := registry.CreateKey(registry.USERS, regKey, registry.SET_VALUE)
	if err != nil {
		Log("无法打开或创建注册表项: " + err.Error())
		Log("Failed to open or create registry key: " + err.Error())
		return errors.New("无法打开或创建注册表项: %w")
	}
	defer k.Close()

	err = k.SetStringValue("IDate", today)
	if err != nil {
		Log("无法设置注册表值: " + err.Error())
		Log("Failed to set registry value: " + err.Error())
		return errors.New("无法设置注册表值: %w")
	}
	return nil
}

func readProfile(path string) (map[string]interface{}, error) {
	rawHex, err := os.ReadFile(path)
	if err != nil {
		return nil, err
	}
	jsonBytes, err := hex.DecodeString(string(rawHex))
	if err != nil {
		return nil, err
	}
	var config map[string]interface{}
	if err := json.Unmarshal(jsonBytes, &config); err != nil {
		return nil, err
	}
	return config, nil
}

func writeProfile(path string, config map[string]interface{}) error {
	jsonBytes, err := json.Marshal(config)
	if err != nil {
		return err
	}
	newHex := hex.EncodeToString(jsonBytes)
	return os.WriteFile(path, []byte(newHex), 0644)
}
Licensed under CC BY-NC-SA 4.0