41 lines
1.4 KiB
Go
41 lines
1.4 KiB
Go
package cmd
|
|
|
|
import (
|
|
"log"
|
|
|
|
"gitea.nehmer.net/torben/dyndns/service"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var cmdNFTUpdate = &cobra.Command{
|
|
Use: "nft-update",
|
|
Short: "Dynamically update a NFT firewall",
|
|
Long: `Dynamically updates the given NFT Firewall sets based on the given v4 and/or v6 addresses.
|
|
At least one IP must be specified, the call fails if both IPs are empty.
|
|
The call will flush the sets given in the table before adding the IPs.`,
|
|
// Run is defined inline in init to capture Flag variables in the closure
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(cmdNFTUpdate)
|
|
ip4 := cmdNFTUpdate.Flags().IPP("ipv4", "4", nil, "IPv4 Address to add to the set")
|
|
ip6 := cmdNFTUpdate.Flags().IPP("ipv6", "6", nil, "IPv6 Address to add to the set")
|
|
table := cmdNFTUpdate.Flags().StringP("table", "t", "", "The name of the NFT table to modifiy")
|
|
cmdNFTUpdate.MarkFlagRequired("table")
|
|
set4 := cmdNFTUpdate.Flags().StringP("set4", "s", "", "The IPv4 NFT set name in the given table.")
|
|
set6 := cmdNFTUpdate.Flags().StringP("set6", "r", "", "The IPv6 NFT Set name in the given table.")
|
|
|
|
cmdNFTUpdate.Run = func(cmd *cobra.Command, args []string) {
|
|
log.Printf("Configuration in use: %v", viper.AllSettings())
|
|
service.LoadConfig()
|
|
|
|
err := service.NFTUpdateSets(*table, *set4, *ip4, *set6, *ip6)
|
|
if err != nil {
|
|
log.Fatalf("Could not update NFT: %s", err)
|
|
}
|
|
log.Println("NFT has been successfully updated.")
|
|
}
|
|
|
|
}
|