feat: create standalone native fnOS repository
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
package ddns
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Credentials struct {
|
||||
Provider string `json:"provider,omitempty"`
|
||||
Token string `json:"token,omitempty"`
|
||||
TokenID string `json:"token_id,omitempty"`
|
||||
Secret string `json:"secret,omitempty"`
|
||||
}
|
||||
|
||||
func CredentialsFromSave(in SaveInput) Credentials {
|
||||
provider := strings.TrimSpace(in.Provider)
|
||||
if provider == "" {
|
||||
provider = "cloudflare"
|
||||
}
|
||||
switch provider {
|
||||
case "dnspod":
|
||||
return Credentials{Provider: "dnspod", TokenID: strings.TrimSpace(in.APITokenID), Token: strings.TrimSpace(in.APIToken)}
|
||||
case "alidns":
|
||||
return Credentials{Provider: "alidns", Token: strings.TrimSpace(in.APIToken), Secret: strings.TrimSpace(in.APISecret)}
|
||||
case "tencentcloud":
|
||||
return Credentials{Provider: "tencentcloud", Token: strings.TrimSpace(in.APIToken), Secret: strings.TrimSpace(in.APISecret)}
|
||||
case "volcengine":
|
||||
return Credentials{Provider: "volcengine", Token: strings.TrimSpace(in.APIToken), Secret: strings.TrimSpace(in.APISecret)}
|
||||
default:
|
||||
return Credentials{Provider: "cloudflare", Token: strings.TrimSpace(in.APIToken)}
|
||||
}
|
||||
}
|
||||
|
||||
func (c Credentials) HasValues() bool {
|
||||
switch c.Provider {
|
||||
case "dnspod":
|
||||
return c.TokenID != "" && c.Token != ""
|
||||
case "alidns", "tencentcloud", "volcengine":
|
||||
return c.Token != "" && c.Secret != ""
|
||||
default:
|
||||
return c.Token != ""
|
||||
}
|
||||
}
|
||||
|
||||
func (c Credentials) Validate(provider string) error {
|
||||
switch provider {
|
||||
case "dnspod":
|
||||
if c.TokenID == "" || c.Token == "" {
|
||||
return fmt.Errorf("请填写 DNSPod ID 和 Token")
|
||||
}
|
||||
case "alidns":
|
||||
if c.Token == "" || c.Secret == "" {
|
||||
return fmt.Errorf("请填写阿里云 AccessKey ID 和 Secret")
|
||||
}
|
||||
case "tencentcloud":
|
||||
if c.Token == "" || c.Secret == "" {
|
||||
return fmt.Errorf("请填写腾讯云 SecretId 和 SecretKey")
|
||||
}
|
||||
case "volcengine":
|
||||
if c.Token == "" || c.Secret == "" {
|
||||
return fmt.Errorf("请填写火山引擎 AccessKey ID 和 Secret Access Key")
|
||||
}
|
||||
default:
|
||||
if c.Token == "" {
|
||||
return fmt.Errorf("请填写 API Token")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c Credentials) LoginToken() string {
|
||||
return c.TokenID + "," + c.Token
|
||||
}
|
||||
|
||||
func (c Credentials) Marshal() ([]byte, error) {
|
||||
return json.Marshal(c)
|
||||
}
|
||||
|
||||
func ParseCredentials(raw string) (Credentials, error) {
|
||||
raw = strings.TrimSpace(raw)
|
||||
if raw == "" {
|
||||
return Credentials{}, fmt.Errorf("凭证未配置")
|
||||
}
|
||||
if strings.HasPrefix(raw, "{") {
|
||||
var cred Credentials
|
||||
if err := json.Unmarshal([]byte(raw), &cred); err != nil {
|
||||
return Credentials{}, err
|
||||
}
|
||||
if cred.Provider == "" {
|
||||
cred.Provider = "cloudflare"
|
||||
}
|
||||
return cred, nil
|
||||
}
|
||||
return Credentials{Provider: "cloudflare", Token: raw}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user