@@ -3,15 +3,19 @@ package main
3
3
import (
4
4
"context"
5
5
"flag"
6
+ "fmt"
7
+ "io"
6
8
"io/ioutil"
7
9
"net"
10
+ "net/http"
8
11
"os"
9
12
"strings"
10
13
11
14
"github.com/dhtech/dnsenforcer/enforcer"
12
15
"github.com/dhtech/dnsenforcer/enforcer/ipplan"
13
- pb "github.com/dhtech/proto/dns "
16
+ "github.com/ulikunitz/xz "
14
17
log "github.com/sirupsen/logrus"
18
+ pb "github.com/dhtech/proto/dns"
15
19
"google.golang.org/grpc"
16
20
"google.golang.org/grpc/reflection"
17
21
"gopkg.in/yaml.v2"
@@ -26,18 +30,43 @@ type enforcerServer struct {
26
30
}
27
31
28
32
func (s * enforcerServer ) Refresh (ctx context.Context , req * pb.RefreshRequest ) (* pb.RefreshResponse , error ) {
29
- ipp , err := ipplan . Open ( "/etc/ipplan.db" )
33
+ ipplanXz , err := http . Get ( os . Getenv ( "IPPLAN_XZ_URL" ) )
30
34
if err != nil {
35
+ log .Errorf ("Unable to fetch IPPLAN_XZ_URL: %v" , err )
36
+ return nil , fmt .Errorf ("failed to fetch ipplan.db.xz" )
37
+ }
38
+ defer ipplanXz .Body .Close ()
39
+
40
+ ipplanDb , err := xz .NewReader (ipplanXz .Body )
41
+ if err != nil {
42
+ log .Errorf ("Failed to decompress ipplan.db: %v" , err )
43
+ return nil , fmt .Errorf ("failed to decompress ipplan.db" )
44
+ }
45
+
46
+ ipplanFile , err := ioutil .TempFile ("" , "enforcerd" )
47
+ if err != nil {
48
+ return nil , err
49
+ }
50
+ defer os .Remove (ipplanFile .Name ())
51
+ if _ , err := io .Copy (ipplanFile , ipplanDb ); err != nil {
52
+ log .Errorf ("Failed to write ipplan.db: %v" , err )
31
53
return nil , err
32
54
}
33
55
34
- static , err := os .Open ("./static.yml" )
56
+ ipp , err := ipplan .Open (ipplanFile . Name () )
35
57
if err != nil {
36
58
return nil , err
37
59
}
38
60
61
+ static , err := http .Get (os .Getenv ("STATIC_URL" ))
62
+ if err != nil {
63
+ log .Errorf ("Unable to fetch STATIC_URL: %v" , err )
64
+ return nil , fmt .Errorf ("failed to fetch static record map" )
65
+ }
66
+ defer static .Body .Close ()
67
+
39
68
// Create new enforcer
40
- e , err := enforcer .New (s .v , ipp , static )
69
+ e , err := enforcer .New (s .v , ipp , static . Body )
41
70
defer e .Close ()
42
71
if err != nil {
43
72
return nil , err
0 commit comments