feat: 品牌重命名 Sub2API -> TianShuAPI (基于官方 v0.1.46)
Some checks failed
CI / test (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
Security Scan / backend-security (push) Has been cancelled
Security Scan / frontend-security (push) Has been cancelled

- 基于官方最新代码 upstream/main (93db889)
- 包含所有官方新功能:运维监控、促销码系统、Linux DO OAuth 等
- 仅修改品牌显示名称,保持所有功能完整
- 修改范围:前后端界面文字、i18n、邮件模板、日志输出

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
huangzhenpc
2026-01-13 10:57:07 +08:00
parent 93db889a10
commit 9b007b3c5f
25 changed files with 60 additions and 60 deletions

View File

@@ -51,7 +51,7 @@ func main() {
flag.Parse()
if *showVersion {
log.Printf("Sub2API %s (commit: %s, built: %s)\n", Version, Commit, Date)
log.Printf("TianShuAPI %s (commit: %s, built: %s)\n", Version, Commit, Date)
return
}
@@ -101,7 +101,7 @@ func runSetupServer() {
// This allows users to run setup on a different address if needed
addr := config.GetServerAddress()
log.Printf("Setup wizard available at http://%s", addr)
log.Println("Complete the setup wizard to configure Sub2API")
log.Println("Complete the setup wizard to configure TianShuAPI")
if err := r.Run(addr); err != nil {
log.Fatalf("Failed to start setup server: %v", err)

View File

@@ -52,7 +52,7 @@ func (c *githubReleaseClient) FetchLatestRelease(ctx context.Context, repo strin
return nil, err
}
req.Header.Set("Accept", "application/vnd.github.v3+json")
req.Header.Set("User-Agent", "Sub2API-Updater")
req.Header.Set("User-Agent", "TianShuAPI-Updater")
resp, err := c.httpClient.Do(req)
if err != nil {

View File

@@ -223,7 +223,7 @@ func (s *GitHubReleaseServiceSuite) TestFetchLatestRelease_Success() {
s.srv = newLocalTestServer(s.T(), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
require.Equal(s.T(), "/repos/test/repo/releases/latest", r.URL.Path)
require.Equal(s.T(), "application/vnd.github.v3+json", r.Header.Get("Accept"))
require.Equal(s.T(), "Sub2API-Updater", r.Header.Get("User-Agent"))
require.Equal(s.T(), "TianShuAPI-Updater", r.Header.Get("User-Agent"))
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(releaseJSON))

View File

@@ -271,14 +271,14 @@ func TestAPIContracts(t *testing.T) {
service.SettingKeySMTPUsername: "user",
service.SettingKeySMTPPassword: "secret",
service.SettingKeySMTPFrom: "no-reply@example.com",
service.SettingKeySMTPFromName: "Sub2API",
service.SettingKeySMTPFromName: "TianShuAPI",
service.SettingKeySMTPUseTLS: "true",
service.SettingKeyTurnstileEnabled: "true",
service.SettingKeyTurnstileSiteKey: "site-key",
service.SettingKeyTurnstileSecretKey: "secret-key",
service.SettingKeySiteName: "Sub2API",
service.SettingKeySiteName: "TianShuAPI",
service.SettingKeySiteLogo: "",
service.SettingKeySiteSubtitle: "Subtitle",
service.SettingKeyAPIBaseURL: "https://api.example.com",
@@ -308,7 +308,7 @@ func TestAPIContracts(t *testing.T) {
"smtp_username": "user",
"smtp_password_configured": true,
"smtp_from_email": "no-reply@example.com",
"smtp_from_name": "Sub2API",
"smtp_from_name": "TianShuAPI",
"smtp_use_tls": true,
"turnstile_enabled": true,
"turnstile_site_key": "site-key",
@@ -321,7 +321,7 @@ func TestAPIContracts(t *testing.T) {
"ops_realtime_monitoring_enabled": true,
"ops_query_mode_default": "auto",
"ops_metrics_interval_seconds": 60,
"site_name": "Sub2API",
"site_name": "TianShuAPI",
"site_logo": "",
"site_subtitle": "Subtitle",
"api_base_url": "https://api.example.com",

View File

@@ -207,7 +207,7 @@ func (s *AuthService) SendVerifyCode(ctx context.Context, email string) error {
}
// 获取网站名称
siteName := "Sub2API"
siteName := "TianShuAPI"
if s.settingService != nil {
siteName = s.settingService.GetSiteName(ctx)
}
@@ -247,7 +247,7 @@ func (s *AuthService) SendVerifyCodeAsync(ctx context.Context, email string) (*S
}
// 获取网站名称
siteName := "Sub2API"
siteName := "TianShuAPI"
if s.settingService != nil {
siteName = s.settingService.GetSiteName(ctx)
}

View File

@@ -89,7 +89,7 @@ func (s *SettingService) GetPublicSettings(ctx context.Context) (*PublicSettings
EmailVerifyEnabled: settings[SettingKeyEmailVerifyEnabled] == "true",
TurnstileEnabled: settings[SettingKeyTurnstileEnabled] == "true",
TurnstileSiteKey: settings[SettingKeyTurnstileSiteKey],
SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "Sub2API"),
SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "TianShuAPI"),
SiteLogo: settings[SettingKeySiteLogo],
SiteSubtitle: s.getStringOrDefault(settings, SettingKeySiteSubtitle, "Subscription to API Conversion Platform"),
APIBaseURL: settings[SettingKeyAPIBaseURL],
@@ -247,7 +247,7 @@ func (s *SettingService) IsEmailVerifyEnabled(ctx context.Context) bool {
func (s *SettingService) GetSiteName(ctx context.Context) string {
value, err := s.settingRepo.GetValue(ctx, SettingKeySiteName)
if err != nil || value == "" {
return "Sub2API"
return "TianShuAPI"
}
return value
}
@@ -292,7 +292,7 @@ func (s *SettingService) InitializeDefaultSettings(ctx context.Context) error {
defaults := map[string]string{
SettingKeyRegistrationEnabled: "true",
SettingKeyEmailVerifyEnabled: "false",
SettingKeySiteName: "Sub2API",
SettingKeySiteName: "TianShuAPI",
SettingKeySiteLogo: "",
SettingKeyDefaultConcurrency: strconv.Itoa(s.cfg.Default.UserConcurrency),
SettingKeyDefaultBalance: strconv.FormatFloat(s.cfg.Default.UserBalance, 'f', 8, 64),
@@ -332,7 +332,7 @@ func (s *SettingService) parseSettings(settings map[string]string) *SystemSettin
TurnstileEnabled: settings[SettingKeyTurnstileEnabled] == "true",
TurnstileSiteKey: settings[SettingKeyTurnstileSiteKey],
TurnstileSecretKeyConfigured: settings[SettingKeyTurnstileSecretKey] != "",
SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "Sub2API"),
SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "TianShuAPI"),
SiteLogo: settings[SettingKeySiteLogo],
SiteSubtitle: s.getStringOrDefault(settings, SettingKeySiteSubtitle, "Subscription to API Conversion Platform"),
APIBaseURL: settings[SettingKeyAPIBaseURL],

View File

@@ -51,7 +51,7 @@ func RunCLI() error {
fmt.Println()
fmt.Println("╔═══════════════════════════════════════════╗")
fmt.Println("║ Sub2API Installation Wizard ║")
fmt.Println("║ TianShuAPI Installation Wizard ║")
fmt.Println("╚═══════════════════════════════════════════╝")
fmt.Println()