feat: teai role

This commit is contained in:
ydc3148
2026-09-14 16:13:02 +08:00
parent 8735e35db6
commit 540718dda7
12 changed files with 416 additions and 120 deletions
+9 -9
View File
@@ -1,6 +1,6 @@
// login.go — teai login 指令:管理 tea 相容的登入組態。
// login.go — teai login 指令:管理 teai 自己的登入組態。
//
// teai 與 tea 共用同一份組態檔(README 設計原則 5),login 的職責是:
// 組態由 teai 自行讀寫(README 設計原則 5),不依賴 tea。login 的職責是:
// 以 token 向站點驗證(GET /user),成功後才寫入組態並記下帳號。
// token 只走記憶體與組態檔,不進輸出、日誌或錯誤訊息。
//
@@ -25,20 +25,20 @@ import (
// loginStdin 是讀 token 與確認的輸入(測試可替換)。
var loginStdin io.Reader = os.Stdin
// loginConfigPath 回傳組態檔路徑:--config/TEA_CONFIG 優先,其次
// ~/.config/tea/config.yml。找不到可用路徑回空字串。
// loginConfigPath 回傳組態檔路徑:--config/TEAI_CONFIG 優先,其次
// ~/.config/teai/config.yml。找不到可用路徑回空字串。
func loginConfigPath(g Globals) string {
if p := strings.TrimSpace(g.ConfigPath); p != "" {
return expandHome(p)
}
if p := os.Getenv("TEA_CONFIG"); strings.TrimSpace(p) != "" {
if p := os.Getenv("TEAI_CONFIG"); strings.TrimSpace(p) != "" {
return expandHome(strings.TrimSpace(p))
}
home, err := os.UserHomeDir()
if err != nil || home == "" {
return ""
}
return filepath.Join(home, ".config", "tea", "config.yml")
return filepath.Join(home, ".config", "teai", "config.yml")
}
// expandHome 展開路徑開頭的 ~。
@@ -178,7 +178,7 @@ func runLoginAdd(env *Env, args []string) error {
if err != nil {
return err
}
if err := gitea.SaveTeaConfigFile(path, out); err != nil {
if err := gitea.SaveConfigFile(path, out); err != nil {
return err
}
p := gitea.Printer{Format: env.Globals.Output, Out: env.Out}
@@ -329,7 +329,7 @@ func saveLoginConfig(env *Env, data []byte) error {
if path == "" {
return fmt.Errorf("cannot determine config path")
}
return gitea.SaveTeaConfigFile(path, data)
return gitea.SaveConfigFile(path, data)
}
// findLoginByHost 在組態內容中找 URL 主機與 siteURL 相同的登入。
@@ -352,7 +352,7 @@ func findLogin(data []byte, name string) (gitea.LoginEntry, bool) {
return gitea.LoginEntry{}, false
}
// defaultLoginName 以 URL 主機作為登入名稱(同 tea 的習慣)。
// defaultLoginName 以 URL 主機作為登入名稱。
func defaultLoginName(rawURL string) string {
s := rawURL
if !strings.Contains(s, "://") {