Skip to content

Commit

Permalink
新增物理地址、绑定域名快捷修改
Browse files Browse the repository at this point in the history
  • Loading branch information
1944876825 committed Aug 22, 2024
1 parent 3414820 commit 99b26fc
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 18 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## Appto 后端本地化程序

教程地址:https://blog.prizen.cn/423.html

### v0.0.2
- 新增:mac地址修改
- 新增:绑定域名修改

### v0.0.1
- 本地化授权
- 自动获取云端配置信息
1 change: 1 addition & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ type Model struct {
Endata string `yaml:"data"`
EnMac string `yaml:"mac"`
Features []string `yaml:"features"`
Domains []string `json:"domains"`
}

func Load() {
Expand Down
147 changes: 132 additions & 15 deletions utils/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,72 @@ package utils
import (
"appto_dl/config"
"bytes"
"crypto/md5"
"encoding/json"
"fmt"
"io"
"log"
"net"
"net/http"
"net/url"
"strings"
)

func GetInfo() {
getConfig()
getAbility()
getInput()
getAvailAbility()
fmt.Println("云端MacAddress是:", config.Conf.EnMac)
macAddress, err := getMACAddress()
if err != nil {
panic("获取本地mac地址失败" + err.Error())
}
fmt.Println("本机MacAddress是:", macAddress)
fmt.Printf("是否设置Mac地址(y/n):")
var zl string
if _, err := fmt.Scanln(&zl); err != nil {
panic(err)
}
if strings.ToLower(zl) == "y" {
fmt.Printf("请输入你要设置的MacAddress,32位:")
var zdyMac string
if _, err := fmt.Scanln(&zdyMac); err != nil {
panic(err)
}
zdyMac = strings.TrimSpace(zdyMac)
if zdyMac == "" {
zdyMac = macAddress
}
setMacAddress(zdyMac)
fmt.Println("设置成功")
}
getAbility()
GetDomains()
if len(config.Conf.Domains) < 1 {
fmt.Println("未获取到你绑定的域名")
} else {
fmt.Println("你当前绑定了以下域名")
for _, v := range config.Conf.Domains {
fmt.Println(v)
}
}
fmt.Printf("是否重新绑定(y/n):")
if _, err := fmt.Scanln(&zl); err != nil {
panic(err)
}
if strings.ToLower(zl) == "y" {
fmt.Println("请输入需要绑定的域名,#隔开")
var dm string
if _, err := fmt.Scanln(&dm); err != nil {
panic(err)
}
dms := strings.Split(dm, "#")
fmt.Printf("检测到%d个域名\n", len(dms))
setDomains(dms)
fmt.Println("设置成功")
}
config.Save()
}
func getConfig() {
func getInput() {
fmt.Printf("请输入运行的端口:")
_, err := fmt.Scanln(&config.Conf.Port)
if err != nil {
Expand All @@ -32,11 +82,15 @@ func getConfig() {
}

const (
base = "http://v3.appto.top"
abilityApi = base + "/addon/v1/ability"
availabilityApi = base + "/addon/v1/availability"
base = "http://v3.appto.top"
abilityApi = base + "/addon/v1/ability"
availabilityApi = base + "/addon/v1/availability"
setMacAddressApi = base + "/addon/v1/mac_address"
getDomainsApi = base + "/addon/v1/certificate/domains"
setDomainsApi = base + "/addon/v1/certificate/domains"
)

// 获取Ability 其中的data是一个加密信息,可能包含token、mac地址、插件授权信息等。
func getAbility() {
res, err := request(abilityApi, "GET", nil)
if err != nil {
Expand All @@ -45,13 +99,15 @@ func getAbility() {
var r BaseRes
err = json.Unmarshal(res, &r)
if err != nil {
panic(err)
log.Fatalln(err, string(res))
}
if r.Status != 0 {
panic(r)
}
config.Conf.Endata = r.Data
}

// 获取 AvailAbility
func getAvailAbility() {
res, err := request(availabilityApi, "GET", nil)
if err != nil {
Expand All @@ -60,33 +116,88 @@ func getAvailAbility() {
var r AvailAbilityRes
err = json.Unmarshal(res, &r)
if err != nil {
panic(err)
log.Fatalln(err, string(res))
}
if r.Status != 0 {
panic(r)
}
config.Conf.EnMac = r.Data.MacAddress
}

func GetDomains() {
res, err := request(availabilityApi, "GET", nil)
// 设置MacAddress
func setMacAddress(macAddress string) {
data := Json{
"mac_address": macAddress,
}
res, err := request(setMacAddressApi, "PUT", data)
if err != nil {
panic(err)
}
var r AvailAbilityRes
// fmt.Println("s", string(res))
var r BaseRes
err = json.Unmarshal(res, &r)
if err != nil {
log.Fatalln(err, string(res))
}
if r.Status != 0 {
panic(r)
}
}

// 设置绑定域名
func setDomains(dms []string) {
data := Json{
"domains": dms,
}
res, err := request(setDomainsApi, "PUT", data)
if err != nil {
panic(err)
}
var r BaseRes
err = json.Unmarshal(res, &r)
if err != nil {
log.Fatalln(err, string(res))
}
if r.Status != 0 {
panic(r)
}
config.Conf.EnMac = r.Data.MacAddress
}

// getMACAddress 尝试获取本机的MAC地址
func getMACAddress() (string, error) {
ifaces, err := net.Interfaces()
if err != nil {
return "", err
}
for _, iface := range ifaces {
if iface.Flags&net.FlagUp != 0 && iface.Flags&net.FlagLoopback == 0 {
return md5Encode(iface.HardwareAddr.String()), nil
}
}
return "", fmt.Errorf("获取不到Mac地址")
}

// 获取域名列表
func GetDomains() {
res, err := request(getDomainsApi, "GET", nil)
if err != nil {
panic(err)
}
var r DomainsRes
err = json.Unmarshal(res, &r)
if err != nil {
log.Fatalln(err, string(res))
}
if r.Status != 0 {
panic(r)
}
config.Conf.Domains = r.Data.Domains
}

var ProxyUrl *url.URL

func SetProxy(p string) {
// setProxy 设置http代理
func setProxy(p string) {
var err error
if strings.Contains(p, "http") == false {
p = "http://" + p
Expand Down Expand Up @@ -114,9 +225,10 @@ func request(url, method string, data interface{}) ([]byte, error) {
return nil, err
}
req.Header.Set("Access-Token", config.Conf.Token)
// SetProxy("127.0.0.1:7890")
req.Header.Set("Content-Type", "application/json")
// setProxy("127.0.0.1:7890")
// transport := &http.Transport{
// Proxy: http.ProxyURL(ProxyUrl),
// Proxy: http.ProxyURL(ProxyUrl),
// }
client := http.Client{
// Transport: transport,
Expand All @@ -133,3 +245,8 @@ func request(url, method string, data interface{}) ([]byte, error) {
}
return res, nil
}
func md5Encode(text string) string {
hash := md5.New()
hash.Write([]byte(text))
return fmt.Sprintf("%x", hash.Sum(nil))
}
14 changes: 11 additions & 3 deletions utils/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package utils
type Json map[string]interface{}

type BaseRes struct {
Status int `json:""`
Msg string
Data string
Status int `json:"status"`
Msg string `json:"msg"`
Data string `json:"data"`
}

type AvailAbilityRes struct {
Expand All @@ -17,3 +17,11 @@ type AvailAbilityRes struct {
Msg string `json:"msg"`
Status int `json:"status"`
}

type DomainsRes struct {
Data struct {
Domains []string `json:"domains"`
} `json:"data"`
Msg string `json:"msg"`
Status int `json:"status"`
}

0 comments on commit 99b26fc

Please sign in to comment.