func (c *Core) Start(ctx *cli.Context) { c.Ctx.Start() var private, public []byte j := jwt.New(private, public) m := middleware.New(c.Ctx.Policies, j) c.accountHandler = accounts.NewHandler(c.Ctx.Accounts, m) c.clientHandler = clients.NewHandler(c.Ctx.Osins, m) c.connectionHandler = connections.NewHandler(c.Ctx.Connections, m) c.providers = provider.NewRegistry(providers) c.oauthHandler = &oauth.Handler{ Accounts: c.Ctx.Accounts, Policies: c.Ctx.Policies, Guard: c.guard, Connections: c.Ctx.Connections, Providers: c.providers, Issuer: c.issuer, Audience: c.audience, JWT: j, OAuthConfig: oauth.DefaultConfig(), OAuthStore: c.Ctx.Osins, } extractor := m.ExtractAuthentication router := mux.NewRouter() c.accountHandler.SetRoutes(router, extractor) c.connectionHandler.SetRoutes(router, extractor) c.clientHandler.SetRoutes(router, extractor) c.oauthHandler.SetRoutes(router) http.Handle("/", router) http.ListenAndServe(listenOn, nil) }
func (c *Core) Start(ctx *cli.Context) error { c.Ctx.Start() private, err := jwt.LoadCertificate(jwtPrivateKeyPath) if err != nil { return fmt.Errorf("Could not load private key: %s", err) } public, err := jwt.LoadCertificate(jwtPublicKeyPath) if err != nil { return fmt.Errorf("Could not load public key: %s", err) } j := jwt.New(private, public) m := middleware.New(c.Ctx.Policies, j) c.guard = new(guard.Guard) c.accountHandler = accounts.NewHandler(c.Ctx.Accounts, m) c.clientHandler = clients.NewHandler(c.Ctx.Osins, m) c.connectionHandler = connections.NewHandler(c.Ctx.Connections, m) c.providers = provider.NewRegistry(providers) c.policyHandler = policies.NewHandler(c.Ctx.Policies, m, c.guard, j, c.Ctx.Osins) c.oauthHandler = &oauth.Handler{ Accounts: c.Ctx.Accounts, Policies: c.Ctx.Policies, Guard: c.guard, Connections: c.Ctx.Connections, Providers: c.providers, Issuer: c.issuer, Audience: c.audience, JWT: j, OAuthConfig: oauth.DefaultConfig(), OAuthStore: c.Ctx.Osins, States: c.Ctx.States, SignUpLocation: locations["signUp"], SignInLocation: locations["signIn"], Middleware: host.New(c.Ctx.Policies, j), } extractor := m.ExtractAuthentication router := mux.NewRouter() c.accountHandler.SetRoutes(router, extractor) c.connectionHandler.SetRoutes(router, extractor) c.clientHandler.SetRoutes(router, extractor) c.oauthHandler.SetRoutes(router, extractor) c.policyHandler.SetRoutes(router, extractor) // TODO un-hack this, add database check, add error response router.HandleFunc("/alive", func(w http.ResponseWriter, r *http.Request) { pkg.WriteJSON(w, &struct { Status string `json:"status"` }{ Status: "alive", }) }) if forceHTTP == "force" { http.Handle("/", router) log.Warn("You're using HTTP without TLS encryption. This is dangerously unsafe and you should not do this.") if err := http.ListenAndServe(listenOn, nil); err != nil { return fmt.Errorf("Could not serve HTTP server because %s", err) } return nil } http.Handle("/", router) srv := &http.Server{Addr: listenOn} http2.ConfigureServer(srv, &http2.Server{}) if err := srv.ListenAndServeTLS(tlsCertPath, tlsKeyPath); err != nil { return fmt.Errorf("Could not serve HTTP/2 server because %s", err) } return nil }