summaryrefslogtreecommitdiff
path: root/main.go
blob: 5750da11b1f72a418b5a424e2f19a832eff40f31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main

import (
	"log"
	"os"

	"github.com/gin-gonic/gin"
	"github.com/spf13/cobra"
	"github.com/spf13/viper"

	"code.crute.me/mcrute/go_ddns_manager/util"
	"code.crute.me/mcrute/go_ddns_manager/web"
	"code.crute.me/mcrute/go_ddns_manager/web/controllers"
	"code.crute.me/mcrute/go_ddns_manager/web/middleware"
)

func makeServer(cfg *web.ServerConfig) *gin.Engine {
	router := gin.Default()
	router.Use(middleware.ConfigContextMiddleware(cfg))

	router.GET("/reflect-ip", controllers.ReflectIP)

	ddns := router.Group("/dynamic-dns")
	ddns.Use(middleware.DDNSAuthMiddleware)
	{
		ddns.POST("", controllers.UpdateDynamicDNS)
	}

	acme := router.Group("/acme")
	acme.Use(middleware.AcmeAuthMiddleware)
	{
		acme.POST("", controllers.CreateAcmeChallenge)
		acme.DELETE("/:id", controllers.DeleteAcmeChallenge)
	}

	return router
}

func main() {
	cmd := &cobra.Command{
		Use:   "dns-manage-service [flags] dns-server-ip-port",
		Short: "DNS manager service",
		Args:  cobra.MinimumNArgs(1),
		Run: func(cmd *cobra.Command, args []string) {
			cfg, err := web.LoadServerConfig(
				viper.GetString("zones_config"),
				viper.GetString("auth_config"),
				args[0],
				viper.GetString("view_name"),
			)
			if err != nil {
				log.Println(err)
				os.Exit(1)
			}

			util.GinRun(
				makeServer(cfg),
				viper.GetBool("debug"),
				viper.GetString("listen"))
		},
	}

	util.WrapViper(cmd, "DNS_MANAGE").
		BindString("zones-config", "z", "cfg/zones.conf", "Bind key and zones config file").
		BindString("auth-config", "a", "cfg/server_auth.json", "Server auth configuration file").
		BindString("view-name", "n", "external", "Name of view to update for ACME and DDNS").
		BindString("listen", "l", ":9090", "Listen address and port").
		BindBool("debug", "d", false, "Run server in debug mode with debug logs")

	if err := cmd.Execute(); err != nil {
		log.Println(err)
		os.Exit(1)
	}
}