harness-drone/cmd/drone-server/inject_server.go

148 lines
4.6 KiB
Go
Raw Permalink Normal View History

2019-02-19 23:56:41 +00:00
// Copyright 2019 Drone IO, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"net/http"
"github.com/drone/drone/cmd/drone-server/config"
2019-04-24 22:22:55 +00:00
"github.com/drone/drone/core"
2019-02-19 23:56:41 +00:00
"github.com/drone/drone/handler/api"
2019-05-21 20:29:58 +00:00
"github.com/drone/drone/handler/health"
2019-02-19 23:56:41 +00:00
"github.com/drone/drone/handler/web"
"github.com/drone/drone/metric"
"github.com/drone/drone/operator/manager"
"github.com/drone/drone/operator/manager/rpc"
2019-05-21 18:45:42 +00:00
"github.com/drone/drone/operator/manager/rpc2"
2019-02-19 23:56:41 +00:00
"github.com/drone/drone/server"
"github.com/google/wire"
"github.com/go-chi/chi"
2019-12-30 01:59:42 +00:00
"github.com/go-chi/chi/middleware"
2019-02-19 23:56:41 +00:00
"github.com/unrolled/secure"
)
2019-05-21 20:00:16 +00:00
type (
healthzHandler http.Handler
metricsHandler http.Handler
2019-12-30 01:59:42 +00:00
pprofHandler http.Handler
2019-05-21 20:00:16 +00:00
rpcHandlerV1 http.Handler
rpcHandlerV2 http.Handler
)
2019-02-19 23:56:41 +00:00
// wire set for loading the server.
var serverSet = wire.NewSet(
manager.New,
api.New,
web.New,
2019-05-21 20:29:58 +00:00
provideHealthz,
2019-04-24 22:22:55 +00:00
provideMetric,
2019-12-30 01:59:42 +00:00
providePprof,
2019-02-19 23:56:41 +00:00
provideRouter,
provideRPC,
2019-05-21 18:45:42 +00:00
provideRPC2,
2019-02-19 23:56:41 +00:00
provideServer,
provideServerOptions,
)
// provideRouter is a Wire provider function that returns a
// router that is serves the provided handlers.
2019-12-30 01:59:42 +00:00
func provideRouter(api api.Server, web web.Server, rpcv1 rpcHandlerV1, rpcv2 rpcHandlerV2, healthz healthzHandler, metrics *metric.Server, pprof pprofHandler) *chi.Mux {
2019-02-19 23:56:41 +00:00
r := chi.NewRouter()
2019-05-21 20:29:58 +00:00
r.Mount("/healthz", healthz)
2019-02-19 23:56:41 +00:00
r.Mount("/metrics", metrics)
r.Mount("/api", api.Handler())
2019-05-21 18:45:42 +00:00
r.Mount("/rpc/v2", rpcv2)
2019-05-21 20:00:16 +00:00
r.Mount("/rpc", rpcv1)
2019-02-19 23:56:41 +00:00
r.Mount("/", web.Handler())
2019-12-30 01:59:42 +00:00
r.Mount("/debug", pprof)
2019-02-19 23:56:41 +00:00
return r
}
2019-05-21 20:29:58 +00:00
// provideMetric is a Wire provider function that returns the
// healthcheck server.
func provideHealthz() healthzHandler {
v := health.New()
return healthzHandler(v)
}
2019-04-24 22:22:55 +00:00
// provideMetric is a Wire provider function that returns the
// metrics server exposing metrics in prometheus format.
func provideMetric(session core.Session, config config.Config) *metric.Server {
return metric.NewServer(session, config.Prometheus.EnableAnonymousAccess)
}
2019-12-30 01:59:42 +00:00
// providePprof is a Wire provider function that returns the
// pprof server endpoints.
func providePprof(config config.Config) pprofHandler {
if config.Server.Pprof == false {
return pprofHandler(
http.NotFoundHandler(),
)
}
return pprofHandler(
middleware.Profiler(),
)
}
2019-02-19 23:56:41 +00:00
// provideRPC is a Wire provider function that returns an rpc
// handler that exposes the build manager to a remote agent.
2019-05-21 20:00:16 +00:00
func provideRPC(m manager.BuildManager, config config.Config) rpcHandlerV1 {
v := rpc.NewServer(m, config.RPC.Secret)
return rpcHandlerV1(v)
2019-02-19 23:56:41 +00:00
}
2019-05-21 18:45:42 +00:00
// provideRPC2 is a Wire provider function that returns an rpc
// handler that exposes the build manager to a remote agent.
2019-05-21 20:00:16 +00:00
func provideRPC2(m manager.BuildManager, config config.Config) rpcHandlerV2 {
v := rpc2.NewServer(m, config.RPC.Secret)
return rpcHandlerV2(v)
2019-05-21 18:45:42 +00:00
}
2019-02-19 23:56:41 +00:00
// provideServer is a Wire provider function that returns an
// http server that is configured from the environment.
func provideServer(handler *chi.Mux, config config.Config) *server.Server {
return &server.Server{
Acme: config.Server.Acme,
Addr: config.Server.Port,
Cert: config.Server.Cert,
Key: config.Server.Key,
Host: config.Server.Host,
Handler: handler,
}
}
// provideServerOptions is a Wire provider function that returns
// the http web server security option from the environment.
func provideServerOptions(config config.Config) secure.Options {
return secure.Options{
AllowedHosts: config.HTTP.AllowedHosts,
HostsProxyHeaders: config.HTTP.HostsProxyHeaders,
SSLRedirect: config.HTTP.SSLRedirect,
SSLTemporaryRedirect: config.HTTP.SSLTemporaryRedirect,
SSLHost: config.HTTP.SSLHost,
SSLProxyHeaders: config.HTTP.SSLProxyHeaders,
STSSeconds: config.HTTP.STSSeconds,
STSIncludeSubdomains: config.HTTP.STSIncludeSubdomains,
STSPreload: config.HTTP.STSPreload,
ForceSTSHeader: config.HTTP.ForceSTSHeader,
FrameDeny: config.HTTP.FrameDeny,
ContentTypeNosniff: config.HTTP.ContentTypeNosniff,
BrowserXssFilter: config.HTTP.BrowserXSSFilter,
ContentSecurityPolicy: config.HTTP.ContentSecurityPolicy,
ReferrerPolicy: config.HTTP.ReferrerPolicy,
}
}