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
75
76
77
78
79
80
|
package main
import (
"context"
"net"
"os"
"os/signal"
"syscall"
"github.com/authzed/authzed-go/v1"
"github.com/rs/zerolog"
"github.com/xlgmokha/x/pkg/env"
"github.com/xlgmokha/x/pkg/ioc"
"github.com/xlgmokha/x/pkg/log"
"github.com/xlgmokha/x/pkg/x"
"gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/authz"
"gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/pls"
"google.golang.org/grpc"
)
func init() {
c := ioc.Default
ioc.RegisterSingleton[*zerolog.Logger](c, func() *zerolog.Logger {
return log.New(os.Stdout, log.Fields{"app": "authzd"})
})
ioc.RegisterSingleton[context.Context](c, func() context.Context {
logger := ioc.MustResolve[*zerolog.Logger](ioc.Default)
return logger.WithContext(context.Background())
})
ioc.RegisterSingleton[*grpc.ClientConn](c, func() *grpc.ClientConn {
ctx := ioc.MustResolve[context.Context](ioc.Default)
return authz.NewGrpcConnection(ctx, env.Fetch("AUTHZD_HOST", ":20000"))
})
ioc.RegisterSingleton[*authzed.Client](c, func() *authzed.Client {
ctx := ioc.MustResolve[context.Context](ioc.Default)
return authz.NewSpiceDBClient(
ctx,
env.Fetch("SPICEDB_ENDPOINT", ":50051"),
env.Fetch("SPICEDB_TOKEN", "secret"),
)
})
}
func main() {
ctx := ioc.MustResolve[context.Context](ioc.Default)
connection := ioc.MustResolve[*grpc.ClientConn](ioc.Default)
defer connection.Close()
client := ioc.MustResolve[*authzed.Client](ioc.Default)
defer client.Close()
response, err := authz.WriteSchema(ctx, client, "./etc/authzd/schema.zed")
if err != nil {
pls.LogErrorNow(ctx, err)
os.Exit(1)
}
pls.LogNow(ctx, log.Fields{"schema.write": response})
ctx = authz.Connection.With(ctx, connection)
ctx = authz.Client.With(ctx, client)
server := authz.New(ctx)
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-c
server.GracefulStop()
pls.LogNow(ctx, log.Fields{"status": "goodbye"})
}()
defer server.GracefulStop()
pls.LogNow(ctx, log.Fields{"status": "ready"})
socket := x.Must(net.Listen("tcp", ":10003"))
pls.LogErrorNow(ctx, server.Serve(socket))
}
|