in gcp/ic/main.go [89:182]
func main() {
flag.Parse()
ctx := context.Background()
serviceinfo.Project = project
serviceinfo.Type = "ic"
serviceinfo.Name = srvName
sdlcc := grpcutil.NewGRPCClient(ctx, sdlAddr)
defer sdlcc.Close()
sdlc := lgrpcpb.NewLoggingServiceV2Client(sdlcc)
var store storage.Store
switch storageType {
case "datastore":
store = dsstore.NewStore(ctx, project, srvName, cfgPath)
case "memory":
store = storage.NewMemoryStorage(srvName, cfgPath)
// Import and resolve template variables, if any.
if err := ic.ImportConfig(store, srvName, cfgVars, true, true, true); err != nil {
glog.Exitf("ic.ImportConfig(_, %q, _) failed: %v", srvName, err)
}
default:
glog.Exitf("Unknown storage type: %q", storageType)
}
kmsClient, err := kms.NewKeyManagementClient(ctx)
if err != nil {
glog.Exitf("kms.NewKeyManagementClient(ctx) failed: %v", err)
}
gcpEncryption, err := gcpcrypt.New(ctx, project, "global", srvName+"_ring", srvName+"_key", kmsClient)
if err != nil {
glog.Exitf("gcpcrypt.New(ctx, %q, %q, %q, %q, kmsClient) failed: %v", project, "global", srvName+"_ring", srvName+"_key", err)
}
gcpSigner, err := gcpsign.New(ctx, project, "global", srvName+"_sign_ring", srvName+"_key", kmsClient)
if err != nil {
glog.Exitf("gcpsign.New(ctx, %q, %q, %q, %q, cliekmsClientnt) failed: %v", project, "global", srvName+"_sign_ring", srvName+"_key", err)
}
logger, err := logging.NewClient(ctx, project)
if err != nil {
glog.Exitf("logging.NewClient() failed: %v", err)
}
logger.OnError = func(err error) {
glog.Warningf("StackdriverLogging.Client.OnError: %v", err)
}
var hyproxy *hydraproxy.Service
if useHydra {
hydraAdminAddr = osenv.MustVar("HYDRA_ADMIN_URL")
hydraPublicAddr = osenv.MustVar("HYDRA_PUBLIC_URL")
hydraPublicAddrInternal := osenv.MustVar("HYDRA_PUBLIC_URL_INTERNAL")
hyproxy, err = hydraproxy.New(http.DefaultClient, hydraAdminAddr, hydraPublicAddrInternal, store)
if err != nil {
glog.Exitf("hydraproxy.New failed: %v", err)
}
}
r := mux.NewRouter()
s := ic.New(r, &ic.Options{
Domain: srvAddr,
ServiceName: srvName,
AccountDomain: acctDomain,
Store: store,
Encryption: gcpEncryption,
Signer: gcpSigner,
Logger: logger,
SDLC: sdlc,
AuditLogProject: project,
SkipInformationReleasePage: skipInformationReleasePage,
UseHydra: useHydra,
HydraAdminURL: hydraAdminAddr,
HydraPublicURL: hydraPublicAddr,
HydraPublicProxy: hyproxy,
ConsentDashboardURL: consentDashboardURL,
})
r.HandleFunc("/liveness_check", httputils.LivenessCheckHandler)
srv := server.New("ic", port, s.Handler)
srv.ServeUnblock()
c := make(chan os.Signal, 1)
// We'll accept graceful shutdowns when quit via SIGINT (Ctrl+C)
// SIGKILL, SIGQUIT or SIGTERM (Ctrl+/) will not be caught.
signal.Notify(c, os.Interrupt)
// Block until we receive our signal.
<-c
srv.Shutdown()
}