From f33d32c228834722de82810903d6259f10483798 Mon Sep 17 00:00:00 2001 From: Stille Date: Fri, 11 Jun 2021 14:30:59 +0800 Subject: [PATCH] Create ddns-aliyun --- .github/workflows/ddns-aliyun.yml | 42 ++ ddns-aliyun/.github/workflows/build.yaml | 83 ++++ ddns-aliyun/.gitignore | 33 ++ ddns-aliyun/Dockerfile | 32 ++ ddns-aliyun/LICENSE | 21 + ddns-aliyun/Makefile | 43 ++ ddns-aliyun/README.md | 36 ++ ddns-aliyun/alidns/AddDomain.go | 41 ++ ddns-aliyun/alidns/AddDomainGroup.go | 32 ++ ddns-aliyun/alidns/AddDomainGroup_test.go | 25 ++ ddns-aliyun/alidns/AddDomainRecord.go | 38 ++ ddns-aliyun/alidns/AddDomainRecord_test.go | 27 ++ ddns-aliyun/alidns/AddDomain_test.go | 24 ++ ddns-aliyun/alidns/ChangeDomainGroup.go | 33 ++ ddns-aliyun/alidns/ChangeDomainGroup_test.go | 36 ++ ddns-aliyun/alidns/DeleteDomain.go | 31 ++ ddns-aliyun/alidns/DeleteDomainGroup.go | 31 ++ ddns-aliyun/alidns/DeleteDomainGroup_test.go | 23 + ddns-aliyun/alidns/DeleteDomainRecord.go | 27 ++ ddns-aliyun/alidns/DeleteDomainRecord_test.go | 29 ++ ddns-aliyun/alidns/DeleteDomain_test.go | 23 + ddns-aliyun/alidns/DeleteSubDomainRecords.go | 32 ++ .../alidns/DeleteSubDomainRecords_test.go | 30 ++ ddns-aliyun/alidns/DescribeDomainGroups.go | 42 ++ .../alidns/DescribeDomainGroups_test.go | 15 + ddns-aliyun/alidns/DescribeDomainInfo.go | 46 ++ ddns-aliyun/alidns/DescribeDomainInfo_test.go | 17 + .../alidns/DescribeDomainRecordInfo.go | 26 ++ .../alidns/DescribeDomainRecordInfoNew.go | 38 ++ .../DescribeDomainRecordInfoNew_test.go | 30 ++ .../alidns/DescribeDomainRecordInfo_test.go | 30 ++ ddns-aliyun/alidns/DescribeDomainRecords.go | 36 ++ .../alidns/DescribeDomainRecordsNew.go | 36 ++ .../alidns/DescribeDomainRecordsNew_test.go | 21 + .../alidns/DescribeDomainRecords_test.go | 21 + ddns-aliyun/alidns/DescribeDomains.go | 38 ++ ddns-aliyun/alidns/DescribeDomains_test.go | 17 + .../alidns/DescribeSubDomainRecords.go | 37 ++ .../alidns/DescribeSubDomainRecords_test.go | 20 + ddns-aliyun/alidns/GetMainDomainName.go | 29 ++ ddns-aliyun/alidns/GetMainDomainName_test.go | 20 + ddns-aliyun/alidns/UpdateDomainGroup.go | 33 ++ ddns-aliyun/alidns/UpdateDomainGroup_test.go | 23 + ddns-aliyun/alidns/UpdateDomainRecord.go | 35 ++ ddns-aliyun/alidns/UpdateDomainRecord_test.go | 43 ++ ddns-aliyun/alidns/client.go | 50 +++ ddns-aliyun/alidns/config_test.go | 37 ++ ddns-aliyun/alidns/record.go | 28 ++ ddns-aliyun/build-release.sh | 59 +++ ddns-aliyun/example/Synology_Docker.png | Bin 0 -> 212750 bytes ddns-aliyun/go.mod | 11 + ddns-aliyun/go.sum | 102 +++++ ddns-aliyun/main.go | 400 ++++++++++++++++++ ddns-aliyun/utils.go | 68 +++ ddns-aliyun/utils_test.go | 111 +++++ 55 files changed, 2291 insertions(+) create mode 100644 .github/workflows/ddns-aliyun.yml create mode 100644 ddns-aliyun/.github/workflows/build.yaml create mode 100644 ddns-aliyun/.gitignore create mode 100644 ddns-aliyun/Dockerfile create mode 100644 ddns-aliyun/LICENSE create mode 100644 ddns-aliyun/Makefile create mode 100644 ddns-aliyun/README.md create mode 100644 ddns-aliyun/alidns/AddDomain.go create mode 100644 ddns-aliyun/alidns/AddDomainGroup.go create mode 100644 ddns-aliyun/alidns/AddDomainGroup_test.go create mode 100644 ddns-aliyun/alidns/AddDomainRecord.go create mode 100644 ddns-aliyun/alidns/AddDomainRecord_test.go create mode 100644 ddns-aliyun/alidns/AddDomain_test.go create mode 100644 ddns-aliyun/alidns/ChangeDomainGroup.go create mode 100644 ddns-aliyun/alidns/ChangeDomainGroup_test.go create mode 100644 ddns-aliyun/alidns/DeleteDomain.go create mode 100644 ddns-aliyun/alidns/DeleteDomainGroup.go create mode 100644 ddns-aliyun/alidns/DeleteDomainGroup_test.go create mode 100644 ddns-aliyun/alidns/DeleteDomainRecord.go create mode 100644 ddns-aliyun/alidns/DeleteDomainRecord_test.go create mode 100644 ddns-aliyun/alidns/DeleteDomain_test.go create mode 100644 ddns-aliyun/alidns/DeleteSubDomainRecords.go create mode 100644 ddns-aliyun/alidns/DeleteSubDomainRecords_test.go create mode 100644 ddns-aliyun/alidns/DescribeDomainGroups.go create mode 100644 ddns-aliyun/alidns/DescribeDomainGroups_test.go create mode 100644 ddns-aliyun/alidns/DescribeDomainInfo.go create mode 100644 ddns-aliyun/alidns/DescribeDomainInfo_test.go create mode 100644 ddns-aliyun/alidns/DescribeDomainRecordInfo.go create mode 100644 ddns-aliyun/alidns/DescribeDomainRecordInfoNew.go create mode 100644 ddns-aliyun/alidns/DescribeDomainRecordInfoNew_test.go create mode 100644 ddns-aliyun/alidns/DescribeDomainRecordInfo_test.go create mode 100644 ddns-aliyun/alidns/DescribeDomainRecords.go create mode 100644 ddns-aliyun/alidns/DescribeDomainRecordsNew.go create mode 100644 ddns-aliyun/alidns/DescribeDomainRecordsNew_test.go create mode 100644 ddns-aliyun/alidns/DescribeDomainRecords_test.go create mode 100644 ddns-aliyun/alidns/DescribeDomains.go create mode 100644 ddns-aliyun/alidns/DescribeDomains_test.go create mode 100644 ddns-aliyun/alidns/DescribeSubDomainRecords.go create mode 100644 ddns-aliyun/alidns/DescribeSubDomainRecords_test.go create mode 100644 ddns-aliyun/alidns/GetMainDomainName.go create mode 100644 ddns-aliyun/alidns/GetMainDomainName_test.go create mode 100644 ddns-aliyun/alidns/UpdateDomainGroup.go create mode 100644 ddns-aliyun/alidns/UpdateDomainGroup_test.go create mode 100644 ddns-aliyun/alidns/UpdateDomainRecord.go create mode 100644 ddns-aliyun/alidns/UpdateDomainRecord_test.go create mode 100644 ddns-aliyun/alidns/client.go create mode 100644 ddns-aliyun/alidns/config_test.go create mode 100644 ddns-aliyun/alidns/record.go create mode 100755 ddns-aliyun/build-release.sh create mode 100644 ddns-aliyun/example/Synology_Docker.png create mode 100644 ddns-aliyun/go.mod create mode 100644 ddns-aliyun/go.sum create mode 100644 ddns-aliyun/main.go create mode 100644 ddns-aliyun/utils.go create mode 100644 ddns-aliyun/utils_test.go diff --git a/.github/workflows/ddns-aliyun.yml b/.github/workflows/ddns-aliyun.yml new file mode 100644 index 0000000..301121c --- /dev/null +++ b/.github/workflows/ddns-aliyun.yml @@ -0,0 +1,42 @@ +name: "ddns-aliyun docker build" + +env: + PROJECT: ddns-aliyun + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set tag + id: tag + run: | + TAG=$(cat ${{ env.PROJECT }}/Dockerfile | awk 'NR==4 {print $3}') + echo "::set-env name=TAG::$TAG" + - name: Docker Hub login + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin + - name: Set up Docker Buildx + id: buildx + uses: crazy-max/ghaction-docker-buildx@v1 + with: + buildx-version: latest + - name: Build Dockerfile + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + run: | + docker buildx build \ + --platform=linux/amd64,linux/arm64 \ + --output "type=image,push=true" \ + --file ${{ env.PROJECT }}/Dockerfile ./${{ env.PROJECT }} \ + --tag $(echo "${DOCKER_USERNAME}" | tr '[:upper:]' '[:lower:]')/${{ env.PROJECT }}:latest \ + --tag $(echo "${DOCKER_USERNAME}" | tr '[:upper:]' '[:lower:]')/${{ env.PROJECT }}:${TAG} diff --git a/ddns-aliyun/.github/workflows/build.yaml b/ddns-aliyun/.github/workflows/build.yaml new file mode 100644 index 0000000..3737a67 --- /dev/null +++ b/ddns-aliyun/.github/workflows/build.yaml @@ -0,0 +1,83 @@ +name: Build + +"on": + "push": + "tags": + - "v*" + "branches": + - "*" + "pull_request": + +jobs: + build: + runs-on: ubuntu-latest + env: + GO111MODULE: "on" + steps: + - uses: actions/checkout@master + + - uses: actions/setup-go@v2 + with: + go-version: 1.16.4 + + - name: Prepare environment + run: |- + RELEASE_VERSION="${GITHUB_REF##*/}" + if [[ "${RELEASE_VERSION}" != v* ]]; then RELEASE_VERSION='dev'; fi + echo "RELEASE_VERSION=\"${RELEASE_VERSION}@${GITHUB_SHA:0:10}\"" | tee -a $GITHUB_ENV + go mod vendor + + # Test + - name: Unit Testing + run: go test . + + # Win + - run: GOOS=windows GOARCH=386 VERSION=${RELEASE_VERSION} make release + - run: GOOS=windows GOARCH=amd64 VERSION=${RELEASE_VERSION} make release + + # MacOS + - run: GOOS=darwin GOARCH=amd64 VERSION=${RELEASE_VERSION} make release + + # Linux X86/AMD64 + - run: GOOS=linux GOARCH=386 VERSION=${RELEASE_VERSION} make release + - run: GOOS=linux GOARCH=amd64 VERSION=${RELEASE_VERSION} make release + + # Linux ARM + - run: GOOS=linux GOARCH=arm GOARM=6 VERSION=${RELEASE_VERSION} make release + - run: GOOS=linux GOARCH=arm64 VERSION=${RELEASE_VERSION} make release + + # Linux MIPS/MIPSLE + - run: GOOS=linux GOARCH=mips GOMIPS=softfloat VERSION=${RELEASE_VERSION} make release + - run: GOOS=linux GOARCH=mipsle GOMIPS=softfloat VERSION=${RELEASE_VERSION} make release + + # FreeBSD X86 + - run: GOOS=freebsd GOARCH=386 VERSION=${RELEASE_VERSION} make release + - run: GOOS=freebsd GOARCH=amd64 VERSION=${RELEASE_VERSION} make release + + # FreeBSD ARM/ARM64 + - run: GOOS=freebsd GOARCH=arm GOARM=6 VERSION=${RELEASE_VERSION} make release + - run: GOOS=freebsd GOARCH=arm64 VERSION=${RELEASE_VERSION} make release + + - run: ls -l build/aliddns-* + + - name: Create release + if: startsWith(github.ref, 'refs/tags/v') + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: false + prerelease: false + + - name: Upload + if: startsWith(github.ref, 'refs/tags/v') + uses: xresloader/upload-to-github-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + file: "build/aliddns-*.tar.gz;build/aliddns-*.zip" + tags: true + draft: false diff --git a/ddns-aliyun/.gitignore b/ddns-aliyun/.gitignore new file mode 100644 index 0000000..2e5afd5 --- /dev/null +++ b/ddns-aliyun/.gitignore @@ -0,0 +1,33 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test +.vscode/ +release/ +vendor/ + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof +*.upx + +build/ +debug +aliyun-ddns-cli +aliddns* diff --git a/ddns-aliyun/Dockerfile b/ddns-aliyun/Dockerfile new file mode 100644 index 0000000..d92946b --- /dev/null +++ b/ddns-aliyun/Dockerfile @@ -0,0 +1,32 @@ +FROM golang:alpine as builder +ENV CGO_ENABLED=0 \ + GO111MODULE=on +ENV VERSION 2021-06-11 + +RUN apk add --update git curl +ADD . $GOPATH/src/github.com/honwen/aliyun-ddns-cli +RUN set -ex \ + && cd $GOPATH/src/github.com/honwen/aliyun-ddns-cli \ + && go build -ldflags "-X main.VersionString=$(curl -sSL https://api.github.com/repos/honwen/aliyun-ddns-cli/commits/master | \ + sed -n '{/sha/p; /date/p;}' | sed 's/.* \"//g' | cut -c1-10 | tr '[:lower:]' '[:upper:]' | sed 'N;s/\n/@/g' | head -1)" . \ + && mv aliyun-ddns-cli $GOPATH/bin/ + + +FROM alpine +LABEL MAINTAINER honwen + +# /usr/bin/aliyun-ddns-cli +COPY --from=builder /go/bin /usr/bin + +ENV AKID=1234567890 \ + AKSCT=abcdefghijklmn \ + DOMAIN=ddns.example.win \ + IPAPI=[IPAPI-GROUP] \ + REDO=0 + +CMD aliyun-ddns-cli \ + --ipapi ${IPAPI} \ + ${IPV6:+-6} \ + auto-update \ + --domain ${DOMAIN} \ + --redo ${REDO} diff --git a/ddns-aliyun/LICENSE b/ddns-aliyun/LICENSE new file mode 100644 index 0000000..346ea2f --- /dev/null +++ b/ddns-aliyun/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016-2020 honwen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ddns-aliyun/Makefile b/ddns-aliyun/Makefile new file mode 100644 index 0000000..0269e51 --- /dev/null +++ b/ddns-aliyun/Makefile @@ -0,0 +1,43 @@ +NAME=aliddns +BASE_BUILDDIR=build +BUILDNAME=$(GOOS)-$(GOARCH)$(GOARM) +BUILDDIR=$(BASE_BUILDDIR)/$(BUILDNAME) +VERSION?=dev + +ifeq ($(GOOS),windows) + ext=.exe + archiveCmd=zip -9 -r $(NAME)-$(BUILDNAME)-$(VERSION).zip $(BUILDNAME) +else + ext= + archiveCmd=tar czpvf $(NAME)-$(BUILDNAME)-$(VERSION).tar.gz $(BUILDNAME) +endif + +.PHONY: default +default: build + +build: clean test + go build -mod=vendor + +release: check-env-release + mkdir -p $(BUILDDIR) + cp LICENSE $(BUILDDIR)/ + cp README.md $(BUILDDIR)/ + CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build -mod=vendor -ldflags "-s -w -X main.VersionString=$(VERSION)" -o $(BUILDDIR)/$(NAME)$(ext) + cd $(BASE_BUILDDIR) ; $(archiveCmd) + +test: + go test -race -v -bench=. ./... + +clean: + go clean + rm -rf $(BASE_BUILDDIR) + +check-env-release: + @ if [ "$(GOOS)" = "" ]; then \ + echo "Environment variable GOOS not set"; \ + exit 1; \ + fi + @ if [ "$(GOARCH)" = "" ]; then \ + echo "Environment variable GOOS not set"; \ + exit 1; \ + fi diff --git a/ddns-aliyun/README.md b/ddns-aliyun/README.md new file mode 100644 index 0000000..aa2d9cb --- /dev/null +++ b/ddns-aliyun/README.md @@ -0,0 +1,36 @@ +# ddns-aliyun + +GitHub [stilleshan/dockerfiles](https://github.com/stilleshan/dockerfiles) +Docker [stilleshan/ddns-aliyun](https://hub.docker.com/r/stilleshan/ddns-aliyun) +> *docker image support for X86 and ARM* + +## 使用 +### docker 启动 +```shell +docker run -d \ + -e "AKID=[ALIYUN's AccessKey-ID]" \ + -e "AKSCT=[ALIYUN's AccessKey-Secret]" \ + -e "DOMAIN=ddns.yourdomain.com" \ + -e "REDO=600" \ + stilleshan/ddns-aliyun +``` + +- AKID: 填写`AccessKeyID` +- AKSCT: 填写`AccessKeySecret` +- DOMAIN: 填写`ddns 域名` + +### 示例 +> 使用二级域名来作为 ddns 域名,例如以下示例使用 ddns.ioiox.com ,需要使用的正式域名添加 CNAME 指向 ddns.ioiox.com 即可. +```shell +docker run -d \ + -e "AKID=kzazFUTW0uRIWWtk" \ + -e "AKSCT=kcbGxOVmc9PUpJWTBWNFNWWnNSbFJW" \ + -e "DOMAIN=ddns.ioiox.com" \ + -e "REDO=600" \ + stilleshan/ddns-aliyun +``` + +## 参考 +[群晖NAS网络服务 - docker 部署配置阿里云 DDNS 动态域名解析](https://www.ioiox.com/archives/29.html) +更多请参考原始仓库 [honwen/aliyun-ddns-cli](https://github.com/honwen/aliyun-ddns-cli) + diff --git a/ddns-aliyun/alidns/AddDomain.go b/ddns-aliyun/alidns/AddDomain.go new file mode 100644 index 0000000..2383865 --- /dev/null +++ b/ddns-aliyun/alidns/AddDomain.go @@ -0,0 +1,41 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type AddDomainArgs struct { + DomainName string + + //optional + GroupId string +} + +type AddDomainResponse struct { + common.Response + DomainId string + DomainName string + GroupId string + GroupName string + PunyCode string + DnsServers struct { + DnsServer []string + } +} + +// AddDomain +// +// You can read doc at https://help.aliyun.com/document_detail/29749.html?spm=5176.doc29805.6.592.6LMqlG +func (client *Client) AddDomain(args *AddDomainArgs) (response *AddDomainResponse, err error) { + action := "AddDomain" + response = &AddDomainResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + log.Printf("%s error, %v", action, err) + return response, err + } +} diff --git a/ddns-aliyun/alidns/AddDomainGroup.go b/ddns-aliyun/alidns/AddDomainGroup.go new file mode 100644 index 0000000..4537350 --- /dev/null +++ b/ddns-aliyun/alidns/AddDomainGroup.go @@ -0,0 +1,32 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type AddDomainGroupArgs struct { + GroupName string +} + +type AddDomainGroupResponse struct { + common.Response + GroupId string + GroupName string +} + +// AddDomainGroup +// +// You can read doc at https://help.aliyun.com/document_detail/29762.html?spm=5176.doc29749.6.604.PJtwG1 +func (client *Client) AddDomainGroup(args *AddDomainGroupArgs) (response *AddDomainGroupResponse, err error) { + action := "AddDomainGroup" + response = &AddDomainGroupResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + log.Printf("%s error, %v", action, err) + return response, err + } +} diff --git a/ddns-aliyun/alidns/AddDomainGroup_test.go b/ddns-aliyun/alidns/AddDomainGroup_test.go new file mode 100644 index 0000000..b6ee131 --- /dev/null +++ b/ddns-aliyun/alidns/AddDomainGroup_test.go @@ -0,0 +1,25 @@ +package dns + +import ( + "testing" +) + +func TestAddDomainGroup(t *testing.T) { + client := NewTestClientNew() + args := AddDomainGroupArgs{ + GroupName: TestDomainGroupName, + } + + response, err := client.AddDomainGroup(&args) + if err == nil { + t.Logf("AddDomainGroup %s success, %v", TestDomainGroupName, response) + + deleteDomainGroupArgs := DeleteDomainGroupArgs{ + GroupId: response.GroupId, + } + client.DeleteDomainGroup(&deleteDomainGroupArgs) + + } else { + t.Errorf("Failed to AddDomainGroup, %v", err) + } +} diff --git a/ddns-aliyun/alidns/AddDomainRecord.go b/ddns-aliyun/alidns/AddDomainRecord.go new file mode 100644 index 0000000..caed84b --- /dev/null +++ b/ddns-aliyun/alidns/AddDomainRecord.go @@ -0,0 +1,38 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type AddDomainRecordArgs struct { + DomainName string + RR string + Type string + Value string + + //optional + Line string +} + +type AddDomainRecordResponse struct { + common.Response + InstanceId string + RecordId string +} + +// AddDomainRecord +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&AddDomainRecord +func (client *Client) AddDomainRecord(args *AddDomainRecordArgs) (response *AddDomainRecordResponse, err error) { + action := "AddDomainRecord" + response = &AddDomainRecordResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + log.Printf("%s error, %v", action, err) + return response, err + } +} diff --git a/ddns-aliyun/alidns/AddDomainRecord_test.go b/ddns-aliyun/alidns/AddDomainRecord_test.go new file mode 100644 index 0000000..e8e6c5b --- /dev/null +++ b/ddns-aliyun/alidns/AddDomainRecord_test.go @@ -0,0 +1,27 @@ +package dns + +import ( + "testing" +) + +func TestAddDomainRecord(t *testing.T) { + client := NewTestClient() + addDomainRecordArgs := AddDomainRecordArgs{ + DomainName: TestDomainName, + RR: "testaddrecord", + Type: ARecord, + Value: "8.8.8.8", + } + response, err := client.AddDomainRecord(&addDomainRecordArgs) + if err == nil { + t.Logf("AddDomainRecord: testaddr for domain: %s Success, %v", + TestDomainName, response) + + deleteDomainRecordArgs := DeleteDomainRecordArgs{ + RecordId: response.RecordId, + } + client.DeleteDomainRecord(&deleteDomainRecordArgs) + } else { + t.Errorf("Failed to AddDomainRecord: testaddr for domain: %s", TestDomainName) + } +} diff --git a/ddns-aliyun/alidns/AddDomain_test.go b/ddns-aliyun/alidns/AddDomain_test.go new file mode 100644 index 0000000..70b2a0f --- /dev/null +++ b/ddns-aliyun/alidns/AddDomain_test.go @@ -0,0 +1,24 @@ +package dns + +import ( + "testing" +) + +func TestAddDomain(t *testing.T) { + client := NewTestClientNew() + args := AddDomainArgs{ + DomainName: TestDomainName, + } + + if res, err := client.AddDomain(&args); err == nil { + t.Logf("AddDomain %s success, %v", TestDomainName, res) + + deleteDomainArgs := DeleteDomainArgs{ + DomainName: TestDomainName, + } + client.DeleteDomain(&deleteDomainArgs) + + } else { + t.Errorf("Failed to AddDomain, %v", err) + } +} diff --git a/ddns-aliyun/alidns/ChangeDomainGroup.go b/ddns-aliyun/alidns/ChangeDomainGroup.go new file mode 100644 index 0000000..a7aea26 --- /dev/null +++ b/ddns-aliyun/alidns/ChangeDomainGroup.go @@ -0,0 +1,33 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type ChangeDomainGroupArgs struct { + DomainName string + GroupId string +} + +type ChangeDomainGroupResponse struct { + common.Response + GroupId string + GroupName string +} + +// ChangeDomainGroup +// +// You can read doc at https://help.aliyun.com/document_detail/29765.html?spm=5176.doc29764.6.607.WUJQgE +func (client *Client) ChangeDomainGroup(args *ChangeDomainGroupArgs) (response *ChangeDomainGroupResponse, err error) { + action := "ChangeDomainGroup" + response = &ChangeDomainGroupResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + log.Printf("%s error, %v", action, err) + return response, err + } +} diff --git a/ddns-aliyun/alidns/ChangeDomainGroup_test.go b/ddns-aliyun/alidns/ChangeDomainGroup_test.go new file mode 100644 index 0000000..05d316f --- /dev/null +++ b/ddns-aliyun/alidns/ChangeDomainGroup_test.go @@ -0,0 +1,36 @@ +package dns + +import "testing" + +func TestChangeDomainGroup(t *testing.T) { + client := NewTestClientNew() + + // create origin group + addGroupArgs := AddDomainGroupArgs{ + GroupName: TestDomainGroupName, + } + addGroupRes, _ := client.AddDomainGroup(&addGroupArgs) + + // add domain to origin group + addDomainArgs := AddDomainArgs{ + DomainName: TestDomainName, + GroupId: addGroupRes.GroupId, + } + addDomainRes, _ := client.AddDomain(&addDomainArgs) + + // create new group + addGroupArgs.GroupName = TestChanegGroupName + addGroupRes, _ = client.AddDomainGroup(&addGroupArgs) + + // change to new group + changeArgs := ChangeDomainGroupArgs{ + DomainName: addDomainRes.DomainName, + GroupId: addGroupRes.GroupId, + } + _, err := client.ChangeDomainGroup(&changeArgs) + if err == nil { + t.Logf("ChangeDomainGroup success") + } else { + t.Errorf("Failed to ChangeDomainGroup, %v", err) + } +} diff --git a/ddns-aliyun/alidns/DeleteDomain.go b/ddns-aliyun/alidns/DeleteDomain.go new file mode 100644 index 0000000..03d9d58 --- /dev/null +++ b/ddns-aliyun/alidns/DeleteDomain.go @@ -0,0 +1,31 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type DeleteDomainArgs struct { + DomainName string +} + +type DeleteDomainResponse struct { + common.Response + DomainName string +} + +// DeleteDomain +// +// You can read doc at https://help.aliyun.com/document_detail/29750.html?spm=5176.doc29766.6.593.eELaZ7 +func (client *Client) DeleteDomain(args *DeleteDomainArgs) (response *DeleteDomainResponse, err error) { + action := "DeleteDomain" + response = &DeleteDomainResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + log.Printf("%s error, %v", action, err) + return response, err + } +} diff --git a/ddns-aliyun/alidns/DeleteDomainGroup.go b/ddns-aliyun/alidns/DeleteDomainGroup.go new file mode 100644 index 0000000..be593e1 --- /dev/null +++ b/ddns-aliyun/alidns/DeleteDomainGroup.go @@ -0,0 +1,31 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type DeleteDomainGroupArgs struct { + GroupId string +} + +type DeleteDomainGroupResponse struct { + common.Response + GroupName string +} + +// DeleteDomainGroup +// +// You can read doc at https://help.aliyun.com/document_detail/29764.html?spm=5176.doc29763.6.606.Vm3FyC +func (client *Client) DeleteDomainGroup(args *DeleteDomainGroupArgs) (response *DeleteDomainGroupResponse, err error) { + action := "DeleteDomainGroup" + response = &DeleteDomainGroupResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + log.Printf("%s error, %v", action, err) + return response, err + } +} diff --git a/ddns-aliyun/alidns/DeleteDomainGroup_test.go b/ddns-aliyun/alidns/DeleteDomainGroup_test.go new file mode 100644 index 0000000..f8ecb63 --- /dev/null +++ b/ddns-aliyun/alidns/DeleteDomainGroup_test.go @@ -0,0 +1,23 @@ +package dns + +import ( + "testing" +) + +func TestDeleteDomainGroup(t *testing.T) { + client := NewTestClientNew() + args := AddDomainGroupArgs{ + GroupName: TestDomainGroupName, + } + res, _ := client.AddDomainGroup(&args) + + deleteDomainGroupArgs := DeleteDomainGroupArgs{ + GroupId: res.GroupId, + } + response, err := client.DeleteDomainGroup(&deleteDomainGroupArgs) + if err == nil { + t.Logf("DeleteDomainGroup %s success, %v", TestDomainGroupName, response) + } else { + t.Errorf("Failed to DeleteDomainGroup, %v", err) + } +} diff --git a/ddns-aliyun/alidns/DeleteDomainRecord.go b/ddns-aliyun/alidns/DeleteDomainRecord.go new file mode 100644 index 0000000..a80acdb --- /dev/null +++ b/ddns-aliyun/alidns/DeleteDomainRecord.go @@ -0,0 +1,27 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +type DeleteDomainRecordArgs struct { + RecordId string +} + +type DeleteDomainRecordResponse struct { + common.Response + InstanceId string + RecordId string +} + +// DeleteDomainRecord +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&DeleteDomainRecord +func (client *Client) DeleteDomainRecord(args *DeleteDomainRecordArgs) (response *DeleteDomainRecordResponse, err error) { + action := "DeleteDomainRecord" + response = &DeleteDomainRecordResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/DeleteDomainRecord_test.go b/ddns-aliyun/alidns/DeleteDomainRecord_test.go new file mode 100644 index 0000000..e6d2e3f --- /dev/null +++ b/ddns-aliyun/alidns/DeleteDomainRecord_test.go @@ -0,0 +1,29 @@ +package dns + +import ( + "testing" +) + +func TestDeleteDomainRecord(t *testing.T) { + //prepare + client := NewTestClient() + addDomainRecordArgs := AddDomainRecordArgs{ + DomainName: TestDomainName, + RR: "testdeleterecordid", + Type: ARecord, + Value: "8.8.8.8", + } + + addResponse, err := client.AddDomainRecord(&addDomainRecordArgs) + + //test delete record + deleteDomainRecordArgs := DeleteDomainRecordArgs{ + RecordId: addResponse.RecordId, + } + deleteResponse, err := client.DeleteDomainRecord(&deleteDomainRecordArgs) + if err == nil { + t.Logf("DeleteDomainRecord: %v", deleteResponse) + } else { + t.Errorf("Failed to DeleteDomainRecord: %s", deleteDomainRecordArgs.RecordId) + } +} diff --git a/ddns-aliyun/alidns/DeleteDomain_test.go b/ddns-aliyun/alidns/DeleteDomain_test.go new file mode 100644 index 0000000..5c99f6d --- /dev/null +++ b/ddns-aliyun/alidns/DeleteDomain_test.go @@ -0,0 +1,23 @@ +package dns + +import ( + "testing" +) + +func TestDeleteDomain(t *testing.T) { + client := NewTestClientNew() + args := AddDomainArgs{ + DomainName: TestDomainName, + } + client.AddDomain(&args) + + deleteDomainArgs := DeleteDomainArgs{ + DomainName: TestDomainName, + } + response, err := client.DeleteDomain(&deleteDomainArgs) + if err == nil { + t.Logf("DeleteDomain %s success, %v", TestDomainName, response) + } else { + t.Errorf("Failed to DeleteDomain, %v", err) + } +} diff --git a/ddns-aliyun/alidns/DeleteSubDomainRecords.go b/ddns-aliyun/alidns/DeleteSubDomainRecords.go new file mode 100644 index 0000000..4ff4c05 --- /dev/null +++ b/ddns-aliyun/alidns/DeleteSubDomainRecords.go @@ -0,0 +1,32 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +type DeleteSubDomainRecordsArgs struct { + DomainName string + RR string + + //optional + Type string +} + +type DeleteSubDomainRecordsResponse struct { + common.Response + InstanceId string + RR string + // TotalCount int32 +} + +// DeleteSubDomainRecords +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&DeleteSubDomainRecords +func (client *Client) DeleteSubDomainRecords(args *DeleteSubDomainRecordsArgs) (response *DeleteSubDomainRecordsResponse, err error) { + action := "DeleteSubDomainRecords" + response = &DeleteSubDomainRecordsResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/DeleteSubDomainRecords_test.go b/ddns-aliyun/alidns/DeleteSubDomainRecords_test.go new file mode 100644 index 0000000..d21eacf --- /dev/null +++ b/ddns-aliyun/alidns/DeleteSubDomainRecords_test.go @@ -0,0 +1,30 @@ +package dns + +import ( + "testing" +) + +func TestDeleteSubDomainRecords(t *testing.T) { + //prepare + client := NewTestClient() + addDomainRecordArgs := AddDomainRecordArgs{ + DomainName: TestDomainName, + RR: "testdeletesubdomainrecords", + Type: ARecord, + Value: "8.8.8.8", + } + + client.AddDomainRecord(&addDomainRecordArgs) + + //test delete subdomain + deleteDomainRecordArgs := DeleteSubDomainRecordsArgs{ + DomainName: TestDomainName, + RR: "testdeletesubdomainrecords", + } + deleteResponse, err := client.DeleteSubDomainRecords(&deleteDomainRecordArgs) + if err == nil { + t.Logf("DeleteDomainRecord: %v", deleteResponse) + } else { + t.Errorf("Failed to DeleteSubDomainRecords: %s", deleteDomainRecordArgs.RR) + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainGroups.go b/ddns-aliyun/alidns/DescribeDomainGroups.go new file mode 100644 index 0000000..797b354 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainGroups.go @@ -0,0 +1,42 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type DomainGroupType struct { + GroupId string + GroupName string +} + +type DescribeDomainGroupsArgs struct { + //optional + common.Pagination + KeyWord string +} + +type DescribeDomainGroupsResponse struct { + response common.Response + common.PaginationResult + DomainGroups struct { + DomainGroup []DomainGroupType + } +} + +// DescribeDomainGroups +// +// You can read doc at https://help.aliyun.com/document_detail/29766.html?spm=5176.doc29765.6.608.qcQr2R +func (client *Client) DescribeDomainGroups(args *DescribeDomainGroupsArgs) (groups []DomainGroupType, err error) { + action := "DescribeDomainGroups" + response := &DescribeDomainGroupsResponse{} + err = client.Invoke(action, args, response) + + if err != nil { + log.Printf("%s error, %v", action, err) + return nil, err + } + + return response.DomainGroups.DomainGroup, nil +} diff --git a/ddns-aliyun/alidns/DescribeDomainGroups_test.go b/ddns-aliyun/alidns/DescribeDomainGroups_test.go new file mode 100644 index 0000000..3e06a62 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainGroups_test.go @@ -0,0 +1,15 @@ +package dns + +import "testing" + +func TestDescribeDomainGroups(t *testing.T) { + client := NewTestClientNew() + describeArgs := DescribeDomainGroupsArgs{} + + _, err := client.DescribeDomainGroups(&describeArgs) + if err == nil { + t.Logf("DescribeDomainGroups success") + } else { + t.Errorf("Failed to DescribeDomainGroups: %v", err) + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainInfo.go b/ddns-aliyun/alidns/DescribeDomainInfo.go new file mode 100644 index 0000000..b88cd91 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainInfo.go @@ -0,0 +1,46 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type DomainType struct { + DomainId string + DomainName string + AliDomain bool + GroupId string + GroupName string + InstanceId string + VersionCode string + PunyCode string + DnsServers struct { + DnsServer []string + } +} + +type DescribeDomainInfoArgs struct { + DomainName string +} + +type DescribeDomainInfoResponse struct { + response common.Response + DomainType +} + +// DescribeDomainInfo +// +// You can read doc at https://help.aliyun.com/document_detail/29752.html?spm=5176.doc29751.6.595.VJM3Gy +func (client *Client) DescribeDomainInfo(args *DescribeDomainInfoArgs) (domain DomainType, err error) { + action := "DescribeDomainInfo" + response := &DescribeDomainInfoResponse{} + err = client.Invoke(action, args, response) + + if err != nil { + log.Printf("%s error, %v", action, err) + return DomainType{}, err + } + + return response.DomainType, nil +} diff --git a/ddns-aliyun/alidns/DescribeDomainInfo_test.go b/ddns-aliyun/alidns/DescribeDomainInfo_test.go new file mode 100644 index 0000000..86fe175 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainInfo_test.go @@ -0,0 +1,17 @@ +package dns + +import "testing" + +func TestDescribeDomainInfo(t *testing.T) { + client := NewTestClientNew() + describeArgs := DescribeDomainInfoArgs{ + DomainName: TestDomainName, + } + + _, err := client.DescribeDomainInfo(&describeArgs) + if err == nil { + t.Logf("DescribeDomainInfo success") + } else { + t.Errorf("Failed to DescribeDomainInfo: %v", err) + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainRecordInfo.go b/ddns-aliyun/alidns/DescribeDomainRecordInfo.go new file mode 100644 index 0000000..76c042e --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainRecordInfo.go @@ -0,0 +1,26 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +type DescribeDomainRecordInfoArgs struct { + RecordId string +} + +type DescribeDomainRecordInfoResponse struct { + common.Response + RecordType +} + +// DescribeDomainRecordInfo +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&DescribeDomainRecordInfo +func (client *Client) DescribeDomainRecordInfo(args *DescribeDomainRecordInfoArgs) (response *DescribeDomainRecordInfoResponse, err error) { + action := "DescribeDomainRecordInfo" + response = &DescribeDomainRecordInfoResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainRecordInfoNew.go b/ddns-aliyun/alidns/DescribeDomainRecordInfoNew.go new file mode 100644 index 0000000..8eed446 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainRecordInfoNew.go @@ -0,0 +1,38 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +// endpoint change to 'http://alidns.aliyuncs.com' then record ttl and priority change to string +type RecordTypeNew struct { + DomainName string + RecordId string + RR string + Type string + Value string + Line string + Status string + Locked bool +} + +type DescribeDomainRecordInfoNewArgs struct { + RecordId string +} + +type DescribeDomainRecordInfoNewResponse struct { + common.Response + RecordTypeNew +} + +// DescribeDomainRecordInformation +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&DescribeDomainRecordInfo +func (client *Client) DescribeDomainRecordInfoNew(args *DescribeDomainRecordInfoNewArgs) (response *DescribeDomainRecordInfoNewResponse, err error) { + action := "DescribeDomainRecordInfo" + response = &DescribeDomainRecordInfoNewResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainRecordInfoNew_test.go b/ddns-aliyun/alidns/DescribeDomainRecordInfoNew_test.go new file mode 100644 index 0000000..3d26ea2 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainRecordInfoNew_test.go @@ -0,0 +1,30 @@ +package dns + +import ( + "testing" +) + +func TestDescribeDomainRecordInfoNew(t *testing.T) { + //prepare + client := NewTestClientNew() + describeArgs := DescribeDomainRecordsNewArgs{ + DomainName: TestDomainName, + } + describeArgs.PageSize = 100 + + describeResponse, err := client.DescribeDomainRecordsNew(&describeArgs) + if err == nil { + record := describeResponse.DomainRecords.Record[0] + arg := DescribeDomainRecordInfoNewArgs{ + RecordId: record.RecordId, + } + response, err := client.DescribeDomainRecordInfoNew(&arg) + if err == nil { + t.Logf("DescribeDomainRecordInfo success: %v", response) + } else { + t.Errorf("Failed to DescribeDomainRecordInfo: %s", describeArgs.DomainName) + } + } else { + t.Errorf("Failed to DescribeDomainRecords: %s", describeArgs.DomainName) + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainRecordInfo_test.go b/ddns-aliyun/alidns/DescribeDomainRecordInfo_test.go new file mode 100644 index 0000000..4741fee --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainRecordInfo_test.go @@ -0,0 +1,30 @@ +package dns + +import ( + "testing" +) + +func TestDescribeDomainRecordInfo(t *testing.T) { + //prepare + client := NewTestClient() + describeArgs := DescribeDomainRecordsArgs{ + DomainName: TestDomainName, + } + describeArgs.PageSize = 100 + + describeResponse, err := client.DescribeDomainRecords(&describeArgs) + if err == nil { + record := describeResponse.DomainRecords.Record[0] + arg := DescribeDomainRecordInfoArgs{ + RecordId: record.RecordId, + } + response, err := client.DescribeDomainRecordInfo(&arg) + if err == nil { + t.Logf("DescribeDomainRecordInfo success: %v", response) + } else { + t.Errorf("Failed to DescribeDomainRecordInfo: %s", describeArgs.DomainName) + } + } else { + t.Errorf("Failed to DescribeDomainRecords: %s", describeArgs.DomainName) + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainRecords.go b/ddns-aliyun/alidns/DescribeDomainRecords.go new file mode 100644 index 0000000..81c97db --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainRecords.go @@ -0,0 +1,36 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +type DescribeDomainRecordsArgs struct { + DomainName string + + //optional + common.Pagination + RRKeyWord string + TypeKeyWord string + ValueKeyWord string +} + +type DescribeDomainRecordsResponse struct { + common.Response + common.PaginationResult + InstanceId string + DomainRecords struct { + Record []RecordType + } +} + +// DescribeDomainRecords +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&DescribeDomainRecords +func (client *Client) DescribeDomainRecords(args *DescribeDomainRecordsArgs) (response *DescribeDomainRecordsResponse, err error) { + action := "DescribeDomainRecords" + response = &DescribeDomainRecordsResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainRecordsNew.go b/ddns-aliyun/alidns/DescribeDomainRecordsNew.go new file mode 100644 index 0000000..f2f04d3 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainRecordsNew.go @@ -0,0 +1,36 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +type DescribeDomainRecordsNewArgs struct { + DomainName string + + //optional + common.Pagination + RRKeyWord string + TypeKeyWord string + ValueKeyWord string +} + +type DescribeDomainRecordsNewResponse struct { + common.Response + common.PaginationResult + InstanceId string + DomainRecords struct { + Record []RecordTypeNew + } +} + +// DescribeDomainRecordsNew +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&DescribeDomainRecords +func (client *Client) DescribeDomainRecordsNew(args *DescribeDomainRecordsNewArgs) (response *DescribeDomainRecordsNewResponse, err error) { + action := "DescribeDomainRecords" + response = &DescribeDomainRecordsNewResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainRecordsNew_test.go b/ddns-aliyun/alidns/DescribeDomainRecordsNew_test.go new file mode 100644 index 0000000..96818a0 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainRecordsNew_test.go @@ -0,0 +1,21 @@ +package dns + +import ( + "testing" +) + +func TestDescribeDomainRecordsNew(t *testing.T) { + //prepare + client := NewTestClientNew() + describeArgs := DescribeDomainRecordsNewArgs{ + DomainName: TestDomainName, + } + describeArgs.PageSize = 100 + + describeResponse, err := client.DescribeDomainRecordsNew(&describeArgs) + if err == nil { + t.Logf("DescribeDomainRecords success: TotalCount:%d ", describeResponse.TotalCount) + } else { + t.Errorf("Failed to DescribeDomainRecords: %s", describeArgs.DomainName) + } +} diff --git a/ddns-aliyun/alidns/DescribeDomainRecords_test.go b/ddns-aliyun/alidns/DescribeDomainRecords_test.go new file mode 100644 index 0000000..45e5a34 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomainRecords_test.go @@ -0,0 +1,21 @@ +package dns + +import ( + "testing" +) + +func TestDescribeDomainRecords(t *testing.T) { + //prepare + client := NewTestClient() + describeArgs := DescribeDomainRecordsArgs{ + DomainName: TestDomainName, + } + describeArgs.PageSize = 100 + + describeResponse, err := client.DescribeDomainRecords(&describeArgs) + if err == nil { + t.Logf("DescribeDomainRecords success: TotalCount:%d ", describeResponse.TotalCount) + } else { + t.Errorf("Failed to DescribeDomainRecords: %s", describeArgs.DomainName) + } +} diff --git a/ddns-aliyun/alidns/DescribeDomains.go b/ddns-aliyun/alidns/DescribeDomains.go new file mode 100644 index 0000000..41e1232 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomains.go @@ -0,0 +1,38 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type DescribeDomainsArgs struct { + // optional + common.Pagination + KeyWord string + GroupId string +} + +type DescribeDomainsResponse struct { + response common.Response + common.PaginationResult + Domains struct { + Domain []DomainType + } +} + +// DescribeDomains +// +// You can read doc at https://help.aliyun.com/document_detail/29751.html?spm=5176.doc29750.6.594.dvyRJV +func (client *Client) DescribeDomains(args *DescribeDomainsArgs) (domains []DomainType, err error) { + action := "DescribeDomains" + response := &DescribeDomainsResponse{} + err = client.Invoke(action, args, response) + + if err != nil { + log.Printf("%s error, %v", action, err) + return nil, err + } + + return response.Domains.Domain, err +} diff --git a/ddns-aliyun/alidns/DescribeDomains_test.go b/ddns-aliyun/alidns/DescribeDomains_test.go new file mode 100644 index 0000000..7a8a373 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeDomains_test.go @@ -0,0 +1,17 @@ +package dns + +import "testing" + +func TestDescribeDomains(t *testing.T) { + client := NewTestClientNew() + describeArgs := DescribeDomainInfoArgs{ + DomainName: TestDomainName, + } + + _, err := client.DescribeDomainInfo(&describeArgs) + if err == nil { + t.Logf("DescribeDomains success") + } else { + t.Errorf("Failed to DescribeDomains: %v", err) + } +} diff --git a/ddns-aliyun/alidns/DescribeSubDomainRecords.go b/ddns-aliyun/alidns/DescribeSubDomainRecords.go new file mode 100644 index 0000000..86a8e4d --- /dev/null +++ b/ddns-aliyun/alidns/DescribeSubDomainRecords.go @@ -0,0 +1,37 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +type DescribeSubDomainRecordsArgs struct { + SubDomain string + + //optional + PageNumber int32 + PageSize int32 + Type string +} + +type DescribeSubDomainRecordsResponse struct { + common.Response + InstanceId string + TotalCount int32 + PageNumber int32 + PageSize int32 + DomainRecords struct { + Record []RecordType + } +} + +// DescribeSubDomainRecords +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&DescribeSubDomainRecords +func (client *Client) DescribeSubDomainRecords(args *DescribeSubDomainRecordsArgs) (response *DescribeSubDomainRecordsResponse, err error) { + action := "DescribeSubDomainRecords" + response = &DescribeSubDomainRecordsResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/DescribeSubDomainRecords_test.go b/ddns-aliyun/alidns/DescribeSubDomainRecords_test.go new file mode 100644 index 0000000..c4cbf27 --- /dev/null +++ b/ddns-aliyun/alidns/DescribeSubDomainRecords_test.go @@ -0,0 +1,20 @@ +package dns + +import ( + "testing" +) + +func TestDescribeSubDomainRecords(t *testing.T) { + //prepare + client := NewTestClient() + describeArgs := DescribeSubDomainRecordsArgs{ + SubDomain: "go." + TestDomainName, + } + + describeResponse, err := client.DescribeSubDomainRecords(&describeArgs) + if err == nil { + t.Logf("DescribeSubDomainRecords success: %v ", describeResponse) + } else { + t.Errorf("Failed to DescribeSubDomainRecords: %s", describeArgs.SubDomain) + } +} diff --git a/ddns-aliyun/alidns/GetMainDomainName.go b/ddns-aliyun/alidns/GetMainDomainName.go new file mode 100644 index 0000000..5733c84 --- /dev/null +++ b/ddns-aliyun/alidns/GetMainDomainName.go @@ -0,0 +1,29 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +type GetMainDomainNameArgs struct { + InputString string +} + +type GetMainDomainNameResponse struct { + common.Response + InstanceId string + DomainName string + RR string + DomainLevel int32 +} + +// GetMainDomainName +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/domain-related&GetMainDomainName +func (client *Client) GetMainDomainName(args *GetMainDomainNameArgs) (response *GetMainDomainNameResponse, err error) { + action := "GetMainDomainName" + response = &GetMainDomainNameResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/GetMainDomainName_test.go b/ddns-aliyun/alidns/GetMainDomainName_test.go new file mode 100644 index 0000000..f35ba70 --- /dev/null +++ b/ddns-aliyun/alidns/GetMainDomainName_test.go @@ -0,0 +1,20 @@ +package dns + +import ( + "testing" +) + +func TestGetMainDomainName(t *testing.T) { + //prepare + client := NewTestClient() + args := GetMainDomainNameArgs{ + InputString: "go." + TestDomainName, + } + + resp, err := client.GetMainDomainName(&args) + if err == nil { + t.Logf("GetMainDomainName success: %v ", resp) + } else { + t.Errorf("Failed to GetMainDomainName: %s", args.InputString) + } +} diff --git a/ddns-aliyun/alidns/UpdateDomainGroup.go b/ddns-aliyun/alidns/UpdateDomainGroup.go new file mode 100644 index 0000000..2f76ebe --- /dev/null +++ b/ddns-aliyun/alidns/UpdateDomainGroup.go @@ -0,0 +1,33 @@ +package dns + +import ( + "log" + + "github.com/denverdino/aliyungo/common" +) + +type UpdateDomainGroupArgs struct { + GroupId string + GroupName string +} + +type UpdateDomainGroupResponse struct { + common.Response + GroupId string + GroupName string +} + +// UpdateDomainGroup +// +// You can read doc at https://help.aliyun.com/document_detail/29763.html?spm=5176.doc29762.6.605.iFRKjn +func (client *Client) UpdateDomainGroup(args *UpdateDomainGroupArgs) (response *UpdateDomainGroupResponse, err error) { + action := "UpdateDomainGroup" + response = &UpdateDomainGroupResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + log.Printf("%s error, %v", action, err) + return response, err + } +} diff --git a/ddns-aliyun/alidns/UpdateDomainGroup_test.go b/ddns-aliyun/alidns/UpdateDomainGroup_test.go new file mode 100644 index 0000000..85ded4c --- /dev/null +++ b/ddns-aliyun/alidns/UpdateDomainGroup_test.go @@ -0,0 +1,23 @@ +package dns + +import "testing" + +func TestUpdateDomainGroup(t *testing.T) { + client := NewTestClientNew() + + addGroupArgs := AddDomainGroupArgs{ + GroupName: TestDomainGroupName, + } + addGroupRes, _ := client.AddDomainGroup(&addGroupArgs) + + updateArgs := UpdateDomainGroupArgs{ + GroupId: addGroupRes.GroupId, + GroupName: TestChanegGroupName, + } + _, err := client.UpdateDomainGroup(&updateArgs) + if err == nil { + t.Logf("UpdateDomainGroup success") + } else { + t.Errorf("Failed to UpdateDomainGroup, %v", err) + } +} diff --git a/ddns-aliyun/alidns/UpdateDomainRecord.go b/ddns-aliyun/alidns/UpdateDomainRecord.go new file mode 100644 index 0000000..ba32173 --- /dev/null +++ b/ddns-aliyun/alidns/UpdateDomainRecord.go @@ -0,0 +1,35 @@ +package dns + +import "github.com/denverdino/aliyungo/common" + +type UpdateDomainRecordArgs struct { + RecordId string + RR string + Type string + Value string + + //optional + TTL int32 + Priority int32 + Line string +} + +type UpdateDomainRecordResponse struct { + common.Response + InstanceId string + RecordId string +} + +// UpdateDomainRecord +// +// You can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/record-related&UpdateDomainRecord +func (client *Client) UpdateDomainRecord(args *UpdateDomainRecordArgs) (response *UpdateDomainRecordResponse, err error) { + action := "UpdateDomainRecord" + response = &UpdateDomainRecordResponse{} + err = client.Invoke(action, args, response) + if err == nil { + return response, nil + } else { + return nil, err + } +} diff --git a/ddns-aliyun/alidns/UpdateDomainRecord_test.go b/ddns-aliyun/alidns/UpdateDomainRecord_test.go new file mode 100644 index 0000000..59f4ff9 --- /dev/null +++ b/ddns-aliyun/alidns/UpdateDomainRecord_test.go @@ -0,0 +1,43 @@ +package dns + +import ( + "testing" +) + +func TestUpdateDomainRecord(t *testing.T) { + //prepare + client := NewTestClient() + addDomainRecordArgs := AddDomainRecordArgs{ + DomainName: TestDomainName, + RR: "testupdaterecordid", + Value: "8.8.8.8", + Type: ARecord, + } + + addResponse, err := client.AddDomainRecord(&addDomainRecordArgs) + + // test update record + updateArgs := UpdateDomainRecordArgs{ + RecordId: addResponse.RecordId, + RR: addDomainRecordArgs.RR, + Value: "4.4.4.4", + Type: ARecord, + } + + _, err = client.UpdateDomainRecord(&updateArgs) + if err == nil { + t.Logf("UpdateDomainRecord success: RR:%s Value:%s", updateArgs.RR, updateArgs.Value) + } else { + t.Errorf("Failed to UpdateDomainRecord: %s", updateArgs.RecordId) + } + + //clearup + deleteDomainRecordArgs := DeleteDomainRecordArgs{ + RecordId: addResponse.RecordId, + } + _, err = client.DeleteDomainRecord(&deleteDomainRecordArgs) + if err != nil { + t.Errorf("Failed to DeleteDomainRecord: %s", deleteDomainRecordArgs.RecordId) + } + +} diff --git a/ddns-aliyun/alidns/client.go b/ddns-aliyun/alidns/client.go new file mode 100644 index 0000000..4d655d4 --- /dev/null +++ b/ddns-aliyun/alidns/client.go @@ -0,0 +1,50 @@ +package dns + +import ( + "os" + + "github.com/denverdino/aliyungo/common" +) + +type Client struct { + common.Client +} + +const ( + // DNSDefaultEndpoint is the default API endpoint of DNS services + DNSDefaultEndpoint = "http://dns.aliyuncs.com" + DNSAPIVersion = "2015-01-09" + + DNSDefaultEndpointNew = "http://alidns.aliyuncs.com" +) + +// NewClient creates a new instance of DNS client +func NewClient(accessKeyId, accessKeySecret string) *Client { + endpoint := os.Getenv("DNS_ENDPOINT") + if endpoint == "" { + endpoint = DNSDefaultEndpoint + } + return NewClientWithEndpoint(endpoint, accessKeyId, accessKeySecret) +} + +// NewClientNew creates a new instance of DNS client, with http://alidns.aliyuncs.com as default endpoint +func NewClientNew(accessKeyId, accessKeySecret string) *Client { + endpoint := os.Getenv("DNS_ENDPOINT") + if endpoint == "" { + endpoint = DNSDefaultEndpointNew + } + return NewClientWithEndpoint(endpoint, accessKeyId, accessKeySecret) +} + +// NewCustomClient creates a new instance of ECS client with customized API endpoint +func NewCustomClient(accessKeyId, accessKeySecret string, endpoint string) *Client { + client := &Client{} + client.Init(endpoint, DNSAPIVersion, accessKeyId, accessKeySecret) + return client +} + +func NewClientWithEndpoint(endpoint string, accessKeyId, accessKeySecret string) *Client { + client := &Client{} + client.Init(endpoint, DNSAPIVersion, accessKeyId, accessKeySecret) + return client +} diff --git a/ddns-aliyun/alidns/config_test.go b/ddns-aliyun/alidns/config_test.go new file mode 100644 index 0000000..117c255 --- /dev/null +++ b/ddns-aliyun/alidns/config_test.go @@ -0,0 +1,37 @@ +package dns + +//Modify with your Access Key Id and Access Key Secret +const ( + TestAccessKeyId = "MY_ACCESS_KEY_ID" + TestAccessKeySecret = "MY_ACCESS_KEY_SECRET" + TestDomainName = "aisafe.win" + TestDomainGroupName = "testgroup" + TestChanegGroupName = "testchangegroup" +) + +var testClient *Client + +func NewTestClient() *Client { + if testClient == nil { + testClient = NewClient(TestAccessKeyId, TestAccessKeySecret) + } + return testClient +} + +// change DNSDefaultEndpoint to "http://alidns.aliyuncs.com" +func NewTestClientNew() *Client { + if testClient == nil { + testClient = NewClientNew(TestAccessKeyId, TestAccessKeySecret) + } + return testClient +} + +var testDebugClient *Client + +func NewTestClientForDebug() *Client { + if testDebugClient == nil { + testDebugClient = NewClient(TestAccessKeyId, TestAccessKeySecret) + testDebugClient.SetDebug(true) + } + return testDebugClient +} diff --git a/ddns-aliyun/alidns/record.go b/ddns-aliyun/alidns/record.go new file mode 100644 index 0000000..5e306f7 --- /dev/null +++ b/ddns-aliyun/alidns/record.go @@ -0,0 +1,28 @@ +package dns + +// +//you can read doc at https://docs.aliyun.com/#/pub/dns/api-reference/enum-type&record-format +const ( + ARecord = "A" + NSRecord = "NS" + MXRecord = "MX" + TXTRecord = "TXT" + CNAMERecord = "CNAME" + SRVRecord = "SRV" + AAAARecord = "AAAA" + RedirectURLRecord = "REDIRECT_URL" + ForwordURLRecord = "FORWORD_URL" +) + +type RecordType struct { + DomainName string + RecordId string + RR string + Type string + Value string + TTL int32 + Priority int32 + Line string + Status string + Locked bool +} diff --git a/ddns-aliyun/build-release.sh b/ddns-aliyun/build-release.sh new file mode 100755 index 0000000..ba46633 --- /dev/null +++ b/ddns-aliyun/build-release.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +name='aliddns' + +MD5='md5sum' +if [[ "$(uname)" == 'Darwin' ]]; then + MD5='md5' +fi + +# UPX=false +# if hash upx 2>/dev/null; then +# UPX=true +# fi + +VERSION=$(curl -sSL https://api.github.com/repos/honwen/aliyun-ddns-cli/commits/master | sed -n '{/sha/p; /date/p;}'| sed 's/.* \"//g' | cut -c1-10 | tr '[:lower:]' '[:upper:]' | sed 'N;s/\n/@/g' | head -1) +LDFLAGS="-X main.version=$VERSION -s -w" + +# X86 +OSES=(windows linux darwin freebsd) +# ARCHS=(amd64 386) +ARCHS=(amd64) +rm -rf ./release +mkdir -p ./release +for os in ${OSES[@]}; do + for arch in ${ARCHS[@]}; do + suffix="" + if [ "$os" == "windows" ]; then + suffix=".exe" + fi + env CGO_ENABLED=0 GOOS=$os GOARCH=$arch go build -ldflags "$LDFLAGS" -o ./release/${name}_${os}_${arch}${suffix} . + # if $UPX; then upx -9 ./release/${name}_${os}_${arch}${suffix} -o ./release/${name}_${os}_${arch}${suffix}_upx; fi + tar -C ./release -zcf ./release/${name}_${os}-${arch}-$VERSION.tar.gz ./${name}_${os}_${arch}${suffix} + $MD5 ./release/${name}_${os}-${arch}-$VERSION.tar.gz + done +done + +# ARM64 +env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags "$LDFLAGS" -o ./release/${name}_arm64 . +# ARM +ARMS=(5 6 7) +for v in ${ARMS[@]}; do + env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=$v go build -ldflags "$LDFLAGS" -o ./release/${name}_arm$v . +done +# if $UPX; then upx -9 ./release/${name}_arm*; fi +tar -C ./release -zcf ./release/${name}_arm-$VERSION.tar.gz $(for v in ${ARMS[@]}; do echo -n "./${name}_arm$v ";done) +$MD5 ./release/${name}_arm-$VERSION.tar.gz + +# MIPS/hardfloat +env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$LDFLAGS" -o ./release/${name}_mipsle . +env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$LDFLAGS" -o ./release/${name}_mips . +# MIPS/softfloat +env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "$LDFLAGS" -o ./release/${name}_mipsle_sf . +env CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -ldflags "$LDFLAGS" -o ./release/${name}_mips_sf . +# if $UPX; then upx -9 ./release/${name}_mips**; fi +tar -C ./release -zcf ./release/${name}_mipsle-$VERSION.tar.gz ./${name}_mipsle +tar -C ./release -zcf ./release/${name}_mips-$VERSION.tar.gz ./${name}_mips +tar -C ./release -zcf ./release/${name}_mipsle-sf-$VERSION.tar.gz ./${name}_mipsle_sf +tar -C ./release -zcf ./release/${name}_mips-sf-$VERSION.tar.gz ./${name}_mips_sf +$MD5 ./release/${name}_mipsle-$VERSION.tar.gz diff --git a/ddns-aliyun/example/Synology_Docker.png b/ddns-aliyun/example/Synology_Docker.png new file mode 100644 index 0000000000000000000000000000000000000000..72b849d743c5a18d9773cffd6408cbc0a6017c2a GIT binary patch literal 212750 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 literal 0 HcmV?d00001 diff --git a/ddns-aliyun/go.mod b/ddns-aliyun/go.mod new file mode 100644 index 0000000..a6c4e6a --- /dev/null +++ b/ddns-aliyun/go.mod @@ -0,0 +1,11 @@ +module github.com/honwen/aliyun-ddns-cli + +go 1.16 + +require ( + github.com/denverdino/aliyungo v0.0.0-20210518071019-eb3bbb144d8a + github.com/honwen/golibs v0.1.4 + github.com/honwen/ip2loc v0.1.2 + github.com/stretchr/testify v1.7.0 + github.com/urfave/cli v1.22.5 +) diff --git a/ddns-aliyun/go.sum b/ddns-aliyun/go.sum new file mode 100644 index 0000000..a175d6b --- /dev/null +++ b/ddns-aliyun/go.sum @@ -0,0 +1,102 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 h1:52m0LGchQBBVqJRyYYufQuIbVqRawmubW3OFGqK1ekw= +github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635/go.mod h1:lmLxL+FV291OopO93Bwf9fQLQeLyt33VJRUg5VJ30us= +github.com/ameshkov/dnscrypt v1.1.0 h1:2vAt5dD6ZmqlAxEAfzRcLBnkvdf8NI46Kn9InSwQbSI= +github.com/ameshkov/dnscrypt v1.1.0/go.mod h1:ikduAxNLCTEfd1AaCgpIA5TgroIVQ8JY3Vb095fiFJg= +github.com/ameshkov/dnsstamps v1.0.1/go.mod h1:Ii3eUu73dx4Vw5O4wjzmT5+lkCwovjzaEZZ4gKyIH5A= +github.com/ameshkov/dnsstamps v1.0.3 h1:Srzik+J9mivH1alRACTbys2xOxs0lRH9qnTA7Y1OYVo= +github.com/ameshkov/dnsstamps v1.0.3/go.mod h1:Ii3eUu73dx4Vw5O4wjzmT5+lkCwovjzaEZZ4gKyIH5A= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denverdino/aliyungo v0.0.0-20210518071019-eb3bbb144d8a h1:J9+NI0ywi1btTOYseLdmr/H3XxutbC4m2bU48kKpwVs= +github.com/denverdino/aliyungo v0.0.0-20210518071019-eb3bbb144d8a/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/go-chi/chi v1.5.3/go.mod h1:Q8xfe6s3fjZyMr8ZTv5jL+vxhVaFyCq2s+RvSfzTD0E= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/honwen/golibs v0.1.4 h1:7B0gXElZex11CVfNs6p9jn7uj/DFroQgI4GIcrh9Wac= +github.com/honwen/golibs v0.1.4/go.mod h1:BqdA1MZSiyB9msXACcDNxUn17DSReiIvUWARfpzPI30= +github.com/honwen/ip2loc v0.1.2 h1:YgIK6A6iBynOlh2tzYRKl8mGmFoHcPPwws5Q0Ar4lwM= +github.com/honwen/ip2loc v0.1.2/go.mod h1:4loWbEvIxSNNr6pDp2YfPnAnJN/SKN7LiHfFr0rHB9o= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/knadh/koanf v0.14.0/go.mod h1:H5mEFsTeWizwFXHKtsITL5ipsLTuAMQoGuQpp+1JL9U= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mr-karan/doggo v0.4.0 h1:d5z93qsmEnWLZ2iNn5uBlN70R71wk9RraD02x0kTt/g= +github.com/mr-karan/doggo v0.4.0/go.mod h1:Fr8UVbK1pBT1p3hXjF0dWDKQ+K096siHYnXT0Em0btA= +github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= +github.com/rhnvrm/simples3 v0.5.0/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU= +github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 h1:3zb4D3T4G8jdExgVU/95+vQXfpEPiMdCaZgmGVxjNHM= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210502030024-e5908800b52b h1:jCRjgm6WJHzM8VQrm/es2wXYqqbq0NZ1yXFHHgzkiVQ= +golang.org/x/net v0.0.0-20210502030024-e5908800b52b/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/ddns-aliyun/main.go b/ddns-aliyun/main.go new file mode 100644 index 0000000..bb1954e --- /dev/null +++ b/ddns-aliyun/main.go @@ -0,0 +1,400 @@ +package main + +import ( + "errors" + "fmt" + "log" + "math/rand" + "os" + "regexp" + "runtime" + "sort" + "strconv" + "strings" + "time" + + "github.com/denverdino/aliyungo/common" + dns "github.com/honwen/aliyun-ddns-cli/alidns" + "github.com/honwen/golibs/cip" + "github.com/honwen/golibs/domain" + "github.com/urfave/cli" +) + +// AccessKey from https://ak-console.aliyun.com/#/accesskey +type AccessKey struct { + ID string + Secret string + client *dns.Client +} + +func (ak *AccessKey) getClient() *dns.Client { + if len(ak.ID) <= 0 && len(ak.Secret) <= 0 { + return nil + } + if ak.client == nil { + ak.client = dns.NewClient(ak.ID, ak.Secret) + ak.client.SetEndpoint(dns.DNSDefaultEndpointNew) + } + return ak.client +} + +func (ak AccessKey) String() string { + return fmt.Sprintf("Access Key: [ ID: %s ;\t Secret: %s ]", ak.ID, ak.Secret) +} + +func (ak *AccessKey) ListRecord(domain string) (dnsRecords []dns.RecordTypeNew, err error) { + var resp *dns.DescribeDomainRecordsNewResponse + for idx := 1; idx <= 99; idx++ { + resp, err = ak.getClient().DescribeDomainRecordsNew( + &dns.DescribeDomainRecordsNewArgs{ + DomainName: domain, + Pagination: common.Pagination{PageNumber: idx, PageSize: 50}, + }) + if err != nil { + return + } + dnsRecords = append(dnsRecords, resp.DomainRecords.Record...) + if len(dnsRecords) >= resp.PaginationResult.TotalCount { + return + } + } + return +} + +func (ak *AccessKey) DelRecord(rr, domain string) (err error) { + var target *dns.RecordTypeNew + if dnsRecords, err := ak.ListRecord(domain); err == nil { + for i := range dnsRecords { + if dnsRecords[i].RR == rr { + target = &dnsRecords[i] + _, err = ak.getClient().DeleteDomainRecord( + &dns.DeleteDomainRecordArgs{ + RecordId: target.RecordId, + }, + ) + } + } + } else { + return err + } + return +} + +func (ak *AccessKey) UpdateRecord(recordID, rr, dmType, value string) (err error) { + _, err = ak.getClient().UpdateDomainRecord( + &dns.UpdateDomainRecordArgs{ + RecordId: recordID, + RR: rr, + Value: value, + Type: dmType, + }) + return +} + +func (ak *AccessKey) AddRecord(domain, rr, dmType, value string) (err error) { + _, err = ak.getClient().AddDomainRecord( + &dns.AddDomainRecordArgs{ + DomainName: domain, + RR: rr, + Type: dmType, + Value: value, + }) + return err +} + +func (ak *AccessKey) CheckAndUpdateRecord(rr, domain, ipaddr, recordType string) (err error) { + fulldomain := strings.Join([]string{rr, domain}, `.`) + if reslove(fulldomain) == ipaddr { + return // Skip + } + targetCnt := 0 + var target *dns.RecordTypeNew + if dnsRecords, err := ak.ListRecord(domain); err == nil { + for i := range dnsRecords { + if dnsRecords[i].RR == rr && dnsRecords[i].Type == recordType { + target = &dnsRecords[i] + targetCnt++ + } + } + } else { + return err + } + + if targetCnt > 1 { + ak.DelRecord(rr, domain) + target = nil + } + + if target == nil { + err = ak.AddRecord(domain, rr, recordType, ipaddr) + } else if target.Value != ipaddr { + if target.Type != recordType { + return fmt.Errorf("record type error! oldType=%s, targetType=%s", target.Type, recordType) + } + err = ak.UpdateRecord(target.RecordId, target.RR, target.Type, ipaddr) + } + if err != nil && strings.Contains(err.Error(), `DomainRecordDuplicate`) { + ak.DelRecord(rr, domain) + return ak.CheckAndUpdateRecord(rr, domain, ipaddr, recordType) + } + return err +} + +var ( + accessKey AccessKey + VersionString = "MISSING build version [git hash]" +) + +func init() { + rand.Seed(time.Now().UnixNano()) +} + +func main() { + app := cli.NewApp() + app.Name = "aliddns" + app.Usage = "aliyun-ddns-cli" + app.Version = fmt.Sprintf("Git:[%s] (%s)", strings.ToUpper(VersionString), runtime.Version()) + app.Commands = []cli.Command{ + { + Name: "list", + Category: "DDNS", + Usage: "List AliYun's DNS DomainRecords Record", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "domain, d", + Usage: "Specific `DomainName`. like aliyun.com", + }, + }, + Action: func(c *cli.Context) error { + if err := appInit(c, true); err != nil { + return err + } + // fmt.Println(c.Command.Name, "task: ", accessKey, c.String("domain")) + _, domain := domain.SplitDomainToRR(c.String("domain")) + if dnsRecords, err := accessKey.ListRecord(domain); err != nil { + fmt.Printf("%+v", err) + } else { + for _, v := range dnsRecords { + fmt.Printf("%20s %-8s %s\n", v.RR+`.`+v.DomainName, v.Type, v.Value) + } + } + return nil + }, + }, + { + Name: "delete", + Category: "DDNS", + Usage: "Delete AliYun's DNS DomainRecords Record", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "domain, d", + Usage: "Specific `FullDomainName`. like ddns.aliyun.com", + }, + }, + Action: func(c *cli.Context) error { + if err := appInit(c, true); err != nil { + return err + } + // fmt.Println(c.Command.Name, "task: ", accessKey, c.String("domain")) + if err := accessKey.DelRecord(domain.SplitDomainToRR(c.String("domain"))); err != nil { + fmt.Printf("%+v", err) + } else { + fmt.Println(c.String("domain"), "Deleted") + } + return nil + }, + }, + { + Name: "update", + Category: "DDNS", + Usage: "Update AliYun's DNS DomainRecords Record, Create Record if not exist", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "domain, d", + Usage: "Specific `DomainName`. like ddns.aliyun.com", + }, + cli.StringFlag{ + Name: "ipaddr, i", + Usage: "Specific `IP`. like 1.2.3.4", + }, + }, + Action: func(c *cli.Context) error { + if err := appInit(c, true); err != nil { + return err + } + fmt.Println(c.Command.Name, "task: ", accessKey, c.String("domain"), c.String("ipaddr")) + rr, domain := domain.SplitDomainToRR(c.String("domain")) + recordType := "A" + if c.GlobalBool("ipv6") { + recordType = "AAAA" + } + if err := accessKey.CheckAndUpdateRecord(rr, domain, c.String("ipaddr"), recordType); err != nil { + log.Printf("%+v", err) + } else { + log.Println(c.String("domain"), c.String("ipaddr"), ip2locCN(c.String("ipaddr"))) + } + return nil + }, + }, + { + Name: "auto-update", + Category: "DDNS", + Usage: "Auto-Update AliYun's DNS DomainRecords Record, Get IP using its getip", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "domain, d", + Usage: "Specific `DomainName`. like ddns.aliyun.com", + }, + cli.StringFlag{ + Name: "redo, r", + Value: "", + Usage: "redo Auto-Update, every N `Seconds`; Disable if N less than 10; End with [Rr] enable random delay: [N, 2N]", + }, + }, + Action: func(c *cli.Context) error { + if err := appInit(c, true); err != nil { + return err + } + // fmt.Println(c.Command.Name, "task: ", accessKey, c.String("domain"), c.Int64("redo")) + rr, domain := domain.SplitDomainToRR(c.String("domain")) + recordType := "A" + if c.GlobalBool("ipv6") { + recordType = "AAAA" + } + redoDurtionStr := c.String("redo") + if len(redoDurtionStr) > 0 && !regexp.MustCompile(`\d+[Rr]?$`).MatchString(redoDurtionStr) { + return errors.New(`redo format: [0-9]+[Rr]?$`) + } + randomDelay := regexp.MustCompile(`\d+[Rr]$`).MatchString(redoDurtionStr) + redoDurtion := 0 + if randomDelay { + redoDurtion, _ = strconv.Atoi(redoDurtionStr[:len(redoDurtionStr)-1]) + } else { + redoDurtion, _ = strconv.Atoi(redoDurtionStr) + } + // Print Version if exist + if redoDurtion > 0 && !strings.HasPrefix(VersionString, "MISSING") { + fmt.Fprintf(os.Stderr, "%s %s\n", strings.ToUpper(c.App.Name), c.App.Version) + } + for { + autoip := myip() + if len(autoip) == 0 { + log.Printf("# Err-CheckAndUpdateRecord: [%s]", "IP is empty, PLZ check network") + } else { + if err := accessKey.CheckAndUpdateRecord(rr, domain, autoip, recordType); err != nil { + log.Printf("# Err-CheckAndUpdateRecord: [%+v]", err) + } else { + log.Println(c.String("domain"), autoip, ip2locCN(autoip)) + } + } + if redoDurtion < 10 { + break // Disable if N less than 10 + } + if randomDelay { + time.Sleep(time.Duration(redoDurtion+rand.Intn(redoDurtion)) * time.Second) + } else { + time.Sleep(time.Duration(redoDurtion) * time.Second) + } + } + return nil + }, + }, + { + Name: "getip", + Category: "GET-IP", + Usage: fmt.Sprintf(" Get IP Combine 10+ different Web-API"), + Action: func(c *cli.Context) error { + if err := appInit(c, false); err != nil { + return err + } + // fmt.Println(c.Command.Name, "task: ", c.Command.Usage) + ip := myip() + fmt.Println(ip, ip2locCN(ip)) + return nil + }, + }, + { + Name: "resolve", + Category: "GET-IP", + Usage: fmt.Sprintf(" Get DNS-IPv4 Combine 4+ DNS Upstream"), + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "domain, d", + Usage: "Specific `DomainName`. like ddns.aliyun.com", + }, + }, + Action: func(c *cli.Context) error { + if err := appInit(c, false); err != nil { + return err + } + // fmt.Println(c.Command.Name, "task: ", c.Command.Usage) + ip := reslove(c.String("domain")) + fmt.Println(ip, ip2locCN(ip)) + return nil + }, + }, + } + app.Flags = []cli.Flag{ + cli.StringFlag{ + Name: "access-key-id, id", + Usage: "AliYun's Access Key ID", + }, + cli.StringFlag{ + Name: "access-key-secret, secret", + Usage: "AliYun's Access Key Secret", + }, + cli.StringSliceFlag{ + Name: "ipapi, api", + Usage: "Web-API to Get IP, like: http://myip.ipip.net", + }, + cli.BoolFlag{ + Name: "ipv6, 6", + Usage: "IPv6", + }, + } + app.Action = func(c *cli.Context) error { + return appInit(c, true) + } + app.Run(os.Args) +} + +func appInit(c *cli.Context, checkAccessKey bool) error { + akids := []string{c.GlobalString("access-key-id"), os.Getenv("AKID"), os.Getenv("AccessKeyID")} + akscts := []string{c.GlobalString("access-key-secret"), os.Getenv("AKSCT"), os.Getenv("AccessKeySecret")} + sort.Sort(sort.Reverse(sort.StringSlice(akids))) + sort.Sort(sort.Reverse(sort.StringSlice(akscts))) + accessKey.ID = akids[0] + accessKey.Secret = akscts[0] + if checkAccessKey && accessKey.getClient() == nil { + cli.ShowAppHelp(c) + return errors.New("access-key is empty") + } + + if c.GlobalBool("ipv6") { + funcs["myip"] = cip.MyIPv6 + funcs["reslove"] = cip.ResloveIPv6 + } + + ipapi := []string{} + for _, api := range c.GlobalStringSlice("ipapi") { + if !regexp.MustCompile(`^https?://.*`).MatchString(api) { + api = "http://" + api + } + if regexp.MustCompile(`(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]`).MatchString(api) { + ipapi = append(ipapi, api) + } + } + if len(ipapi) > 0 { + regx := regexp.MustCompile(cip.RegxIPv4) + if c.GlobalBoolT("ipv6") { + regx = regexp.MustCompile(cip.RegxIPv6) + } + funcs["myip"] = func() string { + return cip.FastWGetWithVailder(ipapi, func(s string) string { + return regx.FindString((s)) + }) + } + } + + return nil +} diff --git a/ddns-aliyun/utils.go b/ddns-aliyun/utils.go new file mode 100644 index 0000000..f2b2eb9 --- /dev/null +++ b/ddns-aliyun/utils.go @@ -0,0 +1,68 @@ +package main + +import ( + "errors" + "fmt" + "log" + "reflect" + "strings" + + "github.com/honwen/golibs/cip" + "github.com/honwen/ip2loc" +) + +var funcs = map[string]interface{}{ + "myip": cip.MyIPv4, + "reslove": cip.ResloveIPv4, +} + +func ip2locCN(ip string) (str string) { + if strings.Count(ip, `.`) < 3 { + return + } + if loc, err := ip2loc.IP2loc(ip); err != nil { + log.Printf("%+v", err) + } else { + str = fmt.Sprintf("[%s %s %s %s]", loc.CountryName, loc.RegionName, loc.CityName, loc.IspDomain) + for strings.Contains(str, " ]") { + str = strings.ReplaceAll(str, " ]", "]") + } + for strings.Contains(str, " ") { + str = strings.ReplaceAll(str, " ", " ") + } + } + return +} + +func Call(m map[string]interface{}, name string, params ...interface{}) (result []reflect.Value, err error) { + f := reflect.ValueOf(m[name]) + if len(params) != f.Type().NumIn() { + err = errors.New("The number of params is not adapted.") + return + } + + in := make([]reflect.Value, len(params)) + for k, param := range params { + in[k] = reflect.ValueOf(param) + } + result = f.Call(in) + return +} + +func myip() (ip string) { + if result, err := Call(funcs, "myip"); err == nil { + for _, r := range result { + return r.String() + } + } + return +} + +func reslove(domain string) (ip string) { + if result, err := Call(funcs, "reslove", domain); err == nil { + for _, r := range result { + return r.String() + } + } + return +} diff --git a/ddns-aliyun/utils_test.go b/ddns-aliyun/utils_test.go new file mode 100644 index 0000000..1e863be --- /dev/null +++ b/ddns-aliyun/utils_test.go @@ -0,0 +1,111 @@ +package main + +import ( + "regexp" + "testing" + + "github.com/honwen/golibs/cip" + "github.com/honwen/golibs/domain" + "github.com/stretchr/testify/assert" +) + +func TestIp2locCN(t *testing.T) { + assert.Equal(t, ip2locCN("202.96.128.86"), "[中国 广东 广州 电信]") + assert.Equal(t, ip2locCN("202.96.209.133"), "[中国 上海 上海 电信]") + assert.Equal(t, ip2locCN("219.141.136.10"), "[中国 北京 北京 电信]") + + assert.Equal(t, ip2locCN("210.22.70.3"), "[中国 上海 上海 联通]") + assert.Equal(t, ip2locCN("123.123.123.123"), "[中国 北京 北京 联通]") + + assert.Equal(t, ip2locCN("223.87.238.22"), "[中国 四川 成都 移动]") + + assert.Equal(t, ip2locCN("101.6.6.6"), "[中国 北京 北京 教育网]") + + assert.Equal(t, ip2locCN("168.95.1.1"), "[中国 台湾 中华电信]") + assert.Equal(t, ip2locCN("202.67.240.222"), "[中国 香港]") + + assert.Equal(t, ip2locCN("203.189.136.148"), "[柬埔寨 柬埔寨]") + assert.Equal(t, ip2locCN("203.112.2.4"), "[日本 日本]") + assert.Equal(t, ip2locCN("80.80.80.80"), "[荷兰 荷兰]") + assert.Equal(t, ip2locCN("74.82.42.42"), "[美国 加利福尼亚州]") + +} + +func TestGetIPv4(t *testing.T) { + funcs["myip"] = cip.MyIPv4 + ip4 := myip() + assert.True(t, regexp.MustCompile(cip.RegxIPv4).MatchString(ip4) || len(ip4) == 0) +} + +func TestGetIPv6(t *testing.T) { + funcs["myip"] = cip.MyIPv6 + ip6 := myip() + assert.True(t, regexp.MustCompile(cip.RegxIPv6).MatchString(ip6) || len(ip6) == 0) +} + +func TestResloveIPv4(t *testing.T) { + funcs["reslove"] = cip.ResloveIPv4 + assert.Contains(t, []string{"8.8.8.8", "8.8.4.4"}, reslove("dns.google")) + assert.Contains(t, []string{"223.6.6.6", "223.5.5.5"}, reslove("dns.alidns.com")) +} + +func TestResloveIPv6(t *testing.T) { + funcs["reslove"] = cip.ResloveIPv6 + assert.Contains(t, []string{"2001:4860:4860::8844", "2001:4860:4860::8888"}, reslove("dns.google")) + assert.Contains(t, []string{"2400:3200::1", "2400:3200:baba::1"}, reslove("dns.alidns.com")) +} + +func TestSplitDomain001(t *testing.T) { + rr, domain := domain.SplitDomainToRR("a.example.com") + + assert.Equal(t, rr, "a") + assert.Equal(t, domain, "example.com") +} + +func TestSplitDomain002(t *testing.T) { + rr, domain := domain.SplitDomainToRR("example.com") + + assert.Equal(t, rr, "@") + assert.Equal(t, domain, "example.com") +} + +func TestSplitDomain003(t *testing.T) { + rr, domain := domain.SplitDomainToRR("*.example.com") + + assert.Equal(t, rr, "*") + assert.Equal(t, domain, "example.com") +} + +func TestSplitDomain004(t *testing.T) { + rr, domain := domain.SplitDomainToRR("*.a.example.com") + + assert.Equal(t, rr, "*.a") + assert.Equal(t, domain, "example.com") +} + +func TestSplitDomain005(t *testing.T) { + rr, domain := domain.SplitDomainToRR("*.b.a.example.com") + + assert.Equal(t, rr, "*.b.a") + assert.Equal(t, domain, "example.com") +} +func TestSplitDomain006(t *testing.T) { + rr, domain := domain.SplitDomainToRR("a.example.co.kr") + + assert.Equal(t, rr, "a") + assert.Equal(t, domain, "example.co.kr") +} + +func TestSplitDomain007(t *testing.T) { + rr, domain := domain.SplitDomainToRR("*.a.example.co.kr") + + assert.Equal(t, rr, "*.a") + assert.Equal(t, domain, "example.co.kr") +} + +func TestSplitDomain008(t *testing.T) { + rr, domain := domain.SplitDomainToRR("example.co.kr") + + assert.Equal(t, rr, "@") + assert.Equal(t, domain, "example.co.kr") +}